From 559fe436657bf68f83718548c02cdcd6e93e6add Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Sat, 4 Dec 2021 10:20:26 +0900 Subject: [PATCH] nixos/tests: add bpf test test bcc and bpftrace briefly --- nixos/tests/all-tests.nix | 1 + nixos/tests/bpf.nix | 25 +++++++++++++++++++++ pkgs/os-specific/linux/bcc/default.nix | 6 ++++- pkgs/os-specific/linux/bpftrace/default.nix | 5 +++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 nixos/tests/bpf.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 1ff1b8d5864..d67cfea1164 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -44,6 +44,7 @@ in boot-stage1 = handleTest ./boot-stage1.nix {}; borgbackup = handleTest ./borgbackup.nix {}; botamusique = handleTest ./botamusique.nix {}; + bpf = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bpf.nix {}; btrbk = handleTest ./btrbk.nix {}; buildbot = handleTest ./buildbot.nix {}; buildkite-agents = handleTest ./buildkite-agents.nix {}; diff --git a/nixos/tests/bpf.nix b/nixos/tests/bpf.nix new file mode 100644 index 00000000000..233c7dab1ee --- /dev/null +++ b/nixos/tests/bpf.nix @@ -0,0 +1,25 @@ +import ./make-test-python.nix ({ pkgs, ... }: { + name = "bpf"; + meta.maintainers = with pkgs.lib.maintainers; [ martinetd ]; + + machine = { pkgs, ... }: { + programs.bcc.enable = true; + environment.systemPackages = with pkgs; [ bpftrace ]; + }; + + testScript = '' + ## bcc + # syscount -d 1 stops 1s after probe started so is good for that + print(machine.succeed("syscount -d 1")) + + ## bpftrace + # list probes + machine.succeed("bpftrace -l") + # simple BEGIN probe (user probe on bpftrace itself) + print(machine.succeed("bpftrace -e 'BEGIN { print(\"ok\"); exit(); }'")) + # tracepoint + print(machine.succeed("bpftrace -e 'tracepoint:syscalls:sys_enter_* { print(probe); exit(); }'")) + # kprobe + print(machine.succeed("bpftrace -e 'kprobe:schedule { print(probe); exit() }'")) + ''; +}) diff --git a/pkgs/os-specific/linux/bcc/default.nix b/pkgs/os-specific/linux/bcc/default.nix index 7033329b9b3..c87740ed021 100644 --- a/pkgs/os-specific/linux/bcc/default.nix +++ b/pkgs/os-specific/linux/bcc/default.nix @@ -1,7 +1,7 @@ { lib, stdenv, fetchFromGitHub , makeWrapper, cmake, llvmPackages , flex, bison, elfutils, python, luajit, netperf, iperf, libelf -, bash, libbpf +, bash, libbpf, nixosTests }: python.pkgs.buildPythonApplication rec { @@ -69,6 +69,10 @@ python.pkgs.buildPythonApplication rec { wrapPythonProgramsIn "$out/share/bcc/tools" "$out $pythonPath" ''; + passthru.tests = { + bpf = nixosTests.bpf; + }; + meta = with lib; { description = "Dynamic Tracing Tools for Linux"; homepage = "https://iovisor.github.io/bcc/"; diff --git a/pkgs/os-specific/linux/bpftrace/default.nix b/pkgs/os-specific/linux/bpftrace/default.nix index e737a4f1f37..b69514e8080 100644 --- a/pkgs/os-specific/linux/bpftrace/default.nix +++ b/pkgs/os-specific/linux/bpftrace/default.nix @@ -3,6 +3,7 @@ , llvmPackages, elfutils , libelf, libbfd, libbpf, libopcodes, bcc , cereal, asciidoctor +, nixosTests }: stdenv.mkDerivation rec { @@ -43,6 +44,10 @@ stdenv.mkDerivation rec { outputs = [ "out" "man" ]; + passthru.tests = { + bpf = nixosTests.bpf; + }; + meta = with lib; { description = "High-level tracing language for Linux eBPF"; homepage = "https://github.com/iovisor/bpftrace";