github.com/tetratelabs/wazero@v1.2.1/sys/error_test.go (about) 1 package sys 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 "github.com/tetratelabs/wazero/internal/testing/require" 9 ) 10 11 type notExitError struct { 12 exitCode uint32 13 } 14 15 func (e *notExitError) Error() string { 16 return "not exit error" 17 } 18 19 func TestIs(t *testing.T) { 20 err := NewExitError(2) 21 tests := []struct { 22 name string 23 target error 24 matches bool 25 }{ 26 { 27 name: "same object", 28 target: err, 29 matches: true, 30 }, 31 { 32 name: "different exit code", 33 target: NewExitError(1), 34 matches: false, 35 }, 36 { 37 name: "different type", 38 target: ¬ExitError{ 39 exitCode: 2, 40 }, 41 matches: false, 42 }, 43 } 44 45 for _, tt := range tests { 46 tc := tt 47 t.Run(tc.name, func(t *testing.T) { 48 matches := errors.Is(err, tc.target) 49 require.Equal(t, tc.matches, matches) 50 }) 51 } 52 } 53 54 func TestExitError_Error(t *testing.T) { 55 t.Run("timeout", func(t *testing.T) { 56 err := NewExitError(ExitCodeDeadlineExceeded) 57 require.Equal(t, ExitCodeDeadlineExceeded, err.ExitCode()) 58 require.EqualError(t, err, "module closed with context deadline exceeded") 59 require.ErrorIs(t, err, context.DeadlineExceeded, "exit code context deadline exceeded should work") 60 }) 61 t.Run("cancel", func(t *testing.T) { 62 err := NewExitError(ExitCodeContextCanceled) 63 require.Equal(t, ExitCodeContextCanceled, err.ExitCode()) 64 require.EqualError(t, err, "module closed with context canceled") 65 require.ErrorIs(t, err, context.Canceled, "exit code context canceled should work") 66 }) 67 t.Run("normal", func(t *testing.T) { 68 err := NewExitError(123) 69 require.Equal(t, uint32(123), err.ExitCode()) 70 require.EqualError(t, err, "module closed with exit_code(123)") 71 }) 72 }