Diff
Modified: trunk/Tools/ChangeLog (254928 => 254929)
--- trunk/Tools/ChangeLog 2020-01-22 18:19:22 UTC (rev 254928)
+++ trunk/Tools/ChangeLog 2020-01-22 18:55:45 UTC (rev 254929)
@@ -1,3 +1,32 @@
+2020-01-22 Jonathan Bedard <[email protected]>
+
+ webkitpy: Make logging during ImageDiff crashes accurate
+ https://bugs.webkit.org/show_bug.cgi?id=206542
+
+ Reviewed by Aakash Jain.
+
+ When ImageDiff crashes, the generated logs are not accurate, they
+ reference a crash in test output when the test will actually fail
+ with an Image failure. The owner of a ServerProcess should be able
+ to customize this error message.
+
+ * Scripts/webkitpy/port/image_diff.py:
+ (ImageDiffer._start): Pass ImageDiff specific crash message.
+ * Scripts/webkitpy/port/port_testcase.py:
+ (PortTestCase.test_diff_image.make_proc): Match ImageDiff calcite.
+ (PortTestCase.test_diff_image_passed): Ditto.
+ (PortTestCase.test_diff_image_failed): Ditto.
+ (PortTestCase.test_diff_image_crashed.make_proc): Ditto.
+ * Scripts/webkitpy/port/server_process.py:
+ (ServerProcess.__init__): Support a custom message when the process crashes.
+ (ServerProcess.write): Ditto.
+ (ServerProcess._wait_for_data_and_update_buffers_using_select): Ditto.
+ (ServerProcess.has_crashed): Ditto.
+ * Scripts/webkitpy/port/server_process_mock.py:
+ (MockServerProcess.__init__): Match the ServerProcess constructor.
+ * Scripts/webkitpy/port/simulator_process.py:
+ (SimulatorProcess.__init__): Support a custom message when the process crashes.
+
2020-01-21 Matt Lewis <[email protected]>
Test history links on the dashboard should go to the new results database
Modified: trunk/Tools/Scripts/webkitpy/port/image_diff.py (254928 => 254929)
--- trunk/Tools/Scripts/webkitpy/port/image_diff.py 2020-01-22 18:19:22 UTC (rev 254928)
+++ trunk/Tools/Scripts/webkitpy/port/image_diff.py 2020-01-22 18:55:45 UTC (rev 254929)
@@ -73,7 +73,7 @@
if self._port._should_use_jhbuild():
command = self._port._jhbuild_wrapper + command
environment = self._port.setup_environ_for_server('ImageDiff')
- self._process = self._port._server_process_constructor(self._port, 'ImageDiff', command, environment)
+ self._process = self._port._server_process_constructor(self._port, 'ImageDiff', command, environment, crash_message='Test marked as failed, ImageDiff crashed')
self._process.start()
self._tolerance = tolerance
Modified: trunk/Tools/Scripts/webkitpy/port/port_testcase.py (254928 => 254929)
--- trunk/Tools/Scripts/webkitpy/port/port_testcase.py 2020-01-22 18:19:22 UTC (rev 254928)
+++ trunk/Tools/Scripts/webkitpy/port/port_testcase.py 2020-01-22 18:55:45 UTC (rev 254929)
@@ -278,7 +278,7 @@
port = self.make_port()
self.proc = None
- def make_proc(port, nm, cmd, env):
+ def make_proc(port, nm, cmd, env, crash_message=None):
self.proc = MockServerProcess(port, nm, cmd, env, lines=['diff: 100% failed\n', 'diff: 100% failed\n'])
return self.proc
@@ -316,13 +316,13 @@
def test_diff_image_passed(self):
port = self.make_port()
- port._server_process_constructor = lambda port, nm, cmd, env: MockServerProcess(lines=['diff: 0% passed\n'])
+ port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['diff: 0% passed\n'])
image_differ = ImageDiffer(port)
self.assertEqual(image_differ.diff_image(b'foo', b'bar', 0.1), (None, 0, None))
def test_diff_image_failed(self):
port = self.make_port()
- port._server_process_constructor = lambda port, nm, cmd, env: MockServerProcess(lines=['diff: 100% failed\n'])
+ port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['diff: 100% failed\n'])
image_differ = ImageDiffer(port)
self.assertEqual(image_differ.diff_image(b'foo', b'bar', 0.1), (b'', 100.0, None))
@@ -330,7 +330,7 @@
port = self.make_port()
self.proc = None
- def make_proc(port, nm, cmd, env):
+ def make_proc(port, nm, cmd, env, crash_message=None):
self.proc = MockServerProcess(port, nm, cmd, env, crashed=True)
return self.proc
Modified: trunk/Tools/Scripts/webkitpy/port/server_process.py (254928 => 254929)
--- trunk/Tools/Scripts/webkitpy/port/server_process.py 2020-01-22 18:19:22 UTC (rev 254928)
+++ trunk/Tools/Scripts/webkitpy/port/server_process.py 2020-01-22 18:55:45 UTC (rev 254929)
@@ -61,10 +61,11 @@
indefinitely. The class also handles transparently restarting processes
as necessary to keep issuing commands."""
- def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None):
+ def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None, crash_message=None):
self._port = port_obj
self._name = name # Should be the command name (e.g. DumpRenderTree, ImageDiff)
self._cmd = cmd
+ self._crash_message = crash_message or 'This test marked as a crash'
# Windows does not allow unicode values in the environment
if env and self._port.host.platform.is_native_win():
@@ -186,7 +187,7 @@
# stop() calls _reset(), so we have to set crashed to True after calling stop()
# unless we already know that this is a timeout.
if not ignore_crash:
- _log.debug('This test marked as a crash because of a broken pipe when writing to stdin of the server process.')
+ _log.debug('{} because of a broken pipe when writing to stdin of the server process.'.format(self._crash_message))
self._crashed = True
def _pop_stdout_line_if_ready(self):
@@ -299,7 +300,7 @@
if out_fd in read_fds:
data = ""
if not data and not stopping and (self._treat_no_data_as_crash or self._proc.poll()):
- _log.debug('This test marked as a crash because of no data while reading stdout for the server process.')
+ _log.debug('{} because of no data while reading stdout for the server process.'.format(self._crash_message))
self._crashed = True
self._output += data
@@ -306,7 +307,7 @@
if err_fd in read_fds:
data = ""
if not data and not stopping and (self._treat_no_data_as_crash or self._proc.poll()):
- _log.debug('This test marked as a crash because of no data while reading stdout for the server process.')
+ _log.debug('{} because of no data while reading stdout for the server process.'.format(self._crash_message))
self._crashed = True
self._error += data
except IOError as e:
@@ -351,7 +352,7 @@
def has_crashed(self):
if not self._crashed and self.poll():
- _log.debug('This test marked as a crash because of failure to poll the server process (return code was %s).' % self._proc.returncode)
+ _log.debug('{} because of failure to poll the server process (return code was {}).'.format(self._crash_message, self._proc.returncode))
self._crashed = True
self._handle_possible_interrupt()
return self._crashed
Modified: trunk/Tools/Scripts/webkitpy/port/server_process_mock.py (254928 => 254929)
--- trunk/Tools/Scripts/webkitpy/port/server_process_mock.py 2020-01-22 18:19:22 UTC (rev 254928)
+++ trunk/Tools/Scripts/webkitpy/port/server_process_mock.py 2020-01-22 18:55:45 UTC (rev 254929)
@@ -30,7 +30,7 @@
class MockServerProcess(object):
- def __init__(self, port_obj=None, name=None, cmd=None, env=None, universal_newlines=False, lines=None, crashed=False, target_host=None):
+ def __init__(self, port_obj=None, name=None, cmd=None, env=None, universal_newlines=False, lines=None, crashed=False, target_host=None, crash_message=None):
self.timed_out = False
self.lines = [encode_if_necessary(line) for line in (lines or [])]
self.crashed = crashed
Modified: trunk/Tools/Scripts/webkitpy/port/simulator_process.py (254928 => 254929)
--- trunk/Tools/Scripts/webkitpy/port/simulator_process.py 2020-01-22 18:19:22 UTC (rev 254928)
+++ trunk/Tools/Scripts/webkitpy/port/simulator_process.py 2020-01-22 18:55:45 UTC (rev 254929)
@@ -73,9 +73,9 @@
self.socket.close()
return result
- def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None):
+ def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None, crash_message=None):
env['PORT'] = str(target_host.listening_port()) # The target_host should be a device.
- super(SimulatorProcess, self).__init__(port_obj, name, cmd, env, universal_newlines, treat_no_data_as_crash, target_host)
+ super(SimulatorProcess, self).__init__(port_obj, name, cmd, env, universal_newlines, treat_no_data_as_crash, target_host, crash_message)
self._bundle_id = port_obj.app_identifier_from_bundle(cmd[0])