All checks were successful
		
		
	
	Test / Hakurei (race detector) (push) Successful in 5m17s
				
			Test / Flake checks (push) Successful in 1m46s
				
			Test / Create distribution (push) Successful in 35s
				
			Test / Sandbox (push) Successful in 2m18s
				
			Test / Hakurei (push) Successful in 3m28s
				
			Test / Hpkg (push) Successful in 4m25s
				
			Test / Sandbox (race detector) (push) Successful in 4m35s
				
			The container test suite has always been somewhat inadequate due to the inability of coverage tooling to reach into containers. This has become an excuse for not testing non-container code as well, which lead to the general lack of confidence when working with container code. This change aims to be one of many to address that to some extent. Signed-off-by: Ophestra <cat@gensokyo.uk>
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package container
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"syscall"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestGetSetOutput(t *testing.T) {
 | |
| 	{
 | |
| 		out := GetOutput()
 | |
| 		t.Cleanup(func() { SetOutput(out) })
 | |
| 	}
 | |
| 
 | |
| 	t.Run("default", func(t *testing.T) {
 | |
| 		SetOutput(new(stubOutput))
 | |
| 		if v, ok := GetOutput().(*DefaultMsg); ok {
 | |
| 			t.Fatalf("SetOutput: got unexpected output %#v", v)
 | |
| 		}
 | |
| 		SetOutput(nil)
 | |
| 		if _, ok := GetOutput().(*DefaultMsg); !ok {
 | |
| 			t.Fatalf("SetOutput: got unexpected output %#v", GetOutput())
 | |
| 		}
 | |
| 	})
 | |
| 
 | |
| 	t.Run("stub", func(t *testing.T) {
 | |
| 		SetOutput(new(stubOutput))
 | |
| 		if _, ok := GetOutput().(*stubOutput); !ok {
 | |
| 			t.Fatalf("SetOutput: got unexpected output %#v", GetOutput())
 | |
| 		}
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestWrapErr(t *testing.T) {
 | |
| 	{
 | |
| 		out := GetOutput()
 | |
| 		t.Cleanup(func() { SetOutput(out) })
 | |
| 	}
 | |
| 
 | |
| 	var wrapFp *func(error, ...any) error
 | |
| 	s := new(stubOutput)
 | |
| 	SetOutput(s)
 | |
| 	wrapFp = &s.wrapF
 | |
| 
 | |
| 	testCases := []struct {
 | |
| 		name    string
 | |
| 		f       func(t *testing.T)
 | |
| 		wantErr error
 | |
| 		wantA   []any
 | |
| 	}{
 | |
| 		{"suffix nil", func(t *testing.T) {
 | |
| 			if err := wrapErrSuffix(nil, "\x00"); err != nil {
 | |
| 				t.Errorf("wrapErrSuffix: %v", err)
 | |
| 			}
 | |
| 		}, nil, nil},
 | |
| 		{"suffix val", func(t *testing.T) {
 | |
| 			if err := wrapErrSuffix(syscall.ENOTRECOVERABLE, "\x00\x00"); err != syscall.ENOTRECOVERABLE {
 | |
| 				t.Errorf("wrapErrSuffix: %v", err)
 | |
| 			}
 | |
| 		}, syscall.ENOTRECOVERABLE, []any{"\x00\x00", syscall.ENOTRECOVERABLE}},
 | |
| 		{"self nil", func(t *testing.T) {
 | |
| 			if err := wrapErrSelf(nil); err != nil {
 | |
| 				t.Errorf("wrapErrSelf: %v", err)
 | |
| 			}
 | |
| 		}, nil, nil},
 | |
| 		{"self val", func(t *testing.T) {
 | |
| 			if err := wrapErrSelf(syscall.ENOTRECOVERABLE); err != syscall.ENOTRECOVERABLE {
 | |
| 				t.Errorf("wrapErrSelf: %v", err)
 | |
| 			}
 | |
| 		}, syscall.ENOTRECOVERABLE, []any{"state not recoverable"}},
 | |
| 	}
 | |
| 
 | |
| 	for _, tc := range testCases {
 | |
| 		t.Run(tc.name, func(t *testing.T) {
 | |
| 			var (
 | |
| 				gotErr error
 | |
| 				gotA   []any
 | |
| 			)
 | |
| 			*wrapFp = func(err error, a ...any) error { gotErr = err; gotA = a; return err }
 | |
| 
 | |
| 			tc.f(t)
 | |
| 			if gotErr != tc.wantErr {
 | |
| 				t.Errorf("WrapErr: err = %v, want %v", gotErr, tc.wantErr)
 | |
| 			}
 | |
| 
 | |
| 			if !reflect.DeepEqual(gotA, tc.wantA) {
 | |
| 				t.Errorf("WrapErr: a = %v, want %v", gotA, tc.wantA)
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type stubOutput struct {
 | |
| 	wrapF func(error, ...any) error
 | |
| }
 | |
| 
 | |
| func (*stubOutput) IsVerbose() bool            { panic("unreachable") }
 | |
| func (*stubOutput) Verbose(...any)             { panic("unreachable") }
 | |
| func (*stubOutput) Verbosef(string, ...any)    { panic("unreachable") }
 | |
| func (*stubOutput) PrintBaseErr(error, string) { panic("unreachable") }
 | |
| func (*stubOutput) Suspend()                   { panic("unreachable") }
 | |
| func (*stubOutput) Resume() bool               { panic("unreachable") }
 | |
| func (*stubOutput) BeforeExit()                { panic("unreachable") }
 | |
| 
 | |
| func (s *stubOutput) WrapErr(err error, v ...any) error {
 | |
| 	if s.wrapF == nil {
 | |
| 		panic("unreachable")
 | |
| 	}
 | |
| 	return s.wrapF(err, v...)
 | |
| }
 |