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')
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
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)
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)
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
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
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)
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")
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)
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()))
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()))