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)
Exemplo n.º 2
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)
Exemplo n.º 5
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)
Exemplo n.º 7
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)
Exemplo n.º 8
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)
Exemplo n.º 10
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)
Exemplo n.º 11
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)
Exemplo n.º 12
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)
Exemplo n.º 13
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)
Exemplo n.º 14
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)