e2e: close the firecracker and podman coverage gaps - #212
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes coverage gaps on the runtimes nobody was testing. Every test here was run against real microVMs and containers.
The gap
e2e tests per runtime before this branch: docker 45, cloud-hypervisor 24, firecracker 9, containerd 6, podman 4.
What was added
t10_replicas.sh(firecracker) — fan out to 3 microVMs, assert 3 sockets and exactly 3 rootfs copies, converge back to 1, assert the surplus images are reaped, then delete and assert sockets and rootfs images reach zero.t11_health_checks.sh(firecracker) — Firecracker implements neitherexecute_health_checknor the probes; it relies on the trait default resolving the guest through itsinstance_addressoverride. Nothing proved that held. The test requires the probe message to come fromhealth_probes::tcp_probespecifically, and asserts the loop keeps polling.t5_podman_volumes_env.sh(podman) — bind mount readable inside the container,rorefusing a write (verified by absence of the file both in the container and on the host), and an environment variable reaching the process. Podman shares Docker's lifecycle, which is why this went untested — but bind mounts cross a user-namespace boundary when rootless.setup.sh(firecracker) — fail fast when the binary lacks an effectiveCAP_NET_ADMIN. Without it every boot fails onTUNSETIFFand the deployment lands incrash_loop_back_off, which a test can only report as "did not reach running in 60s" — pointing at the runtime instead of the missing capability.What these tests deliberately do NOT prove
Stated in each header so a green run is not over-read:
ring applywith a changed replica count replaces the deployment rather than resizing it, so thecurrent.len() > desiredbranch is not reached — the same caveat CH'st9_scaledowndocuments.on_failure: alertevent. It does fire, but not reliably within the test window, and I could not determine what governs the delay. Documented in the file and tracked on the board rather than asserted with a guessed timeout.Not added
A containerd metrics test:
setup.shthere requires root, so it could not be executed, and shipping an unrun test is worse than shipping none. Tracked on the board with the wider podman/containerd gap.Verification
firecracker t1–t6, t8, t10, t11 and podman t1, t2, t4, t5 all pass locally against real VMs and containers. 824 unit tests unchanged.
Reviewed by codex over three rounds. It caught that t10 overstated what it proved, that my creating-phase explanation for the missing alert was factually wrong, that t11 accepted a scheduler-generated timeout message which would let a hang pass, and that my first cleanup trap would have deleted a developer's unrelated Ring containers. All fixed; final verdict was merge-approved.