summaryrefslogtreecommitdiff
path: root/internal/ior_setup_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-12 22:39:06 +0200
committerPaul Buetow <paul@buetow.org>2026-03-12 22:39:06 +0200
commit13e7970afb3eeac69f82df833f030711e5cf12ec (patch)
tree098c4fb8c5a8c8f27547f03f40c9fee0be63fe35 /internal/ior_setup_test.go
parent1b21e818a69bf73fde3ca60f89d2dc82a79fd605 (diff)
internal: embed BPF object into ior binary
Diffstat (limited to 'internal/ior_setup_test.go')
-rw-r--r--internal/ior_setup_test.go97
1 files changed, 97 insertions, 0 deletions
diff --git a/internal/ior_setup_test.go b/internal/ior_setup_test.go
index 9c8b1b3..9c804c7 100644
--- a/internal/ior_setup_test.go
+++ b/internal/ior_setup_test.go
@@ -1,8 +1,12 @@
package internal
import (
+ "bytes"
"errors"
+ "os"
"testing"
+
+ bpf "github.com/aquasecurity/libbpfgo"
)
func TestSetupBPFModuleErrorWrapsStage(t *testing.T) {
@@ -25,3 +29,96 @@ func TestSetupBPFModuleErrorNil(t *testing.T) {
t.Fatalf("expected nil error passthrough, got %v", err)
}
}
+
+func TestLoadBPFModuleUsesEmbeddedObjectByDefault(t *testing.T) {
+ origFile := newBPFModuleFromFile
+ origBuffer := newBPFModuleFromBuffer
+ origOverride, hadOverride := os.LookupEnv(bpfObjectOverrideEnv)
+ t.Cleanup(func() {
+ newBPFModuleFromFile = origFile
+ newBPFModuleFromBuffer = origBuffer
+ if hadOverride {
+ os.Setenv(bpfObjectOverrideEnv, origOverride)
+ return
+ }
+ os.Unsetenv(bpfObjectOverrideEnv)
+ })
+ os.Unsetenv(bpfObjectOverrideEnv)
+
+ wantErr := errors.New("buffer load failed")
+ newBPFModuleFromFile = func(string) (*bpf.Module, error) {
+ t.Fatal("expected embedded loader, not file loader")
+ return nil, nil
+ }
+
+ var gotBytes []byte
+ var gotName string
+ newBPFModuleFromBuffer = func(data []byte, name string) (*bpf.Module, error) {
+ gotBytes = append([]byte(nil), data...)
+ gotName = name
+ return nil, wantErr
+ }
+
+ module, stage, err := loadBPFModule()
+ if module != nil {
+ t.Fatalf("expected nil module from stubbed loader, got %v", module)
+ }
+ if got, want := stage, "load embedded module"; got != want {
+ t.Fatalf("stage = %q, want %q", got, want)
+ }
+ if !errors.Is(err, wantErr) {
+ t.Fatalf("expected embedded loader error, got %v", err)
+ }
+ if !bytes.Equal(gotBytes, embeddedBPFObject) {
+ t.Fatalf("embedded loader received unexpected object bytes")
+ }
+ if got, want := gotName, embeddedBPFObjectName; got != want {
+ t.Fatalf("embedded loader name = %q, want %q", got, want)
+ }
+}
+
+func TestLoadBPFModuleUsesOverridePathWhenConfigured(t *testing.T) {
+ origFile := newBPFModuleFromFile
+ origBuffer := newBPFModuleFromBuffer
+ origOverride, hadOverride := os.LookupEnv(bpfObjectOverrideEnv)
+ t.Cleanup(func() {
+ newBPFModuleFromFile = origFile
+ newBPFModuleFromBuffer = origBuffer
+ if hadOverride {
+ os.Setenv(bpfObjectOverrideEnv, origOverride)
+ return
+ }
+ os.Unsetenv(bpfObjectOverrideEnv)
+ })
+
+ overridePath := "/tmp/custom-ior.bpf.o"
+ if err := os.Setenv(bpfObjectOverrideEnv, overridePath); err != nil {
+ t.Fatalf("set override env: %v", err)
+ }
+
+ wantErr := errors.New("file load failed")
+ newBPFModuleFromBuffer = func([]byte, string) (*bpf.Module, error) {
+ t.Fatal("expected file loader, not embedded loader")
+ return nil, nil
+ }
+
+ var gotPath string
+ newBPFModuleFromFile = func(path string) (*bpf.Module, error) {
+ gotPath = path
+ return nil, wantErr
+ }
+
+ module, stage, err := loadBPFModule()
+ if module != nil {
+ t.Fatalf("expected nil module from stubbed loader, got %v", module)
+ }
+ if got, want := stage, "load module from override file"; got != want {
+ t.Fatalf("stage = %q, want %q", got, want)
+ }
+ if !errors.Is(err, wantErr) {
+ t.Fatalf("expected override loader error, got %v", err)
+ }
+ if got, want := gotPath, overridePath; got != want {
+ t.Fatalf("override path = %q, want %q", got, want)
+ }
+}