75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
package internal
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestAuxvVDSOMemoryAddress(t *testing.T) {
|
|
av, err := os.Open("../testdata/auxv.bin")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { av.Close() })
|
|
|
|
addr, err := vdsoMemoryAddress(av)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expected := uint64(0x7ffd377e5000)
|
|
if addr != expected {
|
|
t.Errorf("Expected vDSO memory address %x, got %x", expected, addr)
|
|
}
|
|
}
|
|
|
|
func TestAuxvNoVDSO(t *testing.T) {
|
|
// Copy of auxv.bin with the vDSO pointer removed.
|
|
av, err := os.Open("../testdata/auxv_no_vdso.bin")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { av.Close() })
|
|
|
|
_, err = vdsoMemoryAddress(av)
|
|
if want, got := errAuxvNoVDSO, err; !errors.Is(got, want) {
|
|
t.Fatalf("expected error '%v', got: %v", want, got)
|
|
}
|
|
}
|
|
|
|
func TestLinuxVersionCodeEmbedded(t *testing.T) {
|
|
tests := []struct {
|
|
file string
|
|
version uint32
|
|
}{
|
|
{
|
|
"../testdata/vdso.bin",
|
|
uint32(328828), // 5.4.124
|
|
},
|
|
{
|
|
"../testdata/vdso_multiple_notes.bin",
|
|
uint32(328875), // Container Optimized OS v85 with a 5.4.x kernel
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.file, func(t *testing.T) {
|
|
vdso, err := os.Open(test.file)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer vdso.Close()
|
|
|
|
vc, err := vdsoLinuxVersionCode(vdso)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if vc != test.version {
|
|
t.Errorf("Expected version code %d, got %d", test.version, vc)
|
|
}
|
|
})
|
|
}
|
|
}
|