...

Source file src/github.com/cilium/ebpf/internal/vdso_test.go

Documentation: github.com/cilium/ebpf/internal

     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  }
    75  

View as plain text