Four cases in xCAT-test/bats/postscripts_otherpkgs.bats fail on the integrated tree. extract_shell_if_block reports that the upgrade anchor occurs 4 times and the url repository anchor occurs 2 times, where 1 is expected. "if [ $hasyum -eq 1 ]; then" opens the upgrade block and also the yum branch of the preremove, the install and the postremove blocks. "OTHERPKGDIR_INTERNET" matches the guard that opens the url repository block and an assignment inside that block. The earlier helper took the first match and said nothing. otherpkgs_block now passes NTH and TOTAL through to extract_shell_if_block. The two upgrade cases take occurrence 1 of 4, so a fifth identical line fails the test instead of moving it. The two url repository cases anchor on the guard line itself, which occurs once. Both blocks the earlier helper took are the blocks the assertions describe, so no case measured the wrong code. On the integrated tree bats -r xCAT-test/bats gives 113 ok and 0 not ok. On this branch, where the helper is not yet hardened, the file gives 18 ok. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
xCAT-test/bats
Shell-script unit tests live here and run with:
bats -r xCAT-test/bats
The GitHub Actions xcat_test workflow runs this command after the Perl .t
unit tests. Use BATS for shell behavior that can be exercised from the source
tree without an installed xCAT, a live management node, or real services.
Prefer sourcing an existing shell library or sourceable script and calling the
function under test. Keep reusable install-template helpers in
xCAT-server/share/xcat/install/scripts/scriptlib, and reusable postscript
helpers in xCAT/postscripts/xcatlib.sh. Use scratch directories and shadowed
commands so tests cannot write to the host.
Extraction helpers in helpers/shell_source.bash are only for legacy code that
cannot safely be sourced yet. Do not add Perl .t tests that grep shell source
when the behavior can be tested with BATS.