Subversion Repositories HomeAutomation

Rev

Rev 743 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

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