Subversion Repositories HomeAutomation

Rev

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