restore_state in ipxe_secureboot_shim.sh matched the saved nodeset state against boot, offline, shell and standby. nodeset stat reports chain.currstate verbatim, so runcmd=bmcsetup, osimage=<name>, runimage=<task> and the deprecated install, netboot and statelite all fall past that list. The helper then restored nothing and still printed IPXE_SHIM_OK, so the node kept the installation the case configured and the next case on that node measured it. The lookups hide the same failure one layer down. lsdef and nodeset run in a pipeline, so the exit status comes from sed or head and is always zero, and an attribute that is unset prints the same empty string as a lookup that failed. The helper clears the provmethod and the netboot method it reads as unset, so a failed lookup makes it delete a value the node really had. The tests drive the helper through nine states and lookups. Against the unfixed helper, all four refusal cases exit 0 and print IPXE_SHIM_OK after calling nodeset osimage= on the node, and the provmethod case prints "provmethod=unset" for a provmethod the stub holds set. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
xCAT-test
Unit tests that run from the source checkout are split by implementation language:
| Test type | Location | Runner |
|---|---|---|
| Perl unit tests | xCAT-test/unit/*.t |
prove -r xCAT-test/unit |
| Shell unit tests | xCAT-test/bats/*.bats |
bats -r xCAT-test/bats |
| Black-box service tests | xCAT-test/blackboxtest/ |
python3 -m unittest discover -s tests, then blackboxtest run <conf> on a management node |
| Native host tests | xCAT-test/native/*.t |
Explicit lab runs; see native/README.md |
| CLI functional tests | xCAT-test/autotest/testcase/ and xCAT-test/autotest/bundle/ |
xcattest -f <cluster.conf> -t <case> or xcattest -f <cluster.conf> -b <bundle> |
Use Perl .t tests for Perl modules, Perl scripts, templates, and repository
artifacts. Use BATS tests for shell-script behavior that can be exercised from
the checkout by sourcing a shell library or script and shadowing external
commands.
Shell behavior should not be tested by Perl tests that grep shell source. Put
those tests under xCAT-test/bats instead.
blackboxtest is the odd one out: its Python unit tests and blackboxtest validate run offline like the others, but its point is the third column --
asking a management node what a booting node asks (DHCP, DNS, TFTP, HTTP,
xcatd) and asserting on the answers. It talks to the services only as a client,
so it does not depend on which DHCP server answers or on the xCAT database.
See unit/README.md, bats/README.md and blackboxtest/README.md for the
detailed rules for each suite.