Details | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 742 | olof | 1 | import logging as log |
| 2 | log.basicConfig(level=log.DEBUG, |
||
| 3 | format='%(asctime)s %(levelname)s %(message)s', |
||
| 4 | filename=__name__ + '.log', |
||
| 5 | filemode='w') |
||
| 6 | import unittest |
||
| 7 | |||
| 8 | from TCPServer import TCPServer |
||
| 9 | from TCPClient import TCPClient |
||
| 10 | import time |
||
| 11 | |||
| 743 | olof | 12 | SERVER_BASE_PORT = 27000 |
| 13 | NUMBER_OF_SERVERS_FOR_MULTISERVER_TEST = 10 |
||
| 14 | NUMBER_OF_CLIENT_PER_SERVER_FOR_MULTISERVER_TEST = 10 |
||
| 15 | |||
| 742 | olof | 16 | class CanPktTests(unittest.TestCase): |
| 17 | |||
| 18 | def setUp(self): |
||
| 19 | """Call before every test case.""" |
||
| 20 | pass |
||
| 21 | |||
| 22 | def tearDown(self): |
||
| 23 | """Call after every test case.""" |
||
| 743 | olof | 24 | pass |
| 25 | # ----------------------------------------- |
||
| 26 | |||
| 27 | class ServerRunner(): |
||
| 742 | olof | 28 | |
| 743 | olof | 29 | serverNotifier = None |
| 30 | serverRunning = False |
||
| 31 | server = None |
||
| 32 | serverPort = None |
||
| 742 | olof | 33 | |
| 743 | olof | 34 | class ServerNotifier(): |
| 35 | |||
| 36 | parent = None |
||
| 37 | UNDEFINED = 0 |
||
| 38 | TERMINATE = 1 |
||
| 39 | |||
| 40 | def __init__(self, parent): |
||
| 41 | self.parent = parent |
||
| 742 | olof | 42 | |
| 743 | olof | 43 | def notify(self, msg): |
| 44 | if msg == self.TERMINATE: |
||
| 45 | log.debug('Server terminate notify') |
||
| 46 | self.parent.serverRunning = False |
||
| 742 | olof | 47 | |
| 743 | olof | 48 | def __init__(self, port): |
| 49 | log.debug('Creating ServerRunner, port ' + str(port)) |
||
| 50 | self.serverPort = port |
||
| 51 | pass |
||
| 52 | |||
| 53 | def startServer(self): |
||
| 54 | self.serverNotifier = self.ServerNotifier(self) |
||
| 55 | self.server = TCPServer(self.serverPort, self.serverNotifier) |
||
| 56 | assert self.server.start() == True |
||
| 57 | self.serverRunning = True |
||
| 58 | return True |
||
| 59 | |||
| 60 | def stopServer(self): |
||
| 61 | assert self.serverRunning == True |
||
| 62 | self.server.stop() |
||
| 63 | waitTime = 0 |
||
| 64 | while self.serverRunning: |
||
| 65 | log.debug('Waiting 0.2s for server shutdown..') |
||
| 66 | time.sleep(0.2) |
||
| 67 | waitTime += 0.2 |
||
| 68 | if waitTime > 4: |
||
| 69 | log.debug('Giving up!') |
||
| 70 | assert False |
||
| 71 | break |
||
| 72 | self.server = None |
||
| 73 | return True |
||
| 74 | |||
| 75 | # ----------------------------------------- |
||
| 76 | |||
| 77 | class ClientRunner(): |
||
| 78 | |||
| 79 | client = None |
||
| 80 | serverPort = None |
||
| 81 | |||
| 82 | def __init__(self, port): |
||
| 83 | log.debug('Creating ClientRunner, port ' + str(port)) |
||
| 84 | self.serverPort = port |
||
| 85 | pass |
||
| 86 | |||
| 87 | def startClient(self): |
||
| 88 | self.client = TCPClient('localhost', self.serverPort) |
||
| 89 | return self.client.connect(2) |
||
| 742 | olof | 90 | |
| 743 | olof | 91 | def stopClient(self): |
| 92 | self.client.disconnect() |
||
| 93 | time.sleep(0.1) |
||
| 94 | self.client = None |
||
| 95 | |||
| 96 | # ----------------------------------------- |
||
| 97 | |||
| 98 | def testA_TcpServer(self): |
||
| 99 | log.debug('testATcpServer') |
||
| 100 | serverRunner = self.ServerRunner(SERVER_BASE_PORT) |
||
| 101 | assert serverRunner.startServer() == True |
||
| 102 | assert serverRunner.stopServer() == True |
||
| 103 | serverRunner = None |
||
| 742 | olof | 104 | |
| 743 | olof | 105 | def testB_TcpClientNegative(self): |
| 106 | log.debug('testBTcpClientNegative') |
||
| 107 | clientRunner = self.ClientRunner(SERVER_BASE_PORT) |
||
| 108 | assert clientRunner.startClient() == False |
||
| 109 | clientRunner.stopClient() |
||
| 742 | olof | 110 | |
| 743 | olof | 111 | def testC_TcpServerWithSingleClient(self): |
| 112 | log.debug('testCTcpServerWithSingleClient') |
||
| 113 | serverRunner = self.ServerRunner(SERVER_BASE_PORT) |
||
| 114 | clientRunner = self.ClientRunner(SERVER_BASE_PORT) |
||
| 115 | assert serverRunner.startServer() == True |
||
| 116 | assert clientRunner.startClient() == True |
||
| 117 | clientRunner.stopClient() |
||
| 118 | assert serverRunner.stopServer() == True |
||
| 742 | olof | 119 | |
| 743 | olof | 120 | def testD_TcpConnection(self): |
| 121 | log.debug('testDTcpConnection') |
||
| 122 | serverRunner = self.ServerRunner(SERVER_BASE_PORT) |
||
| 123 | clientRunner = self.ClientRunner(SERVER_BASE_PORT) |
||
| 124 | assert serverRunner.startServer() == True |
||
| 125 | assert clientRunner.startClient() == True |
||
| 742 | olof | 126 | log.debug('Server sends hej') |
| 743 | olof | 127 | assert serverRunner.server.writeAll('hej') == True |
| 128 | time.sleep(1.0) |
||
| 129 | resp = str(clientRunner.client.read()) |
||
| 742 | olof | 130 | log.debug('Client gets:' + resp) |
| 131 | assert (resp == '\'hej\'') |
||
| 743 | olof | 132 | clientRunner.stopClient() |
| 133 | assert serverRunner.stopServer() == True |
||
| 134 | |||
| 135 | def testE_MultipleServersAndClients(self): |
||
| 136 | log.debug('testEMultipleServers') |
||
| 137 | serverList = [] |
||
| 138 | clientList = [] |
||
| 139 | for i in range(0, NUMBER_OF_SERVERS_FOR_MULTISERVER_TEST): |
||
| 140 | currentPort = SERVER_BASE_PORT + i |
||
| 141 | newServer = self.ServerRunner(currentPort) |
||
| 142 | serverList.append(newServer) |
||
| 143 | newServer.startServer() |
||
| 144 | for j in range(0, NUMBER_OF_CLIENT_PER_SERVER_FOR_MULTISERVER_TEST): |
||
| 145 | newClient = self.ClientRunner(currentPort) |
||
| 146 | clientList.append(newClient) |
||
| 147 | newClient.startClient() |
||
| 148 | log.debug('Client to ' + str(newClient.serverPort) + ' writing') |
||
| 149 | newClient.client.write('hej') |
||
| 150 | |||
| 151 | log.debug('Waiting 2 s for threads to work..') |
||
| 152 | time.sleep(2.0) |
||
| 153 | for s in serverList: |
||
| 154 | clientData = s.server.readAll() |
||
| 155 | log.debug(clientData) |
||
| 156 | log.debug(len(clientData)) |
||
| 157 | assert len(clientData) == NUMBER_OF_CLIENT_PER_SERVER_FOR_MULTISERVER_TEST |
||
| 158 | assert s.stopServer() == True |
||
| 159 | |||
| 160 |