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: &notExitError{
    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  }