예제 #1
0
    def run(self, port):
        self.safe_init(port)

        exception_msg = ""
        _log.debug("%s starting" % self._name)

        try:
            self._worker_connection.run_message_loop()
            if not self.is_done():
                raise AssertionError(
                    "%s: ran out of messages in worker queue." % self._name)
        except KeyboardInterrupt:
            exception_msg = ", interrupted"
        except:
            exception_msg = ", exception raised"
        finally:
            _log.debug("%s done%s" % (self._name, exception_msg))
            if exception_msg:
                exception_type, exception_value, exception_traceback = sys.exc_info(
                )
                stack_utils.log_traceback(_log.error, exception_traceback)
                # FIXME: Figure out how to send a message with a traceback.
                self._worker_connection.post_message(
                    'exception', (exception_type, exception_value, None))
            self._worker_connection.post_message('done')
예제 #2
0
def run(port, options, args, regular_output=sys.stderr, buildbot_output=sys.stdout):
    try:
        warnings = _set_up_derived_options(port, options)

        printer = printing.Printer(port, options, regular_output, buildbot_output, logger=logging.getLogger())

        for warning in warnings:
            _log.warning(warning)

        if options.lint_test_files:
            return lint(port, options)

        # We wrap any parts of the run that are slow or likely to raise exceptions
        # in a try/finally to ensure that we clean up the logging configuration.
        unexpected_result_count = -1

        manager = Manager(port, options, printer)
        printer.print_config()

        unexpected_result_count = manager.run(args)
        _log.debug("Testing completed, Exit status: %d" % unexpected_result_count)
    except Exception:
        exception_type, exception_value, exception_traceback = sys.exc_info()
        if exception_type not in (KeyboardInterrupt, TestRunInterruptedException, WorkerException):
            print >> sys.stderr, '\n%s raised: %s' % (exception_type.__name__, exception_value)
            stack_utils.log_traceback(_log.error, exception_traceback)
        raise
    finally:
        printer.cleanup()

    return unexpected_result_count
예제 #3
0
 def raise_exception(self, exc_info):
     # Since tracebacks aren't picklable, send the extracted stack instead,
     # but at least log the full traceback.
     exception_type, exception_value, exception_traceback = sys.exc_info()
     stack_utils.log_traceback(_log.error, exception_traceback)
     stack = traceback.extract_tb(exception_traceback)
     self._broker.post_message(self._client, self._post_topic, 'exception', exception_type, exception_value, stack)
예제 #4
0
 def raise_exception(self, exc_info):
     # Since tracebacks aren't picklable, send the extracted stack instead.
     exception_type, exception_value, exception_traceback = sys.exc_info()
     stack_utils.log_traceback(_log.debug, exception_traceback)
     stack = traceback.extract_tb(exception_traceback)
     self._broker.post_message(self._client, self._post_topic, 'exception',
                               exception_type, exception_value, stack)
예제 #5
0
def run(port, options, args, regular_output=sys.stderr, buildbot_output=sys.stdout):
    try:
        warnings = _set_up_derived_options(port, options)

        printer = printing.Printer(port, options, regular_output, buildbot_output, logger=logging.getLogger())

        for warning in warnings:
            _log.warning(warning)

        if options.lint_test_files:
            return lint(port, options)

        # We wrap any parts of the run that are slow or likely to raise exceptions
        # in a try/finally to ensure that we clean up the logging configuration.
        unexpected_result_count = -1

        manager = Manager(port, options, printer)
        printer.print_config(port.results_directory())

        unexpected_result_count = manager.run(args)
        _log.debug("Testing completed, Exit status: %d" % unexpected_result_count)
    except Exception:
        exception_type, exception_value, exception_traceback = sys.exc_info()
        if exception_type not in (KeyboardInterrupt, TestRunInterruptedException, WorkerException):
            print >> sys.stderr, '\n%s raised: %s' % (exception_type.__name__, exception_value)
            stack_utils.log_traceback(_log.error, exception_traceback)
        raise
    finally:
        printer.cleanup()

    return unexpected_result_count
예제 #6
0
 def raise_exception(self, exc_info):
     # Since the worker is in the same process as the manager, we can
     # raise the exception directly, rather than having to send it through
     # the queue. This allows us to preserve the traceback, but we log
     # it anyway for consistency with the multiprocess case.
     exception_type, exception_value, exception_traceback = sys.exc_info()
     stack_utils.log_traceback(_log.error, exception_traceback)
     raise exception_type, exception_value, exception_traceback
예제 #7
0
    def test_log_traceback(self):
        msgs = []

        def logger(msg):
            msgs.append(msg)

        try:
            raise ValueError
        except:
            stack_utils.log_traceback(logger, sys.exc_info()[2])
        self.assertTrue(msgs)
