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