CI interface smoketests (test_interfaces_cli job of the VyOS ISO Integration Test workflow) fail intermittently on DHCP-related assertions. Pass rate over the last 30 workflow runs: 42-55%, with independent failures near-daily — the least stable job in the workflow.
Three timing hazards in smoketest/scripts/cli/base_interfaces_test.py:
- PID discovery window too short. process_named_running(..., timeout=10) (8 call sites: dhclient + dhcp6c + wide-DHCPv6 option tests). On loaded CI runners the client daemon can take longer than 10 s to appear after commit; the poll helper returns as soon as the process shows up, so a longer grace only affects the failure path.
- Unguarded /proc/<pid>/cmdline read after PID discovery (4 sites, e.g. lines 284/318/339/1202 on current rolling). dhclient re-executes when it daemonizes — the PID captured right after commit can be gone by the time /proc is read. read_file() then returns the defaultonfailure=None, and the subsequent assertIn dies with a confusing TypeError instead of a clean assertion.
- Instant teardown leak asserts. tearDown() runs assertFalse(process_named_running(daemon)) immediately after cli_commit() removes the config — a daemon still in its shutdown path is reported as a leak.
Fix: raise the startup-poll window to 60 s via a module constant, re-resolve the PID once when the /proc read comes back empty, and give teardown a bounded grace period (existing wait_for_result shim helper) before declaring a daemon leak.