예제 #8
0
    def _raise(self, exc_info):
        exception_type, exception_value, exception_traceback = exc_info
        if self._running_inline:
            raise exception_type, exception_value, exception_traceback

        if exception_type == KeyboardInterrupt:
            _log.debug("%s: interrupted, exiting" % self.name)
            stack_utils.log_traceback(_log.debug, exception_traceback)
        else:
            _log.error("%s: %s('%s') raised:" % (self.name, exception_value.__class__.__name__, str(exception_value)))
            stack_utils.log_traceback(_log.error, exception_traceback)
        # Since tracebacks aren't picklable, send the extracted stack instead.
        stack = traceback.extract_tb(exception_traceback)
        self._post(name='worker_exception', args=(exception_type, exception_value, stack), from_user=False)
예제 #9
0
    def _raise(self, exc_info):
        exception_type, exception_value, exception_traceback = exc_info
        if self._running_inline:
            raise exception_type, exception_value, exception_traceback

        if exception_type == KeyboardInterrupt:
            _log.debug("%s: interrupted, exiting" % self.name)
            stack_utils.log_traceback(_log.debug, exception_traceback)
        else:
            _log.error("%s: %s('%s') raised:" % (self.name, exception_value.__class__.__name__, str(exception_value)))
            stack_utils.log_traceback(_log.error, exception_traceback)
        # Since tracebacks aren't picklable, send the extracted stack instead.
        stack = traceback.extract_tb(exception_traceback)
        self._post(name='worker_exception', args=(exception_type, exception_value, stack), from_user=False)
    def run(self, port):
        self.safe_init(port)

        exception_msg = ""
        _log.debug("%s starting" % self._name)

        try:
            self._worker_connection.run_message_loop()
            if not self.is_done():
                raise AssertionError("%s: ran out of messages in worker queue." % self._name)
        except KeyboardInterrupt:
            exception_msg = ", interrupted"
        except:
            exception_msg = ", exception raised"
        finally:
            _log.debug("%s done%s" % (self._name, exception_msg))
            if exception_msg:
                exception_type, exception_value, exception_traceback = sys.exc_info()
                stack_utils.log_traceback(_log.error, exception_traceback)
                # FIXME: Figure out how to send a message with a traceback.
                self._worker_connection.post_message("exception", (exception_type, exception_value, None))
            self._worker_connection.post_message("done")
예제 #11
0
 def raise_exception(self, exc_info):
     # Since tracebacks aren't picklable, send the extracted stack instead.
     exception_type, exception_value, exception_traceback = sys.exc_info()
     stack_utils.log_traceback(_log.debug, exception_traceback)
     stack = traceback.extract_tb(exception_traceback)
     self._broker.post_message(self._client, self._post_topic, "exception", exception_type, exception_value, stack)
예제 #12
0
            raise

        printer.print_update("Checking build ...")
        if not port.check_build(manager.needs_servers()):
            _log.error("Build check failed")
            return -1

        printer.print_update("Parsing expectations ...")
        manager.parse_expectations()

        unexpected_result_count = manager.run()
        _log.debug("Testing completed, Exit status: %d" % unexpected_result_count)
    except Exception:
        exception_type, exception_value, exception_traceback = sys.exc_info()
        if exception_type not in (KeyboardInterrupt, TestRunInterruptedException, WorkerException):
            stack_utils.log_traceback(_log.error, exception_traceback)
        raise
    finally:
        printer.cleanup()

    return unexpected_result_count


def _set_up_derived_options(port, options):
    """Sets the options values that depend on other options values."""
    # We return a list of warnings to print after the printer is initialized.
    warnings = []

    if not options.child_processes:
        options.child_processes = os.environ.get("WEBKIT_TEST_CHILD_PROCESSES",
                                                 str(port.default_child_processes()))
예제 #13
0
            return -1

        printer.write_update("Parsing expectations ...")
        manager.parse_expectations()

        unexpected_result_count = manager.run()
        _log.debug("Testing completed, Exit status: %d" %
                   unexpected_result_count)
    except Exception:
        exception_type, exception_value, exception_traceback = sys.exc_info()
        if exception_type not in (KeyboardInterrupt,
                                  TestRunInterruptedException,
                                  WorkerException):
            print >> sys.stderr, '\n%s raised: %s' % (exception_type.__name__,
                                                      exception_value)
            stack_utils.log_traceback(_log.error, exception_traceback)
        raise
    finally:
        printer.cleanup()

    return unexpected_result_count


def _set_up_derived_options(port, options):
    """Sets the options values that depend on other options values."""
    # We return a list of warnings to print after the printer is initialized.
    warnings = []

    if not options.child_processes:
        options.child_processes = os.environ.get(
            "WEBKIT_TEST_CHILD_PROCESSES", str(port.default_child_processes()))