Ejemplo n.º 1
0
    def terminate(self):
        OutputHandler.print('Terminate called')

        with self.lock:
            OutputHandler.print('Terminate - LOCK ACQUIRED')

            if not self.terminated:
                OutputHandler.print('Terminate - BEFORE WAIT STDERR')

                self.wait_output()

                OutputHandler.print('Terminate - AFTER WAIT STDERR')

                self._alive = False

                OutputHandler.print('Terminate - SELF ALIVE == FALSE')

                is_exit_replaced = ExitHandler.is_replaced()
                if is_exit_replaced:
                    ExitHandler.revert_exit()
                    OutputHandler.print('Terminate - EXIT REVERTED')

                try:
                    parent = Process(self.process.pid)
                    OutputHandler.print(f'Terminate - parent == {parent}')
                    for child in parent.children(recursive=True):
                        OutputHandler.print(f'Terminate - child kill {child}')
                        child.kill()
                    OutputHandler.print(f'Terminate - parent kill {parent}')
                    parent.kill()
                except NoSuchProcess:
                    OutputHandler.print(f'Terminate - NO SUCH PROCESS')
                    pass
                finally:
                    OutputHandler.print(f'Terminate - finally before kill')
                    self.process.kill()
                    OutputHandler.print(f'Terminate - finally before wait')
                    self.process.wait()

                    self.process.stdout.close()
                    self.process.stderr.close()
                    self.process.stdin.close()

                    if is_exit_replaced:
                        ExitHandler.replace_exit()
                        OutputHandler.print(f'Terminate - EXIT REPLACED AGAIN')

                self.terminated = True
                OutputHandler.print(f'Terminate - TERMINATED')
        OutputHandler.print(f'Terminate - finished')
Ejemplo n.º 2
0
 def terminate(self):
     self.alive = False
     is_exit_replaced = ExitHandler.is_replaced()
     if is_exit_replaced:
         ExitHandler.revert_exit()
     try:
         parent = Process(self.process.pid)
         for child in parent.children(recursive=True):
             child.kill()
         parent.kill()
     except NoSuchProcess:
         pass
     finally:
         if is_exit_replaced:
             ExitHandler.replace_exit()
Ejemplo n.º 3
0
    def tear_down():
        if current_thread() != SystemHandler.__locker_thread:
            raise ErrorWithFeedback(
                "Cannot tear down the testing process from the other thread")

        with SystemHandler.__lock:
            if not SystemHandler.__locked:
                raise ErrorWithFeedback(
                    "Cannot tear down the testing process more than once")
            SystemHandler.__locked = False
            SystemHandler.__locker_thread = None

        OutputHandler.revert_stdout()
        InputHandler.revert_input()
        ExitHandler.revert_exit()
Ejemplo n.º 4
0
 def test_response(self):
     ExitHandler.revert_exit()
     asyncio.get_event_loop().run_until_complete(self.test_response_async())
     return CheckResult.correct()
Ejemplo n.º 5
0
 def tear_down():
     OutputHandler.revert_stdout()
     InputHandler.revert_input()
     ExitHandler.revert_exit()