aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/main.yml16
-rw-r--r--python/servo/testing_commands.py3
-rw-r--r--tests/wpt/servowpt.py61
3 files changed, 64 insertions, 16 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index c464b67154a..a62c62e3d25 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -216,14 +216,16 @@ jobs:
--release --processes $(nproc) --timeout-multiplier 2 \
--total-chunks ${{ env.max_chunk_id }} --this-chunk ${{ matrix.chunk_id }} \
--log-raw test-wpt.${{ matrix.chunk_id }}.log \
- --filter-intermittents=filtered-wpt-results.${{ matrix.chunk_id }}.json
+ --log-raw-unexpected unexpected-test-wpt.${{ matrix.chunk_id }}.log \
+ --filter-intermittents filtered-test-wpt.${{ matrix.chunk_id }}.json
- name: Archive filtered results
uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: wpt-filtered-results-linux
path: |
- filtered-wpt-results.${{ matrix.chunk_id }}.json
+ filtered-test-wpt.${{ matrix.chunk_id }}.json
+ unexpected-test-wpt.${{ matrix.chunk_id }}.log
- name: Archive logs
uses: actions/upload-artifact@v3
if: ${{ failure() }}
@@ -247,8 +249,16 @@ jobs:
with:
name: wpt-filtered-results-linux
path: wpt-filtered-results-linux
+ - name: Create aggregated unexpected results
+ run: cat wpt-filtered-results-linux/*.log > unexpected-test-wpt.log
+ - name: Archive aggregate results
+ uses: actions/upload-artifact@v3
+ with:
+ name: wpt-filtered-results-linux
+ path: |
+ unexpected-test-wpt.log
- name: Comment on PR with results
- run: etc/ci/report_aggregated_expected_results.py wpt-filtered-results-linux/*
+ run: etc/ci/report_aggregated_expected_results.py wpt-filtered-results-linux/*.json
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py
index c017baacc91..0cb20c0127f 100644
--- a/python/servo/testing_commands.py
+++ b/python/servo/testing_commands.py
@@ -87,6 +87,9 @@ def create_parser_wpt():
parser.add_argument('--filter-intermittents', default=None, action="store",
help="Filter intermittents against known intermittents "
"and save the filtered output to the given file.")
+ parser.add_argument('--log-raw-unexpected', default=None, action="store",
+ help="Raw structured log messages for unexpected results."
+ " '--log-raw' Must also be passed in order to use this.")
return parser
diff --git a/tests/wpt/servowpt.py b/tests/wpt/servowpt.py
index e66e359877f..241ee86a52a 100644
--- a/tests/wpt/servowpt.py
+++ b/tests/wpt/servowpt.py
@@ -122,6 +122,8 @@ def run_tests(**kwargs):
kwargs["test_types"] = test_types[product]
filter_intermittents_output = kwargs.pop("filter_intermittents", None)
+ unexpected_raw_log_output_file = kwargs.pop("log_raw_unexpected", None)
+ raw_log_outputs = kwargs.get("log_raw", [])
wptcommandline.check_args(kwargs)
update_args_for_layout_2020(kwargs)
@@ -146,14 +148,28 @@ def run_tests(**kwargs):
logger.add_handler(handler)
wptrunner.run_tests(**kwargs)
+ return_value = 0 if not handler.unexpected_results else 1
+
+ # Filter intermittents if that was specified on the command-line.
if handler.unexpected_results and filter_intermittents_output:
all_filtered = filter_intermittents(
handler.unexpected_results,
- filter_intermittents_output,
+ filter_intermittents_output
)
- return 0 if all_filtered else 1
- else:
- return 0 if not handler.unexpected_results else 1
+ return_value = 0 if all_filtered else 1
+
+ # Write the unexpected-only raw log if that was specified on the command-line.
+ if unexpected_raw_log_output_file:
+ if not raw_log_outputs:
+ print("'--log-raw-unexpected' not written without '--log-raw'.")
+ else:
+ write_unexpected_only_raw_log(
+ handler.unexpected_results,
+ raw_log_outputs[0].name,
+ unexpected_raw_log_output_file
+ )
+
+ return return_value
def update_tests(**kwargs):
@@ -228,15 +244,6 @@ def filter_intermittents(
else:
unexpected.append(result)
- if output_file:
- with open(output_file, "w", encoding="utf-8") as file:
- file.write(json.dumps({
- "known_intermittents":
- [dataclasses.asdict(result) for result in known_intermittents],
- "unexpected":
- [dataclasses.asdict(result) for result in unexpected],
- }))
-
output = "\n".join([
f"{len(known_intermittents)} known-intermittent unexpected result",
*[str(result) for result in known_intermittents],
@@ -246,9 +253,37 @@ def filter_intermittents(
])
print(output)
print(80 * "=")
+
+ if output_file:
+ print(f"Writing filtered results to {output_file}")
+ with open(output_file, "w", encoding="utf-8") as file:
+ file.write(json.dumps({
+ "known_intermittents":
+ [dataclasses.asdict(result) for result in known_intermittents],
+ "unexpected":
+ [dataclasses.asdict(result) for result in unexpected],
+ }))
+
return not unexpected
+def write_unexpected_only_raw_log(
+ unexpected_results: List[UnexpectedResult],
+ raw_log_file: str,
+ filtered_raw_log_file: str
+):
+ tests = [result.path for result in unexpected_results]
+ print(f"Writing unexpected-only raw log to {filtered_raw_log_file}")
+
+ with open(filtered_raw_log_file, "w", encoding="utf-8") as output:
+ with open(raw_log_file) as input:
+ for line in input.readlines():
+ data = json.loads(line)
+ if data["action"] in ["suite_start", "suite_end"] or \
+ ("test" in data and data["test"] in tests):
+ output.write(line)
+
+
def main():
from wptrunner import wptcommandline