diff options
Diffstat (limited to 'pkg/errors')
-rw-r--r-- | pkg/errors/BUILD | 10 | ||||
-rw-r--r-- | pkg/errors/errors_state_autogen.go | 3 | ||||
-rw-r--r-- | pkg/errors/linuxerr/BUILD | 26 | ||||
-rw-r--r-- | pkg/errors/linuxerr/linuxerr_state_autogen.go | 3 | ||||
-rw-r--r-- | pkg/errors/linuxerr/linuxerr_test.go | 306 |
5 files changed, 6 insertions, 342 deletions
diff --git a/pkg/errors/BUILD b/pkg/errors/BUILD deleted file mode 100644 index 36ea5da0c..000000000 --- a/pkg/errors/BUILD +++ /dev/null @@ -1,10 +0,0 @@ -load("//tools:defs.bzl", "go_library") - -package(licenses = ["notice"]) - -go_library( - name = "errors", - srcs = ["errors.go"], - visibility = ["//:sandbox"], - deps = ["//pkg/abi/linux/errno"], -) diff --git a/pkg/errors/errors_state_autogen.go b/pkg/errors/errors_state_autogen.go new file mode 100644 index 000000000..fd4538438 --- /dev/null +++ b/pkg/errors/errors_state_autogen.go @@ -0,0 +1,3 @@ +// automatically generated by stateify. + +package errors diff --git a/pkg/errors/linuxerr/BUILD b/pkg/errors/linuxerr/BUILD deleted file mode 100644 index 201727780..000000000 --- a/pkg/errors/linuxerr/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("//tools:defs.bzl", "go_library", "go_test") - -package(licenses = ["notice"]) - -go_library( - name = "linuxerr", - srcs = ["linuxerr.go"], - visibility = ["//visibility:public"], - deps = [ - "//pkg/abi/linux/errno", - "//pkg/errors", - "@org_golang_x_sys//unix:go_default_library", - ], -) - -go_test( - name = "linuxerr_test", - srcs = ["linuxerr_test.go"], - deps = [ - ":linuxerr", - "//pkg/abi/linux/errno", - "//pkg/errors", - "//pkg/syserror", - "@org_golang_x_sys//unix:go_default_library", - ], -) diff --git a/pkg/errors/linuxerr/linuxerr_state_autogen.go b/pkg/errors/linuxerr/linuxerr_state_autogen.go new file mode 100644 index 000000000..8106a9d9f --- /dev/null +++ b/pkg/errors/linuxerr/linuxerr_state_autogen.go @@ -0,0 +1,3 @@ +// automatically generated by stateify. + +package linuxerr diff --git a/pkg/errors/linuxerr/linuxerr_test.go b/pkg/errors/linuxerr/linuxerr_test.go deleted file mode 100644 index b03b563c0..000000000 --- a/pkg/errors/linuxerr/linuxerr_test.go +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2018 The gVisor Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package syserror_test - -import ( - "errors" - "io" - "io/fs" - "syscall" - "testing" - - "golang.org/x/sys/unix" - "gvisor.dev/gvisor/pkg/abi/linux/errno" - gErrors "gvisor.dev/gvisor/pkg/errors" - "gvisor.dev/gvisor/pkg/errors/linuxerr" - "gvisor.dev/gvisor/pkg/syserror" -) - -var globalError error - -func BenchmarkAssignUnix(b *testing.B) { - for i := b.N; i > 0; i-- { - globalError = unix.EINVAL - } -} - -func BenchmarkAssignLinuxerr(b *testing.B) { - for i := b.N; i > 0; i-- { - globalError = linuxerr.EINVAL - } -} - -func BenchmarkAssignSyserror(b *testing.B) { - for i := b.N; i > 0; i-- { - globalError = linuxerr.ENOMSG - } -} - -func BenchmarkCompareUnix(b *testing.B) { - globalError = unix.EAGAIN - j := 0 - for i := b.N; i > 0; i-- { - if globalError == unix.EINVAL { - j++ - } - } -} - -func BenchmarkCompareLinuxerr(b *testing.B) { - globalError = linuxerr.E2BIG - j := 0 - for i := b.N; i > 0; i-- { - if globalError == linuxerr.EINVAL { - j++ - } - } -} - -func BenchmarkCompareSyserror(b *testing.B) { - globalError = syserror.EAGAIN - j := 0 - for i := b.N; i > 0; i-- { - if globalError == linuxerr.EACCES { - j++ - } - } -} - -func BenchmarkSwitchUnix(b *testing.B) { - globalError = unix.EPERM - j := 0 - for i := b.N; i > 0; i-- { - switch globalError { - case unix.EINVAL: - j++ - case unix.EINTR: - j += 2 - case unix.EAGAIN: - j += 3 - } - } -} - -func BenchmarkSwitchLinuxerr(b *testing.B) { - globalError = linuxerr.EPERM - j := 0 - for i := b.N; i > 0; i-- { - switch globalError { - case linuxerr.EINVAL: - j++ - case linuxerr.EINTR: - j += 2 - case linuxerr.EAGAIN: - j += 3 - } - } -} - -func BenchmarkSwitchSyserror(b *testing.B) { - globalError = linuxerr.EPERM - j := 0 - for i := b.N; i > 0; i-- { - switch globalError { - case linuxerr.EACCES: - j++ - case syserror.EINTR: - j += 2 - case syserror.EAGAIN: - j += 3 - } - } -} - -func BenchmarkReturnUnix(b *testing.B) { - var localError error - f := func() error { - return unix.EINVAL - } - for i := b.N; i > 0; i-- { - localError = f() - } - if localError != nil { - return - } -} - -func BenchmarkReturnLinuxerr(b *testing.B) { - var localError error - f := func() error { - return linuxerr.EINVAL - } - for i := b.N; i > 0; i-- { - localError = f() - } - if localError != nil { - return - } -} - -func BenchmarkConvertUnixLinuxerr(b *testing.B) { - var localError error - for i := b.N; i > 0; i-- { - localError = linuxerr.ErrorFromErrno(errno.Errno(unix.EINVAL)) - } - if localError != nil { - return - } -} - -func BenchmarkConvertUnixLinuxerrZero(b *testing.B) { - var localError error - for i := b.N; i > 0; i-- { - localError = linuxerr.ErrorFromErrno(errno.Errno(0)) - } - if localError != nil { - return - } -} - -type translationTestTable struct { - fn string - errIn error - syscallErrorIn unix.Errno - expectedBool bool - expectedTranslation unix.Errno -} - -func TestErrorTranslation(t *testing.T) { - myError := errors.New("My test error") - myError2 := errors.New("Another test error") - testTable := []translationTestTable{ - {"TranslateError", myError, 0, false, 0}, - {"TranslateError", myError2, 0, false, 0}, - {"AddErrorTranslation", myError, unix.EAGAIN, true, 0}, - {"AddErrorTranslation", myError, unix.EAGAIN, false, 0}, - {"AddErrorTranslation", myError, unix.EPERM, false, 0}, - {"TranslateError", myError, 0, true, unix.EAGAIN}, - {"TranslateError", myError2, 0, false, 0}, - {"AddErrorTranslation", myError2, unix.EPERM, true, 0}, - {"AddErrorTranslation", myError2, unix.EPERM, false, 0}, - {"AddErrorTranslation", myError2, unix.EAGAIN, false, 0}, - {"TranslateError", myError, 0, true, unix.EAGAIN}, - {"TranslateError", myError2, 0, true, unix.EPERM}, - } - for _, tt := range testTable { - switch tt.fn { - case "TranslateError": - err, ok := syserror.TranslateError(tt.errIn) - if ok != tt.expectedBool { - t.Fatalf("%v(%v) => %v expected %v", tt.fn, tt.errIn, ok, tt.expectedBool) - } else if err != tt.expectedTranslation { - t.Fatalf("%v(%v) (error) => %v expected %v", tt.fn, tt.errIn, err, tt.expectedTranslation) - } - case "AddErrorTranslation": - ok := syserror.AddErrorTranslation(tt.errIn, tt.syscallErrorIn) - if ok != tt.expectedBool { - t.Fatalf("%v(%v) => %v expected %v", tt.fn, tt.errIn, ok, tt.expectedBool) - } - default: - t.Fatalf("Unknown function %v", tt.fn) - } - } -} - -func TestSyscallErrnoToErrors(t *testing.T) { - for _, tc := range []struct { - errno syscall.Errno - err *gErrors.Error - }{ - {errno: syscall.EACCES, err: linuxerr.EACCES}, - {errno: syscall.EAGAIN, err: linuxerr.EAGAIN}, - {errno: syscall.EBADF, err: linuxerr.EBADF}, - {errno: syscall.EBUSY, err: linuxerr.EBUSY}, - {errno: syscall.EDOM, err: linuxerr.EDOM}, - {errno: syscall.EEXIST, err: linuxerr.EEXIST}, - {errno: syscall.EFAULT, err: linuxerr.EFAULT}, - {errno: syscall.EFBIG, err: linuxerr.EFBIG}, - {errno: syscall.EINTR, err: linuxerr.EINTR}, - {errno: syscall.EINVAL, err: linuxerr.EINVAL}, - {errno: syscall.EIO, err: linuxerr.EIO}, - {errno: syscall.ENOTDIR, err: linuxerr.ENOTDIR}, - {errno: syscall.ENOTTY, err: linuxerr.ENOTTY}, - {errno: syscall.EPERM, err: linuxerr.EPERM}, - {errno: syscall.EPIPE, err: linuxerr.EPIPE}, - {errno: syscall.ESPIPE, err: linuxerr.ESPIPE}, - {errno: syscall.EWOULDBLOCK, err: linuxerr.EAGAIN}, - } { - t.Run(tc.errno.Error(), func(t *testing.T) { - e := linuxerr.ErrorFromErrno(errno.Errno(tc.errno)) - if e != tc.err { - t.Fatalf("Mismatch errors: want: %+v (%d) got: %+v %d", tc.err, tc.err.Errno(), e, e.Errno()) - } - }) - } -} - -// TestEqualsMethod tests that the Equals method correctly compares syerror, -// unix.Errno and linuxerr. -// TODO (b/34162363): Remove this. -func TestEqualsMethod(t *testing.T) { - for _, tc := range []struct { - name string - linuxErr []*gErrors.Error - err []error - equal bool - }{ - { - name: "compare nil", - linuxErr: []*gErrors.Error{nil, linuxerr.NOERROR}, - err: []error{nil, linuxerr.NOERROR, unix.Errno(0)}, - equal: true, - }, - { - name: "linuxerr nil error not", - linuxErr: []*gErrors.Error{nil, linuxerr.NOERROR}, - err: []error{unix.Errno(1), linuxerr.EPERM, linuxerr.EACCES}, - equal: false, - }, - { - name: "linuxerr not nil error nil", - linuxErr: []*gErrors.Error{linuxerr.ENOENT}, - err: []error{nil, unix.Errno(0), linuxerr.NOERROR}, - equal: false, - }, - { - name: "equal errors", - linuxErr: []*gErrors.Error{linuxerr.ESRCH}, - err: []error{linuxerr.ESRCH, syserror.ESRCH, unix.Errno(linuxerr.ESRCH.Errno())}, - equal: true, - }, - { - name: "unequal errors", - linuxErr: []*gErrors.Error{linuxerr.ENOENT}, - err: []error{linuxerr.ESRCH, syserror.ESRCH, unix.Errno(linuxerr.ESRCH.Errno())}, - equal: false, - }, - { - name: "other error", - linuxErr: []*gErrors.Error{nil, linuxerr.NOERROR, linuxerr.E2BIG, linuxerr.EINVAL}, - err: []error{fs.ErrInvalid, io.EOF}, - equal: false, - }, - } { - t.Run(tc.name, func(t *testing.T) { - for _, le := range tc.linuxErr { - for _, e := range tc.err { - if linuxerr.Equals(le, e) != tc.equal { - t.Fatalf("Expected %t from Equals method for linuxerr: %s %T and error: %s %T", tc.equal, le, le, e, e) - } - } - } - }) - } -} |