Title: [254929] trunk/Tools
Revision
254929
Author
[email protected]
Date
2020-01-22 10:55:45 -0800 (Wed, 22 Jan 2020)

Log Message

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.

Modified Paths

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])
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to