firecracker-microvm / firecracker-microvm/firecracker

Allow Running `vmm` Unittests in Parallel

Open
#4,709 12 comments 0 reactions 0 assignees View on GitHub
Good first issue Priority: Low Status: Parked
Dominant language
Rust
Stars
36.7k
Forks
2.6k
Avg merge
3d 2h
Merged PRs (30d)
53

Description

Currently, the unittests in the `vmm` package have to be run sequentially due to reliance on global state in some virtio device tests. More specifically, various tests in the `vsock` and `rng` modules use a global `METRICS` object (see also https://github.com/firecracker-microvm/firecracker/issues/2899). This design using a global METRICS object is fine for production, because a VMM can have at most one vsock and rng device each, however multiple unit tests running in parallel can create multiple device objects, which then simultaneously update the global metrics. Since our tests contain assertions on the value of the metrics to validate functionality, this causes spurious failures.

We can fix this by moving the vsock and rng device to a "per device metrics" model, as already adopted by net and block devices (see for example https://github.com/firecracker-microvm/firecracker/pull/4145).

As part of this issue, 3 things will need to be done
- [ ] Update the vsock device to use a "per device metrics" model
- [ ] Update the rng device to use a "per device metrics" model
- [ ] Fix the `test_tap_name` test to no longer use a hardcoded value of `tap0` (if multiple tests run in parallel and create tap devices, it is no longer guaranteed that the tap device created in this test will be called "tap0", it could be "tap1" or "tap43". Thus we probably just want some sort of regex match on the tap device name).

These can all be addressed in individual PRs, or all in one, depending on how much of a task you want to tackle :)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.