From 7d2705481e154095e2842fabbfbbaa1afcb9daf2 Mon Sep 17 00:00:00 2001 From: Tony Hutter Date: Thu, 20 Jun 2024 15:54:37 -0700 Subject: [PATCH] Merge summaries Just testing Requires-builders: none Signed-off-by: Tony Hutter --- .github/workflows/scripts/merge_summary.awk | 122 ++++++++++++++++++++ .github/workflows/scripts/qemu-7-reports.sh | 3 + 2 files changed, 125 insertions(+) create mode 100755 .github/workflows/scripts/merge_summary.awk diff --git a/.github/workflows/scripts/merge_summary.awk b/.github/workflows/scripts/merge_summary.awk new file mode 100755 index 000000000000..4779b116a2e7 --- /dev/null +++ b/.github/workflows/scripts/merge_summary.awk @@ -0,0 +1,122 @@ +#!/bin/awk -f +# +# Merge multiple ZTS tests results summaries into a single summary. This is +# needed when you're running different parts of ZTS on different tests +# runners or VMs. +# +# Usage: +# +# ./merge_summary.awk summary1.txt [summary2.txt] [summary3.txt] ... +# +# or: +# +# cat summary*.txt | ./merge_summary.awk +# +BEGIN { + i=-1 + pass=0 + fail=0 + skip=0 + state="config_lines" + cl=0 + el=0 + epl=0 + ul=0 + + # Total seconds of tests runtime + total=0; +} + +/Configuration/{ + i++; + if (state != "config_lines") { + # new file, clear our state + state=""; + } +} + +# Skip empty lines +/^\s*$/{next} + +# When we see "test-runner.py" stop saving config lines, and +# save test runner lines +/test-runner.py/{state="testrunner"; runner=runner$0"\n"; next} + +# We need to differentiate the PASS counts from test result lines that start +# with PASS, like: +# +# PASS mv_files/setup +# +# Use state="pass_count" to differentiate +# +/Results Summary/{state="pass_count"; next} +/PASS/{ if (state=="pass_count") {pass += $2}} +/FAIL/{ if (state=="pass_count") {fail += $2}} +/SKIP/{ if (state=="pass_count") {skip += $2}} +/Running Time/{ + state=""; + running[i]=$3; + split($3, arr, ":") + total += arr[1] * 60 * 60; + total += arr[2] * 60; + total += arr[3] + next; +} + +# Just save the log directory from the first summary since we probably don't +# care what the value is. +/Log directory/{if (i == 0) {logdir_line=$0"\n"}; next} +/Tests with results other than PASS that are expected/{state="expected_lines"; next} +/Tests with result of PASS that are unexpected/{state="unexpected_pass_lines"; next} +/Tests with results other than PASS that are unexpected/{state="unexpected_lines"; next} +{ + # Save the opening configuration lines from first summary file. These + # should be relatively common to all the summaries. + if (state == "config_lines") { + config_lines[cl] = $0 + cl++; + } + + if (state == "expected_lines") { + expected_lines[el] = $0 + el++ + } + + if (state == "unexpected_pass_lines") { + unexpected_pass_lines[upl] = $0 + upl++ + } + if (state == "unexpected_lines") { + unexpected_lines[ul] = $0 + ul++ + } +} + +# Reproduce summary +END { + for (j in config_lines) + print config_lines[j] + print "" + print runner; + print " Results Summary" + print " PASS\t"pass + print " FAIL\t"fail + print " SKIP\t"skip + print "" + print " Running Time:\t"strftime("%T", total, 1) + + percent_passed=(pass/(pass+fail+skip) * 100) + printf " Percent passed:\t%3.2f%\n", percent_passed + print logdir_line + print " Tests with results other than PASS that are expected:" + for (j in expected_lines) + print expected_lines[j] + print "" + print " Tests with result of PASS that are unexpected:" + for (j in unexpected_pass_lines) + print unexpected_pass_lines[j] + print "" + print " Tests with results other than PASS that are unexpected:" + for (j in unexpected_lines) + print unexpected_lines[j] +} diff --git a/.github/workflows/scripts/qemu-7-reports.sh b/.github/workflows/scripts/qemu-7-reports.sh index 924b783d937d..33f9a2e2fd2c 100755 --- a/.github/workflows/scripts/qemu-7-reports.sh +++ b/.github/workflows/scripts/qemu-7-reports.sh @@ -35,4 +35,7 @@ for i in `seq 1 3`; do echo "##[endgroup]" done +# Merge all summaries +grep -v 'Test[ :]' vm*log.txt | .github/workflows/scripts/merge_summary.awk + exit $exitcode