mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-28 20:09:35 +03:00
110 lines
2.4 KiB
Awk
110 lines
2.4 KiB
Awk
|
#!/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=""
|
||
|
cl=0
|
||
|
el=0
|
||
|
upl=0
|
||
|
ul=0
|
||
|
|
||
|
# Total seconds of tests runtime
|
||
|
total=0;
|
||
|
}
|
||
|
|
||
|
# Skip empty lines
|
||
|
/^\s*$/{next}
|
||
|
|
||
|
# Skip Configuration and Test lines
|
||
|
/^Test:/{state=""; next}
|
||
|
/Configuration/{state="";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;
|
||
|
}
|
||
|
|
||
|
/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}
|
||
|
{
|
||
|
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 {
|
||
|
print runner;
|
||
|
print "\nResults Summary"
|
||
|
print "PASS\t"pass
|
||
|
print "FAIL\t"fail
|
||
|
print "SKIP\t"skip
|
||
|
print ""
|
||
|
print "Running Time:\t"strftime("%T", total, 1)
|
||
|
if (pass+fail+skip > 0) {
|
||
|
percent_passed=(pass/(pass+fail+skip) * 100)
|
||
|
}
|
||
|
printf "Percent passed:\t%3.2f%", percent_passed
|
||
|
|
||
|
print "\n\nTests with results other than PASS that are expected:"
|
||
|
asort(expected_lines, sorted)
|
||
|
for (j in sorted)
|
||
|
print sorted[j]
|
||
|
|
||
|
print "\n\nTests with result of PASS that are unexpected:"
|
||
|
asort(unexpected_pass_lines, sorted)
|
||
|
for (j in sorted)
|
||
|
print sorted[j]
|
||
|
|
||
|
print "\n\nTests with results other than PASS that are unexpected:"
|
||
|
asort(unexpected_lines, sorted)
|
||
|
for (j in sorted)
|
||
|
print sorted[j]
|
||
|
}
|