def set_up(): with SystemHandler.__lock: if SystemHandler.__locked: raise ErrorWithFeedback( "Cannot start the testing process more than once") SystemHandler.__locked = True SystemHandler.__locker_thread = current_thread() OutputHandler.replace_stdout() InputHandler.replace_input() ExitHandler.replace_exit()
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')
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()
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()
def test_response(self): ExitHandler.revert_exit() asyncio.get_event_loop().run_until_complete(self.test_response_async()) return CheckResult.correct()
def set_up(): OutputHandler.replace_stdout() InputHandler.replace_input() ExitHandler.replace_exit()
def tear_down(): OutputHandler.revert_stdout() InputHandler.revert_input() ExitHandler.revert_exit()