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  }