def test_E_cant_raise_through_nested_triggered_exit_context(self): class RaiseThroughExitError(Exception): pass # CONCERN: cannot raise through nested triggered exit contexts with self.assertRaises(SystemExit): with phlsys_signal.no_exit_context(): with phlsys_signal.no_exit_context(): phlsys_signal._SIGNAL_FLAGS.got_sigterm = True raise RaiseThroughExitError() # CONCERN: exit_level=0 after raising through nested triggered contexts self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_E_cant_raise_through_nested_triggered_exit_context(self): class RaiseThroughExitError(Exception): pass # CONCERN: cannot raise through nested triggered exit contexts with self.assertRaises(SystemExit): with phlsys_signal.no_exit_context(): with phlsys_signal.no_exit_context(): phlsys_signal._SIGNAL_FLAGS.got_sigterm = True raise RaiseThroughExitError() # CONCERN: exit_level=0 after raising through nested triggered contexts self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_B_can_recurse_exit_context(self): # CONCERN: exit_level is 0 before recursive exit contexts are active self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 1 while first exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 1) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 2 while second exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 2) # CONCERN: exit_level is 0 after recursive exit contexts are active self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_G_after_sigterm_inner_exit_contexts_do_not_exit(self): did_finish = False # CONCERN: When nesting exit contexts, exit after SIGTERM is received with self.assertRaises(SystemExit): with phlsys_signal.no_exit_context(): with phlsys_signal.no_exit_context(): with phlsys_signal.no_exit_context(): phlsys_signal._SIGNAL_FLAGS.got_sigterm = True did_finish = True # CONCERN: When nesting exit contexts, finish after SIGTERM is received self.assertTrue(did_finish) # CONCERN: exit_level is 0 after triggered nested exit contexts finish self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_G_after_sigterm_inner_exit_contexts_do_not_exit(self): did_finish = False # CONCERN: When nesting exit contexts, exit after SIGTERM is received with self.assertRaises(SystemExit): with phlsys_signal.no_exit_context(): with phlsys_signal.no_exit_context(): with phlsys_signal.no_exit_context(): phlsys_signal._SIGNAL_FLAGS.got_sigterm = True did_finish = True # CONCERN: When nesting exit contexts, finish after SIGTERM is received self.assertTrue(did_finish) # CONCERN: exit_level is 0 after triggered nested exit contexts finish self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_F_after_sigterm_exit_contexts_do_exit(self): # CONCERN: After SIGTERM is received, exit contexts raise SystemExit with self.assertRaises(SystemExit): with phlsys_signal.no_exit_context(): phlsys_signal._SIGNAL_FLAGS.got_sigterm = True # CONCERN: exit_level is 0 after a triggered exit context self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_B_can_recurse_exit_context(self): # CONCERN: exit_level is 0 before recursive exit contexts are active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 1 while first exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 1) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 2 while second exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 2) # CONCERN: exit_level is 0 after recursive exit contexts are active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_F_after_sigterm_exit_contexts_do_exit(self): # CONCERN: After SIGTERM is received, exit contexts raise SystemExit with self.assertRaises(SystemExit): with phlsys_signal.no_exit_context(): phlsys_signal._SIGNAL_FLAGS.got_sigterm = True # CONCERN: exit_level is 0 after a triggered exit context self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_C_can_raise_through_exit_context(self): class RaiseThroughExitError(Exception): pass # CONCERN: exceptions can be raised through an exit context with self.assertRaises(RaiseThroughExitError): with phlsys_signal.no_exit_context(): raise RaiseThroughExitError() # CONCERN: exit_level is 0 after raising through an exit context self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_C_can_raise_through_exit_context(self): class RaiseThroughExitError(Exception): pass # CONCERN: exceptions can be raised through an exit context with self.assertRaises(RaiseThroughExitError): with phlsys_signal.no_exit_context(): raise RaiseThroughExitError() # CONCERN: exit_level is 0 after raising through an exit context self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_A_Breathing(self): # CONCERN: can run phlsys_signal.set_exit_on_sigterm phlsys_signal.set_exit_on_sigterm() # CONCERN: exit_level is 0 before exit contexts are active self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 1 while single exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 1) # CONCERN: exit_level is 0 after single exit contexts finishes self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_A_Breathing(self): # CONCERN: can run phlsys_signal.set_exit_on_sigterm phlsys_signal.set_exit_on_sigterm() # CONCERN: exit_level is 0 before exit contexts are active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 1 while single exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 1) # CONCERN: exit_level is 0 after single exit contexts finishes self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0)
def test_A_Breathing(self): # We must restore the original signal handler when we're done testing # or nose will hang indefinitely when we run the tests. handler = signal.getsignal(signal.SIGTERM) # CONCERN: can run phlsys_signal.set_exit_on_sigterm phlsys_signal.set_exit_on_sigterm() # CONCERN: exit_level is 0 before exit contexts are active self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 1 while single exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 1) # CONCERN: exit_level is 0 after single exit contexts finishes self.assertEqual(phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) signal.signal(signal.SIGTERM, handler)
def test_A_Breathing(self): # We must restore the original signal handler when we're done testing # or nose will hang indefinitely when we run the tests. handler = signal.getsignal(signal.SIGTERM) # CONCERN: can run phlsys_signal.set_exit_on_sigterm phlsys_signal.set_exit_on_sigterm() # CONCERN: exit_level is 0 before exit contexts are active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) with phlsys_signal.no_exit_context(): # CONCERN: exit_level is 1 while single exit context is active self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 1) # CONCERN: exit_level is 0 after single exit contexts finishes self.assertEqual( phlsys_signal._SIGNAL_FLAGS.delay_sigterm_exit_level, 0) signal.signal(signal.SIGTERM, handler)