diff --git a/syscalls.go b/syscalls.go index c3cc523f2..ef484bf05 100644 --- a/syscalls.go +++ b/syscalls.go @@ -357,10 +357,9 @@ func wrapObjError(err error) error { return nil } if errors.Is(err, unix.ENOENT) { - return fmt.Errorf("%w", ErrNotExist) + err = ErrNotExist } - - return errors.New(err.Error()) + return fmt.Errorf("%w", err) } func wrapMapError(err error) error { diff --git a/syscalls_test.go b/syscalls_test.go index 45c54212b..be509c413 100644 --- a/syscalls_test.go +++ b/syscalls_test.go @@ -1,10 +1,12 @@ package ebpf import ( + "errors" "strings" "testing" "github.com/cilium/ebpf/internal/testutils" + "golang.org/x/sys/unix" ) func TestObjNameCharacters(t *testing.T) { @@ -23,6 +25,22 @@ func TestObjNameCharacters(t *testing.T) { } } +func TestWrapObjError(t *testing.T) { + customError := errors.New("custom error for test") + for inErr, outErr := range map[error]error{ + unix.ENOENT: ErrNotExist, + unix.EPERM: unix.EPERM, + unix.EACCES: unix.EACCES, + unix.ENOANO: unix.ENOANO, // dummy error -- never actually returned + customError: customError, + } { + gotErr := wrapObjError(inErr) + if !errors.Is(gotErr, outErr) { + t.Errorf("wrapObjError(%v) doesn't wrap %v: got %v", inErr, outErr, gotErr) + } + } +} + func TestHaveBatchAPI(t *testing.T) { testutils.CheckFeatureTest(t, haveBatchAPI) }