示例#1
0
def test_console_start_end():
    extension = ConsoleStartEndEventHandler()

    with patch('sys.stdout') as stdout:
        with patch('sys.stderr') as stderr:
            event = JobStarted('idA')
            extension((event, None))
            assert stdout.write.call_count == 2
            stdout.write.reset_mock()

            # success
            event = JobEnded('idA', 0)
            extension((event, None))
            assert stdout.write.call_count == 2
            stdout.write.reset_mock()

            # aborted
            event = JobEnded('idA', SIGINT_RESULT)
            extension((event, None))
            assert stdout.write.call_count == 2
            stdout.write.reset_mock()

            # failure
            event = JobEnded('idA', 1)
            extension((event, None))
            assert stderr.write.call_count == 2
            stderr.write.reset_mock()

            extension(('unknown', None))
            assert stdout.write.call_count == 0
            assert stderr.write.call_count == 0
示例#2
0
def test_console_start_end():
    extension = ConsoleStartEndEventHandler()

    with patch('sys.stdout') as stdout:
        with patch('sys.stderr') as stderr:
            event = JobStarted('idA')
            extension((event, None))
            assert stdout.write.call_count == 2
            assert stderr.write.call_count == 0
            stdout.write.reset_mock()

            # success
            event = JobEnded('idA', 0)
            extension((event, None))
            assert stdout.write.call_count == 2
            assert stderr.write.call_count == 0
            stdout.write.reset_mock()

            # aborted
            event = JobEnded('idA', SIGINT_RESULT)
            extension((event, None))
            assert stdout.write.call_count == 2
            assert stderr.write.call_count == 0
            stdout.write.reset_mock()

            # failure
            event = JobEnded('idA', 1)
            extension((event, None))
            assert stderr.write.call_count == 2
            assert stdout.write.call_count == 0
            stderr.write.reset_mock()

            # test failures
            event = TestFailure('idA')
            extension((event, None))
            event = JobEnded('idA', 0)
            extension((event, None))
            assert stdout.write.call_count == 2
            assert len(stdout.write.call_args_list[0][0]) == 1
            assert '[ with test failures ]' in \
                stdout.write.call_args_list[0][0][0]
            assert stderr.write.call_count == 0
            stdout.write.reset_mock()

            extension(('unknown', None))
            assert stdout.write.call_count == 0
            assert stderr.write.call_count == 0
示例#3
0
    async def __call__(self, *args, **kwargs):
        """
        Perform the unit of work.

        The overview of the process:
        * Put a :class:`JobStarted` event into the queue
        * Pass the task context to the task
        * Invoke the task
        * In case the task is canceled return a :attribute:`SIGINT_RESULT`
          code
        * In case of an exception within the task put a :class:`StderrLine`
          event into the queue and re-raise the exception
        * Put a :class:`JobEnded` event into the queue

        :returns: The return code of the invoked task
        :raises Exception: Any exception the invoked task raises
        """
        self.put_event_into_queue(JobStarted(self.task_context.pkg.name))

        # replace function to use this job as the event context
        self.task_context.put_event_into_queue = self.put_event_into_queue
        self.task.set_context(context=self.task_context)

        rc = 0
        try:
            rc = await self.task(*args, **kwargs)
        except CancelledError:
            rc = SIGINT_RESULT
        except Exception:
            rc = 1
            self.put_event_into_queue(
                StderrLine(traceback.format_exc().encode()))
            raise
        finally:
            if self.returncode is None:
                self.returncode = rc or 0
            self.put_event_into_queue(
                JobEnded(self.task_context.pkg.name, self.returncode))
        return self.returncode