[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 2/3] automation: add jobs running tests from tools/tests/*
On Wed, Feb 12, 2025 at 06:07:37PM -0800, Stefano Stabellini wrote: > On Thu, 13 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> > > Very nice!! > > Only one comment below > > > > --- > > automation/gitlab-ci/test.yaml | 23 +++++++++++++++- > > automation/scripts/build | 1 +- > > automation/scripts/qubes-x86-64.sh | 27 +++++++++++++++++- > > automation/scripts/run-tools-tests | 47 +++++++++++++++++++++++++++++++- > > 4 files changed, 97 insertions(+), 1 deletion(-) > > 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..81d239cc8b75 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 > > > > @@ -188,7 +208,8 @@ brctl addbr xenbr0 > > brctl addif xenbr0 eth0 > > ifconfig eth0 up > > ifconfig xenbr0 up > > -ifconfig xenbr0 192.168.0.1 > > +timeout 30s udhcpc -i xenbr0 This is actually wrong with tests doing passthrough. I'll send v2 that limits it. > > +ip addr add dev xenbr0 192.168.0.1/24 > > > > " > etc/local.d/xen.start > > > > @@ -272,6 +293,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..242a9edad941 > > --- /dev/null > > +++ b/automation/scripts/run-tools-tests > > @@ -0,0 +1,47 @@ > > +#!/bin/sh > > It should be /bin/bash That script is running inside SUT (started from initramfs) which is rather minimal. I think it currently has bash, but with the initramfs at over 200MB (compressed) I can see trimming it in the future... > You could also consider -e and maybe -x That is a good idea (but also failures need to not break the XML structure, so it will clutter the script a bit). > > +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" > > + 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' "$f" "$ret" >> "$xml_out" > > + else > > + echo "PASSED" > > + fi > > + done > > + if [ -z "$ret" ]; then > > + printf ' <skipped type="skipped" message="test not found"/>\n' > > >> "$xml_out" > > + fi > > + printf ' </testcase>\n' "$dir" >> "$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 > > -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |