ec1ce505d2
persistent-netns, tap-relay, and dns-resolver (formerly hand-rolled bool-returning functions in self_test.cpp, called unconditionally by the old ad hoc run_self_tests()) move to tests/integration/test_root_networking.cpp as TEST_CASEs tagged [integration][root][net] -- SKIP() (not a whole-suite skip) when not root, or when dnsmasq isn't installed for the DNS one, so e.g. -t -- "[unit]" on a rootless machine is unaffected. Every assertion uses CHECK, not REQUIRE: these tests manage real host-side namespaces, bridges, and tap devices that must not leak just because an earlier assertion failed, so execution always falls through to the same unconditional cleanup at the end (guarded only by simple pid/bool checks to skip meaningless dependent steps). Real bug found running the tap-relay test under Catch2, not assumed: Catch2 installs its own fatal-signal handler around a running TEST_CASE, which create_tap_relay()'s own forked relay child inherits -- so the relay's ordinary shutdown SIGTERM (sent by stop_tap_relay()) got caught by that *inherited* handler in the child instead of terminating it via the default disposition the relay's own design relies on, producing a spurious "FAILED ... due to a fatal error condition: SIGTERM" report interleaved into the real output (confirmed cosmetic only -- exit code and assertion count were correct either way, just confusing). Fixed by resetting SIGTERM to SIG_DFL for the narrow window around the create_tap_relay() call and restoring it right after -- only the disposition at fork time is inherited, so nothing about how long the relay then keeps running matters. No production code changed for this; it's purely an artifact of forking network primitives from within a Catch2-instrumented process. meson.build: the new tests/integration/*.cpp sources are only added to slocker-lite's own source list when enable_tests is true (mirroring config.h's ENABLE_TESTS runtime guard, added last commit), and src/ is added to the target's own include_directories so test sources under tests/ can #include project headers the same way src/*.cpp already does. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gv3s5jckJKzh6JkMoi2Akz