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