Verification#
The CI workflows run unit tests, protocol checks and integration stands. Each layer checks a different boundary: broker logic, agent behavior, database and TLS integration, or packet enforcement in a Linux kernel.
Broker#
Run the broker unit suite on the supported Python versions:
Functional tests require PostgreSQL. Attestation tests require libtss2-dev
and tpm2-pytss; NAC_REQUIRE_ATTESTATION=1 makes missing attestation support
an error instead of skipping those cases:
The CI suite also checks protocol fixture digests, lint and types, documentation links, the example policy, nginx configuration and nftables compilation. Run the local gates with:
Integration stands#
The broker workflows apply grants through real nftables in Linux network
namespaces. The stands cover one enforced network, two office networks,
agent package updates, and a VPN tunnel. They require root, nftables, conntrack,
network namespaces and nginx; the database-backed stands also require
PostgreSQL. The tunnel workflow checks out exordos_nac_agent and
exordos_vpn beside this repository.
The scripts are under tools/stand/: e2e.sh, office-e2e.sh,
update-e2e.sh and vpn-e2e.sh. Their matching *-up.sh scripts prepare
stand resources; reap.sh removes resources left by an interrupted run.
Agent#
The endpoint agent has its own CI in
exordos_nac_agent. It runs:
The testbed uses swtpm to exercise TPM lifecycle and key-loss scenarios.
Set NAC_REQUIRE_SWTPM=1 when running it locally if skipping TPM tests would
make the result misleading. Platform packaging and service installation are
checked by the agent repository's platform-specific CI jobs.