github.com/kubeshark/ebpf@v0.9.2/internal/testutils/feature.go (about) 1 package testutils 2 3 import ( 4 "errors" 5 "os" 6 "testing" 7 8 "github.com/kubeshark/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 }