diff --git a/smmapdfw/test/Connector.py b/smmapdfw/test/Connector.py new file mode 100644 index 0000000..ec7f27b --- /dev/null +++ b/smmapdfw/test/Connector.py @@ -0,0 +1,75 @@ +import socket +import time +from threading import Thread, activeCount + + +class NetStringError(ValueError): pass + +def NetStringDecode(s): + try: + length, data = s.split(':', 1) + except ValueError: + raise NetStringError, "Separator not found" + try: + length = int(length) + except ValueError: + raise NetStringError, "Can not read length" + if len(data) != length+1: + raise NetStringError, "Data has unexpected length" + if data[-1] != ',': + raise NetStringError, "End-delimiter not found" + return data[:-1] + +def NetStringEncode(s): + return str(len(s)) + ":" + s + "," + + +class Connector (Thread): + def __init__(self, config, details): + Thread.__init__(self) + self.config = config + self.host = self.config.get('Global', 'Host') + self.port = int(self.config.get('Global', 'Port')) + self.klass = self.__class__.__name__ + self.details = details + + def connect(self): + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.connect((self.host, self.port)) + + + def query(self, request): + nets_request = NetStringEncode(self.klass + ' ' + request) + + print(self.getName() + " REQUEST: " + nets_request) + self.sock.sendall(nets_request) + + nets_response = self.sock.recv(8192) + print(self.getName() + " NETS_RESPONSE: " + nets_response) + response = NetStringDecode(nets_response) + print(self.getName() + " RESPONSE: " + response) + + return response + + def close(self): + self.sock.close() + + + def execute(self): + raise NotImplementedError + + def run(self): + return self.execute() + + +def threadedExecute(config, klass, numOfThreads, details): + threads = [] + + while (1): + if activeCount() < numOfThreads: + t = klass(config, details) + t.start() + else: + time.sleep(1) + + diff --git a/smmapdfw/test/test b/smmapdfw/test/test new file mode 100755 index 0000000..78d563c --- /dev/null +++ b/smmapdfw/test/test @@ -0,0 +1,13 @@ +#!/usr/bin/python + +import ConfigParser + +import Connector +import verifier +import test_worker1 + +config = ConfigParser.ConfigParser() +config.read("test.ini"); + + +Connector.threadedExecute(config, verifier.verifier, int(config.get('Global', 'Threads')), {}) diff --git a/smmapdfw/test/test.ini b/smmapdfw/test/test.ini new file mode 100644 index 0000000..ec8dcd6 --- /dev/null +++ b/smmapdfw/test/test.ini @@ -0,0 +1,10 @@ +[Global] +Host: ddev1.eng.emea.uu.net +Port: 110 +Threads: 20 + +[Verifier] +AddressFile: addresses.lst +QueriesPerSession: 2 + + diff --git a/smmapdfw/test/test_worker1.py b/smmapdfw/test/test_worker1.py new file mode 100644 index 0000000..a6fc312 --- /dev/null +++ b/smmapdfw/test/test_worker1.py @@ -0,0 +1,6 @@ +from Connector import Connector + +class test_worker1 (Connector): + def __init__(self, config): + Connector.__init__(self, config) + diff --git a/smmapdfw/test/verifier.py b/smmapdfw/test/verifier.py new file mode 100644 index 0000000..5f5bd7f --- /dev/null +++ b/smmapdfw/test/verifier.py @@ -0,0 +1,29 @@ +import random +from Connector import Connector + +class verifier (Connector): + addresses = None + + def __init__(self, config, details): + Connector.__init__(self, config, details) + self.readAddressFile() + random.seed() + + def readAddressFile(self): + if (verifier.addresses == None): + addressFile = self.config.get('Verifier', 'AddressFile') + f = open(addressFile) + l = f.readlines() + f.close() + verifier.addresses = map(lambda x: x[:-1].rstrip(), l) + + + def execute(self): + queriesPerSession = int(self.config.get('Verifier', 'QueriesPerSession')) + self.connect() + for i in range(queriesPerSession): + a = verifier.addresses[int(random.random()*len(verifier.addresses))] + self.query(a) + self.close() + +