github.com/cilium/ebpf@v0.10.0/internal/vdso_test.go (about) 1 package internal 2 3 import ( 4 "errors" 5 "os" 6 "testing" 7 ) 8 9 func TestAuxvVDSOMemoryAddress(t *testing.T) { 10 av, err := os.Open("../testdata/auxv.bin") 11 if err != nil { 12 t.Fatal(err) 13 } 14 t.Cleanup(func() { av.Close() }) 15 16 addr, err := vdsoMemoryAddress(av) 17 if err != nil { 18 t.Fatal(err) 19 } 20 21 expected := uint64(0x7ffd377e5000) 22 if addr != expected { 23 t.Errorf("Expected vDSO memory address %x, got %x", expected, addr) 24 } 25 } 26 27 func TestAuxvNoVDSO(t *testing.T) { 28 // Copy of auxv.bin with the vDSO pointer removed. 29 av, err := os.Open("../testdata/auxv_no_vdso.bin") 30 if err != nil { 31 t.Fatal(err) 32 } 33 t.Cleanup(func() { av.Close() }) 34 35 _, err = vdsoMemoryAddress(av) 36 if want, got := errAuxvNoVDSO, err; !errors.Is(got, want) { 37 t.Fatalf("expected error '%v', got: %v", want, got) 38 } 39 } 40 41 func TestLinuxVersionCodeEmbedded(t *testing.T) { 42 tests := []struct { 43 file string 44 version uint32 45 }{ 46 { 47 "../testdata/vdso.bin", 48 uint32(328828), // 5.4.124 49 }, 50 { 51 "../testdata/vdso_multiple_notes.bin", 52 uint32(328875), // Container Optimized OS v85 with a 5.4.x kernel 53 }, 54 } 55 56 for _, test := range tests { 57 t.Run(test.file, func(t *testing.T) { 58 vdso, err := os.Open(test.file) 59 if err != nil { 60 t.Fatal(err) 61 } 62 defer vdso.Close() 63 64 vc, err := vdsoLinuxVersionCode(vdso) 65 if err != nil { 66 t.Fatal(err) 67 } 68 69 if vc != test.version { 70 t.Errorf("Expected version code %d, got %d", test.version, vc) 71 } 72 }) 73 } 74 }