Revision 495ba852 test/ganeti.daemon_unittest.py
b/test/ganeti.daemon_unittest.py | ||
---|---|---|
484 | 484 |
TestAsyncStreamServerTCP.tearDown(self) |
485 | 485 |
|
486 | 486 |
|
487 |
class TestAsyncAwaker(testutils.GanetiTestCase): |
|
488 |
"""Test daemon.AsyncAwaker""" |
|
489 |
|
|
490 |
family = socket.AF_INET |
|
491 |
|
|
492 |
def setUp(self): |
|
493 |
testutils.GanetiTestCase.setUp(self) |
|
494 |
self.mainloop = daemon.Mainloop() |
|
495 |
self.awaker = daemon.AsyncAwaker(signal_fn=self.handle_signal) |
|
496 |
self.signal_count = 0 |
|
497 |
self.signal_terminate_count = 1 |
|
498 |
|
|
499 |
def tearDown(self): |
|
500 |
self.awaker.close() |
|
501 |
|
|
502 |
def handle_signal(self): |
|
503 |
self.signal_count += 1 |
|
504 |
self.signal_terminate_count -= 1 |
|
505 |
if self.signal_terminate_count <= 0: |
|
506 |
os.kill(os.getpid(), signal.SIGTERM) |
|
507 |
|
|
508 |
def testBasicSignaling(self): |
|
509 |
self.awaker.signal() |
|
510 |
self.mainloop.Run() |
|
511 |
self.assertEquals(self.signal_count, 1) |
|
512 |
|
|
513 |
def testDoubleSignaling(self): |
|
514 |
self.awaker.signal() |
|
515 |
self.awaker.signal() |
|
516 |
self.mainloop.Run() |
|
517 |
# The second signal is never delivered |
|
518 |
self.assertEquals(self.signal_count, 1) |
|
519 |
|
|
520 |
def testReallyDoubleSignaling(self): |
|
521 |
self.assert_(self.awaker.readable()) |
|
522 |
self.awaker.signal() |
|
523 |
# Let's suppose two threads overlap, and both find need_signal True |
|
524 |
self.awaker.need_signal = True |
|
525 |
self.awaker.signal() |
|
526 |
self.mainloop.Run() |
|
527 |
# We still get only one signaling |
|
528 |
self.assertEquals(self.signal_count, 1) |
|
529 |
|
|
530 |
def testNoSignalFnArgument(self): |
|
531 |
myawaker = daemon.AsyncAwaker() |
|
532 |
self.assertRaises(socket.error, myawaker.handle_read) |
|
533 |
myawaker.signal() |
|
534 |
myawaker.handle_read() |
|
535 |
self.assertRaises(socket.error, myawaker.handle_read) |
|
536 |
myawaker.signal() |
|
537 |
myawaker.signal() |
|
538 |
myawaker.handle_read() |
|
539 |
self.assertRaises(socket.error, myawaker.handle_read) |
|
540 |
myawaker.close() |
|
541 |
|
|
542 |
def testWrongSignalFnArgument(self): |
|
543 |
self.assertRaises(AssertionError, daemon.AsyncAwaker, 1) |
|
544 |
self.assertRaises(AssertionError, daemon.AsyncAwaker, "string") |
|
545 |
self.assertRaises(AssertionError, daemon.AsyncAwaker, signal_fn=1) |
|
546 |
self.assertRaises(AssertionError, daemon.AsyncAwaker, signal_fn="string") |
|
547 |
|
|
548 |
|
|
487 | 549 |
if __name__ == "__main__": |
488 | 550 |
testutils.GanetiTestProgram() |
Also available in: Unified diff