You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aya/test
Thomas Eizinger 9f3a944f9b
feat(aya-ebpf): introduce `array::OutOfBounds` error
Like regular arrays in Rust, arrays in eBPF are initialised upon
creation. Unlike regular arrays though, the memory is simply initialised
to all zeros without the user having to provide the array elements.

Like regular arrays, accessing the value at a specified index will yield
a reference as long as the index is within the bounds of the array.

At present, the API for `Array::get` returns an `Option` where the
`None` case signals the "out-of-bounds" case. Given that the user never
explicitly provided any values, the `None` case may be mistaked as "the
value has not been set" rather than "out of bounds".

To make this more obvious, we change the API to return a new
`OutOfBounds` error instead. This aligns the API with the user-space
equivalent of the `Array` struct.
2 months ago
..
integration-common taplo: reorder-keys 3 months ago
integration-ebpf feat(aya-ebpf): introduce `array::OutOfBounds` error 2 months ago
integration-test xtask: Move libbpf header installation logic to a helper function 2 months ago
.gitignore test: Replace RTF with Rust 3 years ago
README.md ci: cache downloads 6 months ago

README.md

Aya Integration Tests

The aya integration test suite is a set of tests to ensure that common usage behaviours work on real Linux distros

Prerequisites

You'll need:

  1. rustup toolchain install nightly
  2. rustup target add {aarch64,x86_64}-unknown-linux-musl
  3. cargo install bpf-linker
  4. libelf-dev (libelf-devel on rpm-based distros)
  5. llvm (for llvm-objcopy)
  6. (virtualized only) qemu

Usage

From the root of this repository:

Native

cargo xtask integration-test local

Virtualized

cargo xtask integration-test vm --cache-dir <CACHE_DIR> <KERNEL_IMAGE>...

Writing an integration test

Tests should follow these guidelines:

  • Rust eBPF code should live in integration-ebpf/${NAME}.rs and included in integration-ebpf/Cargo.toml and integration-test/src/lib.rs using include_bytes_aligned!.
  • C eBPF code should live in integration-test/bpf/${NAME}.bpf.c. It should be added to the list of files in integration-test/build.rs and the list of constants in integration-test/src/lib.rs using include_bytes_aligned!.
  • Tests should be added to integration-test/tests.
  • You may add a new module, or use an existing one.
  • Test functions should not return anyhow::Result<()> since this produces errors without stack traces. Prefer to panic! instead.