linux/tools/verification/rvgen/tests/rvgen_monitor.t
Gabriele Monaco 36c1af42e7 verification/rvgen: Add selftests
The rvgen code generator needs validation to ensure it produces correct
monitor implementations from input specifications.

Add selftests with golden reference outputs covering all monitor classes
(DA, HA, LTL) and types (global, per_cpu, per_task, per_obj), including
optional features like descriptions and parent monitors. Container
generation and error handling (missing files, invalid specifications,
missing arguments) are also validated against expected output.

Acked-by: Nam Cao <namcao@linutronix.de>
Reviewed-by: Wen Yang <wen.yang@linux.dev>
Link: https://lore.kernel.org/r/20260723074534.43521-9-gmonaco@redhat.com
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
2026-07-31 16:27:44 +02:00

88 lines
3.4 KiB
Bash

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
source ../tests/engine.sh
test_begin
set_timeout 30s
# Help and basic tests
check "verify help page" \
"$RVGEN --help" 0 "Generate kernel rv monitor"
check "verify monitor subcommand help" \
"$RVGEN monitor --help" 0 "Monitor class"
# DA monitor tests - test all monitor types
check_and_compare_folder "DA per_cpu (default name)" \
"$RVGEN monitor -c da -s tests/specs/test_da.dot -t per_cpu" \
"test_da" "obj-\$(CONFIG_RV_MON_TEST_DA) += monitors/test_da/test_da.o"
check_and_compare_folder "DA global type" \
"$RVGEN monitor -c da -s tests/specs/test_da.dot -t global -n da_global" \
"da_global" "DA_MON_EVENTS_IMPLICIT"
check_and_compare_folder "DA per_task with description" \
"$RVGEN monitor -c da -s tests/specs/test_da2.dot -t per_task -n da_pertask_desc -D 'Custom description for testing'" \
"da_pertask_desc" "#include <monitors/da_pertask_desc/da_pertask_desc_trace.h>"
check_and_compare_folder "DA per_obj with parent" \
"$RVGEN monitor -c da -s tests/specs/test_da2.dot -t per_obj -n da_perobj_parent -p parent_mon" \
"da_perobj_parent" "DA_MON_EVENTS_ID"
# HA monitor tests
check_and_compare_folder "HA per_task (default name)" \
"$RVGEN monitor -c ha -s tests/specs/test_ha.dot -t per_task" \
"test_ha" "HA_MON_EVENTS_ID"
check_and_compare_folder "HA per_cpu type" \
"$RVGEN monitor -c ha -s tests/specs/test_ha.dot -t per_cpu -n ha_percpu" \
"ha_percpu" "HA_MON_EVENTS_IMPLICIT"
# LTL monitor test
check_and_compare_folder "LTL per_task" \
"$RVGEN monitor -c ltl -s tests/specs/test_ltl.ltl -t per_task -n ltl_pertask" \
"ltl_pertask" "source \"kernel/trace/rv/monitors/ltl_pertask/Kconfig\""
check_and_compare_folder "LTL per_task with parent and description (default name)" \
"$RVGEN monitor -c ltl -s tests/specs/test_ltl.ltl -t per_task -p ltl_parent -D 'Simple description'" \
"test_ltl" "LTL_MON_EVENTS_ID"
# Error handling tests
check "missing required spec argument" \
"$RVGEN monitor -c da -t per_cpu" 2 \
"the following arguments are required: -s/--spec" "Traceback (most recent call last)"
check "missing required monitor type" \
"$RVGEN monitor -c da -s tests/specs/test_da.dot" 2 \
"the following arguments are required: -t/--monitor_type" "Traceback (most recent call last)"
check "missing required monitor class" \
"$RVGEN monitor -s tests/specs/test_da.dot -t per_cpu" 2 \
"the following arguments are required: -c/--class" "Traceback (most recent call last)"
check "invalid monitor class" \
"$RVGEN monitor -c invalid -s tests/specs/test_da.dot -t per_cpu" 1 \
"Unknown monitor class" "Traceback (most recent call last)"
check "missing dot file" \
"$RVGEN monitor -c da -s tests/specs/nonexistent.dot -t per_cpu" 1 \
"No such file or directory" "Traceback (most recent call last)"
check "missing ltl file" \
"$RVGEN monitor -c ltl -s tests/specs/nonexistent.ltl -t per_task" 1 \
"No such file or directory" "Traceback (most recent call last)"
check "invalid dot file syntax" \
"$RVGEN monitor -c da -s tests/specs/test_invalid.dot -t per_cpu" 1 \
"The automaton doesn't have an initial state" "Traceback (most recent call last)"
check "invalid ha file syntax" \
"$RVGEN monitor -c ha -s tests/specs/test_invalid_ha.dot -t per_obj" 1 \
"Unrecognised event" "Traceback (most recent call last)"
check "invalid ltl file syntax" \
"$RVGEN monitor -c ltl -s tests/specs/test_invalid.ltl -t per_task" 1 \
"No terminal matches 'i'" "Traceback (most recent call last)"
test_end