[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 2/4] automation: add jobs running tests from tools/tests/*
On Fri, 14 Feb 2025, Marek Marczykowski-Górecki wrote: > There are a bunch of tests in tools/tests/, let them run in CI. > For each subdirectory expect "make run" will run the test, and observe > its exit code. This way, adding new tests is easy, and they will be > automatically picked up. > > For better visibility, log test output to junit xml format, and let > gitlab ingest it. Set SUT_ADDR variable with name/address of the system > under test, so a network can be used to extract the file. The actual > address is set using DHCP. And for the test internal network, still add > the 192.168.0.1 IP (but don't replace the DHCP-provided one). > > Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > Changes in v2: > - use bash shebang > - clarify skipped message > - cleanup extra printf params > - limit calling DHCP in dom0 to only tests that need it > --- > automation/gitlab-ci/test.yaml | 23 +++++++++++++++- > automation/scripts/build | 1 +- > automation/scripts/qubes-x86-64.sh | 28 ++++++++++++++++++- > automation/scripts/run-tools-tests | 47 +++++++++++++++++++++++++++++++- > 4 files changed, 99 insertions(+) > create mode 100755 automation/scripts/run-tools-tests > > diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml > index 1822e3ea5fd7..c21a37933881 100644 > --- a/automation/gitlab-ci/test.yaml > +++ b/automation/gitlab-ci/test.yaml > @@ -130,6 +130,7 @@ > PCIDEV: "03:00.0" > PCIDEV_INTR: "MSI-X" > CONSOLE_OPTS: "console=com1 com1=115200,8n1" > + SUT_ADDR: test-2.testnet > artifacts: > paths: > - smoke.serial > @@ -263,6 +264,28 @@ adl-pvshim-x86-64-gcc-debug: > - *x86-64-test-needs > - alpine-3.18-gcc-debug > > +adl-tools-tests-pv-x86-64-gcc-debug: > + extends: .adl-x86-64 > + script: > + - ./automation/scripts/qubes-x86-64.sh tools-tests-pv 2>&1 | tee > ${LOGFILE} > + artifacts: > + reports: > + junit: tests-junit.xml > + needs: > + - *x86-64-test-needs > + - alpine-3.18-gcc-debug > + > +adl-tools-tests-pvh-x86-64-gcc-debug: > + extends: .adl-x86-64 > + script: > + - ./automation/scripts/qubes-x86-64.sh tools-tests-pvh 2>&1 | tee > ${LOGFILE} > + artifacts: > + reports: > + junit: tests-junit.xml > + needs: > + - *x86-64-test-needs > + - alpine-3.18-gcc-debug > + > zen3p-smoke-x86-64-gcc-debug: > extends: .zen3p-x86-64 > script: > diff --git a/automation/scripts/build b/automation/scripts/build > index 952599cc25c2..522efe774ef3 100755 > --- a/automation/scripts/build > +++ b/automation/scripts/build > @@ -109,5 +109,6 @@ else > # even though dist/ contains everything, while some containers don't even > # build Xen > cp -r dist binaries/ > + cp -r tools/tests binaries/ > collect_xen_artefacts > fi > diff --git a/automation/scripts/qubes-x86-64.sh > b/automation/scripts/qubes-x86-64.sh > index 7eb3ce1bf703..7c80e0c23318 100755 > --- a/automation/scripts/qubes-x86-64.sh > +++ b/automation/scripts/qubes-x86-64.sh > @@ -10,6 +10,8 @@ set -ex > # - pci-pv PV dom0, PV domU + PCI Passthrough > # - pvshim PV dom0, PVSHIM domU > # - s3 PV dom0, S3 suspend/resume > +# - tools-tests-pv PV dom0, run tests from tools/tests/* > +# - tools-tests-pvh PVH dom0, run tests from tools/tests/* > test_variant=$1 > > ### defaults > @@ -19,6 +21,7 @@ timeout=120 > domU_type="pvh" > domU_vif="'bridge=xenbr0'," > domU_extra_config= > +retrieve_xml= > > case "${test_variant}" in > ### test: smoke test & smoke test PVH & smoke test HVM & smoke test > PVSHIM > @@ -126,6 +129,21 @@ done > " > ;; > > + ### tests: tools-tests-pv, tools-tests-pvh > + "tools-tests-pv"|"tools-tests-pvh") > + retrieve_xml=1 > + passed="test passed" > + domU_check="" > + dom0_check=" > +/tests/run-tools-tests /tests /tmp/tests-junit.xml && echo \"${passed}\" > +nc -l -p 8080 < /tmp/tests-junit.xml >/dev/null & > +" > + if [ "${test_variant}" = "tools-tests-pvh" ]; then > + extra_xen_opts="dom0=pvh" > + fi > + > + ;; > + > *) > echo "Unrecognised test_variant '${test_variant}'" >&2 > exit 1 > @@ -178,6 +196,8 @@ mkdir srv > mkdir sys > rm var/run > cp -ar ../binaries/dist/install/* . > +cp -ar ../binaries/tests . > +cp -a ../automation/scripts/run-tools-tests tests/ > > echo "#!/bin/bash > > @@ -192,6 +212,10 @@ ifconfig xenbr0 192.168.0.1 > > " > etc/local.d/xen.start > > +if [ -n "$retrieve_xml" ]; then > + echo "timeout 30s udhcpc -i xenbr0" >> etc/local.d/xen.start > +fi > + > if [ -n "$domU_check" ]; then > echo " > # get domU console content into test log > @@ -272,6 +296,10 @@ if [ $timeout -le 0 ]; then > exit 1 > fi > > +if [ -n "$retrieve_xml" ]; then > + nc -w 10 "$SUT_ADDR" 8080 > tests-junit.xml </dev/null > +fi > + > sleep 1 > > (grep -q "^Welcome to Alpine Linux" smoke.serial && grep -q "${passed}" > smoke.serial) || exit 1 > diff --git a/automation/scripts/run-tools-tests > b/automation/scripts/run-tools-tests > new file mode 100755 > index 000000000000..770e97c3e943 > --- /dev/null > +++ b/automation/scripts/run-tools-tests > @@ -0,0 +1,47 @@ > +#!/bin/bash > + > +usage() { > + echo "Usage: $0 tests-dir xml-out" > +} > + > +xml_out=$2 > +if [ -z "$xml_out" ]; then > + xml_out=/dev/null > +fi > +printf '<?xml version="1.0" encoding="UTF-8"?>\n' > "$xml_out" > +printf '<testsuites name="tools.tests">\n' >> "$xml_out" > +printf ' <testsuite name="tools.tests">\n' >> "$xml_out" > +failed= > +for dir in "$1"/*; do > + [ -d "$dir" ] || continue > + echo "Running test in $dir" > + printf ' <testcase name="%s">\n' "$dir" >> "$xml_out" > + ret= > + for f in "$dir"/*; do > + [ -f "$f" ] || continue > + [ -x "$f" ] || continue > + "$f" 2>&1 | tee /tmp/out > + ret=$? > + if [ "$ret" -ne 0 ]; then > + echo "FAILED: $ret" > + failed+=" $dir" > + printf ' <failure type="failure" message="binary %s exited > with code %d">\n' "$f" "$ret" >> "$xml_out" > + # TODO: could use xml escaping... but current tests seems to > + # produce sane output > + cat /tmp/out >> "$xml_out" > + printf ' </failure>\n' >> "$xml_out" > + else > + echo "PASSED" > + fi > + done > + if [ -z "$ret" ]; then > + printf ' <skipped type="skipped" message="no executable test found > in %s"/>\n' "$dir" >> "$xml_out" > + fi > + printf ' </testcase>\n' >> "$xml_out" > +done > +printf ' </testsuite>\n' >> "$xml_out" > +printf '</testsuites>\n' >> "$xml_out" > + > +if [ -n "$failed" ]; then > + exit 1 > +fi > -- > git-series 0.9.1 >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |