Changeset 254929 in webkit
- Timestamp:
- Jan 22, 2020 10:55:45 AM (4 years ago)
- Location:
- trunk/Tools
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r254925 r254929 1 2020-01-22 Jonathan Bedard <jbedard@apple.com> 2 3 webkitpy: Make logging during ImageDiff crashes accurate 4 https://bugs.webkit.org/show_bug.cgi?id=206542 5 6 Reviewed by Aakash Jain. 7 8 When ImageDiff crashes, the generated logs are not accurate, they 9 reference a crash in test output when the test will actually fail 10 with an Image failure. The owner of a ServerProcess should be able 11 to customize this error message. 12 13 * Scripts/webkitpy/port/image_diff.py: 14 (ImageDiffer._start): Pass ImageDiff specific crash message. 15 * Scripts/webkitpy/port/port_testcase.py: 16 (PortTestCase.test_diff_image.make_proc): Match ImageDiff calcite. 17 (PortTestCase.test_diff_image_passed): Ditto. 18 (PortTestCase.test_diff_image_failed): Ditto. 19 (PortTestCase.test_diff_image_crashed.make_proc): Ditto. 20 * Scripts/webkitpy/port/server_process.py: 21 (ServerProcess.__init__): Support a custom message when the process crashes. 22 (ServerProcess.write): Ditto. 23 (ServerProcess._wait_for_data_and_update_buffers_using_select): Ditto. 24 (ServerProcess.has_crashed): Ditto. 25 * Scripts/webkitpy/port/server_process_mock.py: 26 (MockServerProcess.__init__): Match the ServerProcess constructor. 27 * Scripts/webkitpy/port/simulator_process.py: 28 (SimulatorProcess.__init__): Support a custom message when the process crashes. 29 1 30 2020-01-21 Matt Lewis <jlewis3@apple.com> 2 31 -
trunk/Tools/Scripts/webkitpy/port/image_diff.py
r254532 r254929 74 74 command = self._port._jhbuild_wrapper + command 75 75 environment = self._port.setup_environ_for_server('ImageDiff') 76 self._process = self._port._server_process_constructor(self._port, 'ImageDiff', command, environment )76 self._process = self._port._server_process_constructor(self._port, 'ImageDiff', command, environment, crash_message='Test marked as failed, ImageDiff crashed') 77 77 self._process.start() 78 78 self._tolerance = tolerance -
trunk/Tools/Scripts/webkitpy/port/port_testcase.py
r254532 r254929 279 279 self.proc = None 280 280 281 def make_proc(port, nm, cmd, env ):281 def make_proc(port, nm, cmd, env, crash_message=None): 282 282 self.proc = MockServerProcess(port, nm, cmd, env, lines=['diff: 100% failed\n', 'diff: 100% failed\n']) 283 283 return self.proc … … 317 317 def test_diff_image_passed(self): 318 318 port = self.make_port() 319 port._server_process_constructor = lambda port, nm, cmd, env : MockServerProcess(lines=['diff: 0% passed\n'])319 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['diff: 0% passed\n']) 320 320 image_differ = ImageDiffer(port) 321 321 self.assertEqual(image_differ.diff_image(b'foo', b'bar', 0.1), (None, 0, None)) … … 323 323 def test_diff_image_failed(self): 324 324 port = self.make_port() 325 port._server_process_constructor = lambda port, nm, cmd, env : MockServerProcess(lines=['diff: 100% failed\n'])325 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['diff: 100% failed\n']) 326 326 image_differ = ImageDiffer(port) 327 327 self.assertEqual(image_differ.diff_image(b'foo', b'bar', 0.1), (b'', 100.0, None)) … … 331 331 self.proc = None 332 332 333 def make_proc(port, nm, cmd, env ):333 def make_proc(port, nm, cmd, env, crash_message=None): 334 334 self.proc = MockServerProcess(port, nm, cmd, env, crashed=True) 335 335 return self.proc -
trunk/Tools/Scripts/webkitpy/port/server_process.py
r254340 r254929 62 62 as necessary to keep issuing commands.""" 63 63 64 def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None ):64 def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None, crash_message=None): 65 65 self._port = port_obj 66 66 self._name = name # Should be the command name (e.g. DumpRenderTree, ImageDiff) 67 67 self._cmd = cmd 68 self._crash_message = crash_message or 'This test marked as a crash' 68 69 69 70 # Windows does not allow unicode values in the environment … … 187 188 # unless we already know that this is a timeout. 188 189 if not ignore_crash: 189 _log.debug(' This test marked as a crash because of a broken pipe when writing to stdin of the server process.')190 _log.debug('{} because of a broken pipe when writing to stdin of the server process.'.format(self._crash_message)) 190 191 self._crashed = True 191 192 … … 300 301 data = self._proc.stdout.read() 301 302 if not data and not stopping and (self._treat_no_data_as_crash or self._proc.poll()): 302 _log.debug(' This test marked as a crash because of no data while reading stdout for the server process.')303 _log.debug('{} because of no data while reading stdout for the server process.'.format(self._crash_message)) 303 304 self._crashed = True 304 305 self._output += data … … 307 308 data = self._proc.stderr.read() 308 309 if not data and not stopping and (self._treat_no_data_as_crash or self._proc.poll()): 309 _log.debug(' This test marked as a crash because of no data while reading stdout for the server process.')310 _log.debug('{} because of no data while reading stdout for the server process.'.format(self._crash_message)) 310 311 self._crashed = True 311 312 self._error += data … … 352 353 def has_crashed(self): 353 354 if not self._crashed and self.poll(): 354 _log.debug(' This test marked as a crash because of failure to poll the server process (return code was %s).' % self._proc.returncode)355 _log.debug('{} because of failure to poll the server process (return code was {}).'.format(self._crash_message, self._proc.returncode)) 355 356 self._crashed = True 356 357 self._handle_possible_interrupt() -
trunk/Tools/Scripts/webkitpy/port/server_process_mock.py
r254340 r254929 31 31 32 32 class MockServerProcess(object): 33 def __init__(self, port_obj=None, name=None, cmd=None, env=None, universal_newlines=False, lines=None, crashed=False, target_host=None ):33 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): 34 34 self.timed_out = False 35 35 self.lines = [encode_if_necessary(line) for line in (lines or [])] -
trunk/Tools/Scripts/webkitpy/port/simulator_process.py
r254340 r254929 74 74 return result 75 75 76 def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None ):76 def __init__(self, port_obj, name, cmd, env=None, universal_newlines=False, treat_no_data_as_crash=False, target_host=None, crash_message=None): 77 77 env['PORT'] = str(target_host.listening_port()) # The target_host should be a device. 78 super(SimulatorProcess, self).__init__(port_obj, name, cmd, env, universal_newlines, treat_no_data_as_crash, target_host )78 super(SimulatorProcess, self).__init__(port_obj, name, cmd, env, universal_newlines, treat_no_data_as_crash, target_host, crash_message) 79 79 80 80 self._bundle_id = port_obj.app_identifier_from_bundle(cmd[0])
Note: See TracChangeset
for help on using the changeset viewer.