Bug 242763

Summary: run-webkit-tests -p svg does not finish (Python assertion)
Product: WebKit Reporter: Nikolas Zimmermann <zimmermann>
Component: SVGAssignee: Nikolas Zimmermann <zimmermann>
Status: RESOLVED FIXED    
Severity: Major CC: ap, jbedard, ryanhaddad, sabouhallawa, webkit-bug-importer, zimmermann
Priority: P2 Keywords: InRadar
Version: WebKit Local Build   
Hardware: Unspecified   
OS: Unspecified   

Description Nikolas Zimmermann 2022-07-14 13:42:00 PDT
Simply invoke "run-webkit-tests -p svg" on macOS Monterey on a vanilla WebKit main branch build:

...
worker/1 stopping
worker/4 stopping                                
[1206/2814] svg/filters/big-sized-filter.svg failed unexpectedly (image diff)
worker/3 stopping

AttributeError raised: 'tuple' object has no attribute 'passed' (from worker/5)
Traceback (most recent call last):
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py", line 92, in main
    run_details = run(port, options, args, stderr)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py", line 495, in run
    run_details = manager.run(args)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py", line 413, in run
    temp_initial_results, temp_retry_results, temp_enabled_pixel_tests_in_retry = self._run_test_subset(test_inputs, device_type=device_type)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py", line 487, in _run_test_subset
    initial_results = self._run_tests(test_inputs, self._options.repeat_each, self._options.iterations, int(self._options.child_processes), retrying=False, device_type=device_type)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py", line 566, in _run_tests
    return self._runner.run_tests(self._expectations[device_type], new_test_inputs, num_workers, retrying, device_type)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 179, in run_tests
    pool.wait()
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py", line 426, in wait
    self.queue.receive()(self)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py", line 133, in __call__
    reraise(*self.exc_info)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/libraries/autoinstalled/python-3-arm64/six.py", line 702, in reraise
    raise value.with_traceback(tb)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py", line 299, in main
    queue.send(_Result(value=task(None), id=task.id))
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py", line 56, in __call__
    return self.function(*self.args, **self.kwargs)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 76, in run_shard
    return Worker.instance.run_tests(shard)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 318, in run_tests
    Worker.instance.run_test(input, shard.name)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 346, in run_test
    result = self._run_test_with_or_without_timeout(test_input, test_timeout_sec, stop_when_done)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 403, in _run_test_with_or_without_timeout
    return self._run_test_in_this_thread(test_input, stop_when_done)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 489, in _run_test_in_this_thread
    return self._run_single_test(self._driver, test_input, stop_when_done)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py", line 492, in _run_single_test
    return single_test_runner.run_single_test(
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py", line 48, in run_single_test
    return runner.run()
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py", line 128, in run
    return self._run_compare_test()
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py", line 146, in _run_compare_test
    test_result = self._compare_output(expected_driver_output, driver_output)
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py", line 282, in _compare_output
    failures.extend(self._compare_image(expected_driver_output, driver_output))
  File "/Users/nzimmermann/Software/GitRepositories/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py", line 330, in _compare_image
    if not diff_result.passed:
AttributeError: 'tuple' object has no attribute 'passed' (from worker/5)

Quite annoying, need to investigate.
Comment 1 Nikolas Zimmermann 2022-07-14 14:17:10 PDT
ImageDiff apparently didn't execute successfully:

This is the "diff_result" object, where no "passed" or "error_string" attribute is present, in the case of a ImageDiff problem:
(None, 0, 'Failed to compute an image diff: [Errno 32] Broken pipe')

Here's a single test reproducer: run-webkit-tests -p svg/foreignObject/body-background.svg
Comment 2 Nikolas Zimmermann 2022-07-14 14:24:39 PDT
Aha, here's the culprit:

nzimmermann@nzimmermann-macbook WebKit % DYLD_FRAMEWORK_PATH=$PWD/WebKitBuild/Debug/ $PWD/WebKitBuild/Debug/ImageDiff actual.png LayoutTests/svg/foreignObject/body-background-expected.png
Error: test and reference images differ in alpha. Test image has alpha, reference image does not have alpha.
nzimmermann@nzimmermann-macbook WebKit % echo $?
1


actual.png: PNG image data, 800 x 600, 8-bit/color RGBA, non-interlaced
nzimmermann@nzimmermann-macbook WebKit % file LayoutTests/svg/foreignObject/body-background-expected.png
LayoutTests/svg/foreignObject/body-background-expected.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced

This is a truly outdated expected.png, dating back to 2012, added by Florin.
I couldn't even remember we generated RGB images in the past...


Anyhow, I'm aware people rarely use pixel tests... will fix this on my own.
Comment 3 Nikolas Zimmermann 2022-07-14 23:27:05 PDT
Pull request: https://github.com/WebKit/WebKit/pull/2446
Comment 4 EWS 2022-07-15 05:12:17 PDT
Committed 252498@main (538f5387b7f6): <https://commits.webkit.org/252498@main>

Reviewed commits have been landed. Closing PR #2446 and removing active labels.
Comment 5 Radar WebKit Bug Importer 2022-07-15 05:13:18 PDT
<rdar://problem/97068989>