makedhcp adds the missing ISC declarations after the gpxe option space, and the missing Kea definitions after the existing ones, once. Indented ISC declarations and declarations with more blanks count. An ISC configuration without the gpxe space gives an error and stays as it is, and so does a Kea definition of option 175 without the gpxe encapsulation, and makedhcp then writes nothing. makedhcp writes the ISC configuration and restarts dhcpd at once. When the configuration declares no gpxe option space, or makedhcp cannot write the file or restart dhcpd, it reports the error and changes no subnet or host. A marker beside the configuration stays until a restart succeeds, so the next run restarts dhcpd before it changes a host. Without a dhcpd.conf, or with one that xCAT did not write, it gives no error and goes on to write a new configuration. Kea restarts to load the definitions, also when the Control Agent applies the host reservations. Every option code stays a number: JSON::XS writes a number that Perl has used as a string as a JSON string, and Kea rejects it. kea-dhcp4 -t checks an upgraded and a current configuration that makedhcp writes back.
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.