Revision 4db33137 test/ganeti.daemon_unittest.py
b/test/ganeti.daemon_unittest.py | ||
---|---|---|
24 | 24 |
import unittest |
25 | 25 |
import signal |
26 | 26 |
import os |
27 |
import socket |
|
27 | 28 |
|
28 | 29 |
from ganeti import daemon |
29 | 30 |
|
... | ... | |
94 | 95 |
self.assertEquals(self.onsignal_events, self.sendsig_events) |
95 | 96 |
|
96 | 97 |
|
98 |
class _MyAsyncUDPSocket(daemon.AsyncUDPSocket): |
|
99 |
|
|
100 |
def __init__(self): |
|
101 |
daemon.AsyncUDPSocket.__init__(self) |
|
102 |
self.received = [] |
|
103 |
self.error_count = 0 |
|
104 |
|
|
105 |
def handle_datagram(self, payload, ip, port): |
|
106 |
self.received.append((payload)) |
|
107 |
if payload == "terminate": |
|
108 |
os.kill(os.getpid(), signal.SIGTERM) |
|
109 |
elif payload == "error": |
|
110 |
raise errors.GenericError("error") |
|
111 |
|
|
112 |
def handle_error(self): |
|
113 |
self.error_count += 1 |
|
114 |
|
|
115 |
|
|
116 |
class TestAsyncUDPSocket(testutils.GanetiTestCase): |
|
117 |
"""Test daemon.AsyncUDPSocket""" |
|
118 |
|
|
119 |
def setUp(self): |
|
120 |
testutils.GanetiTestCase.setUp(self) |
|
121 |
self.mainloop = daemon.Mainloop() |
|
122 |
self.server = _MyAsyncUDPSocket() |
|
123 |
self.client = _MyAsyncUDPSocket() |
|
124 |
self.server.bind(("127.0.0.1", 0)) |
|
125 |
self.port = self.server.getsockname()[1] |
|
126 |
|
|
127 |
def tearDown(self): |
|
128 |
self.server.close() |
|
129 |
self.client.close() |
|
130 |
testutils.GanetiTestCase.tearDown(self) |
|
131 |
|
|
132 |
def testNoDoubleBind(self): |
|
133 |
self.assertRaises(socket.error, self.client.bind, ("127.0.0.1", self.port)) |
|
134 |
|
|
135 |
def _ThreadedClient(self, payload): |
|
136 |
self.client.enqueue_send("127.0.0.1", self.port, payload) |
|
137 |
print "sending %s" % payload |
|
138 |
while self.client.writable(): |
|
139 |
self.client.handle_write() |
|
140 |
|
|
141 |
def testAsyncClientServer(self): |
|
142 |
self.client.enqueue_send("127.0.0.1", self.port, "p1") |
|
143 |
self.client.enqueue_send("127.0.0.1", self.port, "p2") |
|
144 |
self.client.enqueue_send("127.0.0.1", self.port, "terminate") |
|
145 |
self.mainloop.Run() |
|
146 |
self.assertEquals(self.server.received, ["p1", "p2", "terminate"]) |
|
147 |
|
|
148 |
def testSyncClientServer(self): |
|
149 |
self.client.enqueue_send("127.0.0.1", self.port, "p1") |
|
150 |
self.client.enqueue_send("127.0.0.1", self.port, "p2") |
|
151 |
while self.client.writable(): |
|
152 |
self.client.handle_write() |
|
153 |
self.server.process_next_packet() |
|
154 |
self.assertEquals(self.server.received, ["p1"]) |
|
155 |
self.server.process_next_packet() |
|
156 |
self.assertEquals(self.server.received, ["p1", "p2"]) |
|
157 |
self.client.enqueue_send("127.0.0.1", self.port, "p3") |
|
158 |
while self.client.writable(): |
|
159 |
self.client.handle_write() |
|
160 |
self.server.process_next_packet() |
|
161 |
self.assertEquals(self.server.received, ["p1", "p2", "p3"]) |
|
162 |
|
|
163 |
def testErrorHandling(self): |
|
164 |
self.client.enqueue_send("127.0.0.1", self.port, "p1") |
|
165 |
self.client.enqueue_send("127.0.0.1", self.port, "p2") |
|
166 |
self.client.enqueue_send("127.0.0.1", self.port, "error") |
|
167 |
self.client.enqueue_send("127.0.0.1", self.port, "p3") |
|
168 |
self.client.enqueue_send("127.0.0.1", self.port, "error") |
|
169 |
self.client.enqueue_send("127.0.0.1", self.port, "terminate") |
|
170 |
self.mainloop.Run() |
|
171 |
self.assertEquals(self.server.received, |
|
172 |
["p1", "p2", "error", "p3", "error", "terminate"]) |
|
173 |
self.assertEquals(self.server.error_count, 2) |
|
174 |
|
|
175 |
|
|
97 | 176 |
if __name__ == "__main__": |
98 | 177 |
testutils.GanetiTestProgram() |
Also available in: Unified diff