github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/cmd/controller/state/imagescan/errors_test.go (about) 1 package imagescan 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestIsPrivateImageErr(t *testing.T) { 11 tests := []struct { 12 name string 13 err error 14 expectedPrivate bool 15 }{ 16 {name: "unauthorized upper case", err: errors.New("can't get image: UNAUTHORIZED image"), expectedPrivate: true}, 17 {name: "unauthorized pascal case", err: errors.New("can't get image: Unauthorized image"), expectedPrivate: true}, 18 {name: "manifest_unknown", err: errors.New("can't get image: MANIFEST_UNKNOWN image"), expectedPrivate: true}, 19 {name: "denied", err: errors.New("can't get image: DENIED image"), expectedPrivate: true}, 20 {name: "connection refused", err: errors.New("can't get image: connection refused image"), expectedPrivate: true}, 21 {name: "context canceled", err: errors.New("can't get image: context canceled"), expectedPrivate: false}, 22 } 23 24 for _, test := range tests { 25 t.Run(test.name, func(t *testing.T) { 26 r := require.New(t) 27 r.Equal(test.expectedPrivate, isPrivateImageError(test.err)) 28 }) 29 } 30 } 31 32 func TestParseErrorFromLog(t *testing.T) { 33 t.Run("PrivateImageError", func(t *testing.T) { 34 rawErr := errors.New(`time="2023-11-03T12:34:56Z" level=error msg="unauthorized: authentication required" component=image-scan`) 35 result := parseErrorFromLog(rawErr) 36 if !errors.Is(result, errPrivateImage) { 37 t.Errorf("Expected %v, but got %v", errPrivateImage, result) 38 } 39 }) 40 41 t.Run("HostFSError", func(t *testing.T) { 42 rawErr := errors.New(`time="2023-11-03T12:34:56Z" level=error msg="no such file or directory" component=image-scan`) 43 result := parseErrorFromLog(rawErr) 44 if !errors.Is(result, errImageScanLayerNotFound) { 45 t.Errorf("Expected %v, but got %v", errImageScanLayerNotFound, result) 46 } 47 }) 48 49 t.Run("LogsWithErrors", func(t *testing.T) { 50 expectedErr := errors.New(`An error occurred`) 51 rawErr := errors.New(`time="2023-11-03T12:34:56Z" level=error msg="An error occurred" component=image-scan`) 52 result := parseErrorFromLog(rawErr) 53 require.EqualError(t, expectedErr, result.Error()) 54 }) 55 56 t.Run("LogsWithoutErrors", func(t *testing.T) { 57 rawErr := errors.New(`time="2023-11-03T12:34:56Z" level=info msg="No error occurred" component=image-scan`) 58 result := parseErrorFromLog(rawErr) 59 if !errors.Is(result, rawErr) { 60 t.Errorf("Expected the original error, but got %v", result) 61 } 62 }) 63 64 t.Run("LogWithUnknownError", func(t *testing.T) { 65 expectedErr := errors.New(`who knows which error`) 66 rawErr := errors.New(`scan job failed: time="2023-11-01T10:17:27Z" level=info msg="running image scan job, version=local, commit=undefined" component=imagescan_job 67 time="2023-11-01T10:17:27Z" level=info msg="collecting artifacts for image 'test/service:todoapp-3(docker.io/test/service@sha256:a56d1aba98ea532b3031b09d118f420a03a2e3f09eb2d5d6a81d906435e864d2)', mode=remote" component=imagescan_job 68 time="2023-11-01T10:17:27Z" level=fatal msg="who knows which error" component=imagescan_job`) 69 result := parseErrorFromLog(rawErr) 70 require.EqualError(t, expectedErr, result.Error()) 71 }) 72 }