xcatd calls a discovering node back twice, processing and then
processed. The callback listener returned at the first one and closed,
so a late processed was missed, and the next scenario's listener on the
same port received it: findme-callbacks saw 1 callback and
findme-unprivileged-port saw 2.
The listener now collects for the whole callback_wait window.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
Several assertions held when nothing answered. Renew and rebind compared
the ACK with itself, because the step rebinds $lease before its
assertions run. tftp-escape, outside-the-aliases, monitor-is-not-tls,
postscript-unknown-client and the two credential refusals passed on a
closed port or a timeout.
Renew and rebind now compare with the earlier request, and validate
rejects an assertion on an alias its own step rebinds. Each negative
check now also requires the server to have answered: a TFTP error code,
an HTTP status, a TLS handshake, or a plain-text reply on 3002, read
from the new xcatreq field transport_error.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
bootfile returned option 67 when the reply carried one and the file
header otherwise. xCAT names the loader in the header, and the firmware
it serves does not read option 67 (dhcp-wire.md). A backend that moved
the loader to option 67 and left the header empty passed every loader
assertion.
bootfile now reads the header only, and each "no boot file" check also
asserts that option 67 is absent.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
Every DHCP step listened for its whole timeout, even after the reply it
waited for had arrived. The 15 DISCOVERs of pxe-arch-matrix.conf took
30 seconds on a management node that answers in milliseconds.
A step now stops at the first reply of the type it expects. A step that
asserts on offers, or expects none, still listens for the whole timeout,
because it must hear every server or prove that none answered.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
noip-interface-is-denied (S-07) is one discover step with
expect = none and no assertion. The DHCP client records test points
only for assertions, so the scenario emits none and passes whether or
not the server answers the *NOIP* port.
These tests run that step against a fake wire, silent and answering,
and require a scenario to state an assertion or an expectation. They
fail until a DHCP step reports its expectation.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
dhcptest and provtest carried two copies of the config loader, the
assertion language, the $step.field substitution, the TAP reporter, the
error types and the CLI. The copies had already drifted: list equality,
multi-line regex and CIDR membership behaved differently in each.
blackboxtest keeps one of each. A step type table in steps.py declares
the keys, required keys and reply fields of every type, and the runner
dispatches to the DHCP client or to the dig, tftp, curl and xcatd
clients. One scenario can now use a DHCP reply in a TFTP step.
The shipped scenarios move unchanged to conf/dhcp/ and conf/prov/. Their
scenario, step and assertion lists are identical to the old ones. The
wire cases and fixtures move to autotest/testcase/blackboxtest/, and CI
runs one offline phase instead of two.
Removed because no scenario or fixture used them: the pretty and json
reports, --pcap, --mac, the discover subcommand, the decline, inform
and sleep steps, assert_all, select, and the keys dhcptest accepted and
ignored.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>