Skip to content

tests: add periodic sanitizer integration test pipeline#5722

Open
aaron-ang wants to merge 1 commit intofirecracker-microvm:mainfrom
aaron-ang:test/sanitizer-integration-pipeline
Open

tests: add periodic sanitizer integration test pipeline#5722
aaron-ang wants to merge 1 commit intofirecracker-microvm:mainfrom
aaron-ang:test/sanitizer-integration-pipeline

Conversation

@aaron-ang
Copy link
Copy Markdown

@aaron-ang aaron-ang commented Feb 26, 2026

Changes

  • Add tests/integration_tests/build/test_sanitizers.py to run Rust vmm integration tests under ASAN (address) as a nonci build test.
  • Add .buildkite/pipeline_sanitizers.py to generate Buildkite sanitizer steps per architecture (m6i.metal, m7g.metal).
  • Update tests/README.md with sanitizer test run instructions and pipeline reference.
  • Fix tools/test.sh to avoid unbound-variable failure outside Buildkite by changing "$BUILDKITE" to "${BUILDKITE:-false}".

Reason

Closes #1662.

License Acceptance

By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache 2.0 license. For more information on following Developer
Certificate of Origin and signing off your commits, please check
CONTRIBUTING.md.

PR Checklist

  • I have read and understand CONTRIBUTING.md.
  • I have run tools/devtool checkbuild --all to verify that the PR passes
    build checks on all supported architectures.
  • I have run tools/devtool checkstyle to verify that the PR passes the
    automated style checks.
  • I have described what is done in these changes, why they are needed, and
    how they are solving the problem in a clear and encompassing way.
  • I have updated any relevant documentation (both in code and in the docs)
    in the PR.
  • I have mentioned all user-facing changes in CHANGELOG.md.
    N/A: this PR does not introduce user-facing behavior changes.
  • If a specific issue led to this PR, this PR closes the issue.
  • When making API changes, I have followed the
    Runbook for Firecracker API changes.
    N/A: this PR does not make API changes.
  • I have tested all new and changed functionalities in unit tests and/or
    integration tests.
  • I have linked an issue to every new TODO.

  • This functionality cannot be added in rust-vmm.

@aaron-ang aaron-ang force-pushed the test/sanitizer-integration-pipeline branch from cb7bf19 to 34ee078 Compare February 26, 2026 06:19
Add a dedicated integration test that runs vmm Rust integration tests
under ASAN, and wire a Buildkite pipeline generator for periodic
sanitizer runs.

Also document the run command and harden tools/test.sh for local
runs under set -u by guarding BUILDKITE variable access.

Signed-off-by: Aaron Ang <aaron.angyd@gmail.com>
@aaron-ang aaron-ang force-pushed the test/sanitizer-integration-pipeline branch from 34ee078 to 4de013b Compare February 26, 2026 06:19
@ilstam ilstam added the Status: Awaiting review Indicates that a pull request is ready to be reviewed label Mar 4, 2026
@zulinx86 zulinx86 removed the Status: Awaiting review Indicates that a pull request is ready to be reviewed label Mar 4, 2026
defs.LOCAL_BUILD_PATH
/ "cargo_target"
/ "sanitizers"
/ (f"{sanitizer}-{uuid4().hex}")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we don't make the directory unique, does it cause any issue?
If not, each run would place binaries into a new directory and consume its disk space, which might not be desirable on a local development environment.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved. we should be able to reuse paths.

@pytest.mark.parametrize("sanitizer", SANITIZERS)
def test_rust_integration_tests_under_sanitizer(sanitizer):
"""Run vmm Rust integration tests under the specified sanitizer."""
target_flag_var = f"CARGO_TARGET_{TARGET.upper().replace('-', '_')}_RUSTFLAGS"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this have to be specific to a target? Just RUSTFLAGS doesn't work?

Copy link
Copy Markdown
Author

@aaron-ang aaron-ang Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved. found get_rustflags helper in cargo_build.py and used RUSTFLAGS directly.

)
cargo(
"test",
f"--target {TARGET} -p vmm --test integration_tests",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why only vmm crate? Why only integration_tests?
Can't we just all Rust tests using --workspace?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i misread the original intent. seems like we need a bigger refactor to run all integration tests.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it requires much bigger refactoring, I think we can merge this change if it only covers the vmm crate. We can expand the scope later :)

@zulinx86
Copy link
Copy Markdown
Contributor

zulinx86 commented Mar 8, 2026

Hi @aaron-ang , sorry for being late to review and thank you so much of your contribution! I left some comments, so could you take a look at them?

@aaron-ang
Copy link
Copy Markdown
Author

Hi @aaron-ang , sorry for being late to review and thank you so much of your contribution! I left some comments, so could you take a look at them?

hi, apologies for the delay. I will make the necessary edits this week.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Tests] Periodically run Firecracker integration tests under sanitizers

3 participants