...

Source file src/github.com/cilium/ebpf/internal/testutils/feature.go

Documentation: github.com/cilium/ebpf/internal/testutils

     1  package testutils
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/cilium/ebpf/internal"
     9  )
    10  
    11  func MustKernelVersion() internal.Version {
    12  	v, err := internal.KernelVersion()
    13  	if err != nil {
    14  		panic(err)
    15  	}
    16  	return v
    17  }
    18  
    19  func CheckFeatureTest(t *testing.T, fn func() error) {
    20  	t.Helper()
    21  
    22  	err := fn()
    23  	if err == nil {
    24  		return
    25  	}
    26  
    27  	var ufe *internal.UnsupportedFeatureError
    28  	if errors.As(err, &ufe) {
    29  		checkKernelVersion(t, ufe)
    30  	} else {
    31  		t.Error("Feature test failed:", err)
    32  	}
    33  }
    34  
    35  func SkipIfNotSupported(tb testing.TB, err error) {
    36  	tb.Helper()
    37  
    38  	if err == internal.ErrNotSupported {
    39  		tb.Fatal("Unwrapped ErrNotSupported")
    40  	}
    41  
    42  	var ufe *internal.UnsupportedFeatureError
    43  	if errors.As(err, &ufe) {
    44  		checkKernelVersion(tb, ufe)
    45  		tb.Skip(ufe.Error())
    46  	}
    47  	if errors.Is(err, internal.ErrNotSupported) {
    48  		tb.Skip(err.Error())
    49  	}
    50  }
    51  
    52  func checkKernelVersion(tb testing.TB, ufe *internal.UnsupportedFeatureError) {
    53  	if ufe.MinimumVersion.Unspecified() {
    54  		return
    55  	}
    56  
    57  	kernelVersion := MustKernelVersion()
    58  	if ufe.MinimumVersion.Less(kernelVersion) {
    59  		tb.Helper()
    60  		tb.Fatalf("Feature '%s' isn't supported even though kernel %s is newer than %s",
    61  			ufe.Name, kernelVersion, ufe.MinimumVersion)
    62  	}
    63  }
    64  
    65  func SkipOnOldKernel(tb testing.TB, minVersion, feature string) {
    66  	tb.Helper()
    67  
    68  	minv, err := internal.NewVersion(minVersion)
    69  	if err != nil {
    70  		tb.Fatalf("Invalid version %s: %s", minVersion, err)
    71  	}
    72  
    73  	if max := os.Getenv("CI_MAX_KERNEL_VERSION"); max != "" {
    74  		maxv, err := internal.NewVersion(max)
    75  		if err != nil {
    76  			tb.Fatalf("Invalid version %q in CI_MAX_KERNEL_VERSION: %s", max, err)
    77  		}
    78  
    79  		if maxv.Less(minv) {
    80  			tb.Fatalf("Test for %s will never execute on CI since %s is the most recent kernel", minv, maxv)
    81  		}
    82  	}
    83  
    84  	if MustKernelVersion().Less(minv) {
    85  		tb.Skipf("Test requires at least kernel %s (due to missing %s)", minv, feature)
    86  	}
    87  }
    88  

View as plain text