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
Andrew Werner 79c9489a4f integration-test: attach uprobes to self
For unclear reasons, two of the integration tests related to uprobes
were resolving a symbol in libc. The integration-test binary can be
built statically, in which case it would not load or reference libc.
Statically linking the integration tests and running them in a VM
without a userland is a convenient mechanism to exercise the tests
against different kernel versions.

The fact that the statically linked integration-test binary does not
load libc is not the only reason these tests failed in such an
environment. In fact, the logic to look in the process's memory
maps was not running (because no pid was being passed).

Separate logic to determine which object file to use when attempting
to resolve a symbol for attaching a uprobe changes its behavior based
on whether that target is an absolute path. If the target is not an
absolute path, the code searches through the LdSoCache. This cache does
not always exist in linux systems; when an attach call is made with a
relative path target and there is no /etc/ld.so.cache file, the attach
call will fail. This commit does not change that behavior, it merely
sidesteps it.
1 year ago
..
integration-ebpf integration-test: Add test for 2 progs in same section 1 year ago
integration-test integration-test: attach uprobes to self 1 year ago
.gitignore test: Replace RTF with Rust 2 years ago
README.md Add links iterator 1 year ago
cloud-localds integration-tests: run on macos to get nested virtualization 2 years ago
run.sh Add links iterator 1 year 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

Linux

To run locally all you need is:

  1. Rust nightly
  2. cargo install bpf-linker

Other OSs

  1. A POSIX shell
  2. rustup target add x86_64-unknown-linux-musl
  3. cargo install bpf-linker
  4. Install qemu and cloud-init-utils package - or any package that provides cloud-localds

Usage

From the root of this repository:

Native

cargo xtask integration-test

Virtualized

mkdir -p integration-test-binaries
cargo xtask build-integration-test | xargs -I % cp % integration-test-binaries
./test/run.sh integration-test-binaries

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.