github.com/kubeshark/ebpf@v0.9.2/btf/core_reloc_test.go (about) 1 package btf_test 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "strings" 8 "testing" 9 10 "github.com/kubeshark/ebpf" 11 "github.com/kubeshark/ebpf/btf" 12 "github.com/kubeshark/ebpf/internal" 13 "github.com/kubeshark/ebpf/internal/testutils" 14 ) 15 16 func TestCORERelocationLoad(t *testing.T) { 17 testutils.Files(t, testutils.Glob(t, "testdata/relocs-*.elf"), func(t *testing.T, file string) { 18 fh, err := os.Open(file) 19 if err != nil { 20 t.Fatal(err) 21 } 22 defer fh.Close() 23 24 spec, err := ebpf.LoadCollectionSpecFromReader(fh) 25 if err != nil { 26 t.Fatal(err) 27 } 28 29 if spec.ByteOrder != internal.NativeEndian { 30 return 31 } 32 33 for _, progSpec := range spec.Programs { 34 t.Run(progSpec.Name, func(t *testing.T) { 35 if _, err := fh.Seek(0, io.SeekStart); err != nil { 36 t.Fatal(err) 37 } 38 39 prog, err := ebpf.NewProgramWithOptions(progSpec, ebpf.ProgramOptions{ 40 KernelTypes: progSpec.BTF, 41 }) 42 43 if strings.HasPrefix(progSpec.Name, "err_") { 44 if err == nil { 45 prog.Close() 46 t.Fatal("Expected an error") 47 } 48 t.Log("Got expected error:", err) 49 return 50 } 51 52 if err != nil { 53 t.Fatal("Load program:", err) 54 } 55 defer prog.Close() 56 57 ret, _, err := prog.Test(make([]byte, 14)) 58 testutils.SkipIfNotSupported(t, err) 59 if err != nil { 60 t.Fatal("Error when running:", err) 61 } 62 63 if ret != 0 { 64 t.Error("Assertion failed on line", ret) 65 } 66 }) 67 } 68 }) 69 } 70 71 func TestCORERelocationRead(t *testing.T) { 72 testutils.Files(t, testutils.Glob(t, "testdata/relocs_read-*.elf"), func(t *testing.T, file string) { 73 spec, err := ebpf.LoadCollectionSpec(file) 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 if spec.ByteOrder != internal.NativeEndian { 79 return 80 } 81 82 targetFile := fmt.Sprintf("testdata/relocs_read_tgt-%s.elf", internal.ClangEndian) 83 targetSpec, err := btf.LoadSpec(targetFile) 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 for _, progSpec := range spec.Programs { 89 t.Run(progSpec.Name, func(t *testing.T) { 90 prog, err := ebpf.NewProgramWithOptions(progSpec, ebpf.ProgramOptions{ 91 KernelTypes: targetSpec, 92 }) 93 testutils.SkipIfNotSupported(t, err) 94 if err != nil { 95 t.Fatal("Load program:", err) 96 } 97 defer prog.Close() 98 99 ret, _, err := prog.Test(make([]byte, 14)) 100 testutils.SkipIfNotSupported(t, err) 101 if err != nil { 102 t.Fatal("Error when running:", err) 103 } 104 105 if ret != 0 { 106 t.Error("Assertion failed on line", ret) 107 } 108 }) 109 } 110 }) 111 }