Skip to content

Commit

Permalink
kvm-unit-tests: output test results in TAP13 format
Browse files Browse the repository at this point in the history
This patch introduces TAP13 results format of kvm-unit-tests by
adding flag '-t|--tap13' to kvm-unit-tests run_tests.sh script,
it menas that the test results output in a TAP13 format.

The new script, parse-output.py, to handle the parsing of kvm-unit-tests
outputs. The script reads input from the standard input, processes each
line to determine the test results as the LAVA understand.

e.g.
  <test-name> <pass|fail|skip>

Signed-off-by: Naresh Kamboju <[email protected]>
  • Loading branch information
Naresh Kamboju authored and roxell committed Jun 25, 2024
1 parent c44e2c1 commit 140f9f2
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 16 deletions.
21 changes: 5 additions & 16 deletions automated/linux/kvm-unit-tests/kvm-unit-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,26 +27,16 @@ while getopts "s:m:g:h" o; do
done

parse_output() {
# Parse each type of results
# A note on the sed line used below to strip color codes:
# busybox's sed does not implement e.g. '\x1b', and so the literal
# control code is used below. Do not copy/paste it, or it will lose
# its magic.
grep -e PASS -e SKIP -e FAIL "${RESULT_LOG}" | \
sed 's/\[[0-9]*m//g' | \
sed -e 's/PASS/pass/g' \
-e 's/SKIP/skip/g' \
-e 's/FAIL/fail/g' | \
awk '{print $2" "$1}' >> "${RESULT_FILE}"
cat "${RESULT_FILE}"
# Parse input test names and results log to results file
./parse-output.py < "${RESULT_LOG}" | tee -a "${RESULT_FILE}"
}

kvm_unit_tests_run_test() {
info_msg "running kvm unit tests ..."
if [ "${SMP}" = "false" ]; then
taskset -c 0 ./run_tests.sh -a -v | tee -a "${RESULT_LOG}"
taskset -c 0 ./run_tests.sh -a -t -v | tee -a "${RESULT_LOG}"
else
./run_tests.sh -a -v | tee -a "${RESULT_LOG}"
./run_tests.sh -a -t -v | tee -a "${RESULT_LOG}"
fi
}

Expand Down Expand Up @@ -84,8 +74,6 @@ install() {
# Test run.
! check_root && error_msg "This script must be run as root"
create_out_dir "${OUTPUT}"
# shellcheck disable=SC2164
cd "${OUTPUT}"

info_msg "About to run kvm unit tests ..."
info_msg "Output directory: ${OUTPUT}"
Expand All @@ -107,6 +95,7 @@ fi

# Run kvm unit tests
kvm_unit_tests_run_test
cd - || exit 1

# Parse and print kvm unit tests results
parse_output
68 changes: 68 additions & 0 deletions automated/linux/kvm-unit-tests/parse-output.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env python3
import sys
import re


def parse_line(line):
"""
Parses a single line of input to extract the test result and description.
Args:
line (str): A single line of input.
Returns:
tuple: A tuple containing the result and description.
"""

if not line.startswith("ok") and not line.startswith("not ok"):
return None, None

parts = re.split(r" \d+ - ", line)
if len(parts) < 2:
raise ValueError(f"Invalid line format: {line}")

result = "pass" if parts[0] == "ok" else "fail"
description = parts[1].strip()

if "# skip" in description.lower():
result = "skip"
description = description.split("# skip")[0].strip()

return result, description


def sanitize_description(description):
"""
Sanitizes the description by replacing spaces with dashes, removing special characters, and avoiding double dashes.
Args:
description (str): The test description.
Returns:
str: The sanitized description.
"""
description = description.replace(" ", "-")
description = re.sub(r"[^a-zA-Z0-9_-]+", "", description) # Slugify
description = re.sub(
r"-+", "-", description
) # Replace multiple dashes with a single dash
return description


def main():
"""
Main function to parse input, process each line, and output the results.
"""
lines = sys.stdin.readlines()

for line in lines:
result, description = parse_line(line)

if not result or not description:
continue

print(f"{sanitize_description(description)} {result}")


if __name__ == "__main__":
main()

0 comments on commit 140f9f2

Please sign in to comment.