github.com/kubeshop/testkube@v1.17.23/pkg/imageinspector/inspector_test.go (about)

     1  package imageinspector
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/golang/mock/gomock"
     9  	"github.com/stretchr/testify/assert"
    10  	corev1 "k8s.io/api/core/v1"
    11  )
    12  
    13  func TestInspectorInspect(t *testing.T) {
    14  	ctrl := gomock.NewController(t)
    15  	infos := NewMockInfoFetcher(ctrl)
    16  	secrets := NewMockSecretFetcher(ctrl)
    17  	storage1 := NewMockStorageWithTransfer(ctrl)
    18  	storage2 := NewMockStorageWithTransfer(ctrl)
    19  	inspector := NewInspector("default", infos, secrets, storage1, storage2)
    20  
    21  	sec := corev1.Secret{StringData: map[string]string{"foo": "bar"}}
    22  	req := RequestBase{Registry: "regname", Image: "imgname"}
    23  	storage1.EXPECT().Get(gomock.Any(), req).Return(nil, nil)
    24  	storage2.EXPECT().Get(gomock.Any(), req).Return(nil, nil)
    25  	secrets.EXPECT().Get(gomock.Any(), "secname").Return(&sec, nil)
    26  	infos.EXPECT().Fetch(gomock.Any(), req.Registry, req.Image, []corev1.Secret{sec}).Return(&info1, nil)
    27  
    28  	storage1.EXPECT().Store(gomock.Any(), req, info1).Return(nil)
    29  	storage2.EXPECT().Store(gomock.Any(), req, info1).Return(nil)
    30  
    31  	v, err := inspector.Inspect(context.Background(), req.Registry, req.Image, corev1.PullIfNotPresent, []string{"secname"})
    32  	assert.NoError(t, err)
    33  	assert.Equal(t, &info1, v)
    34  
    35  	// Wait until asynchronous storage will be done
    36  	<-time.After(10 * time.Millisecond)
    37  }
    38  
    39  func TestInspectorInspectWithCache(t *testing.T) {
    40  	ctrl := gomock.NewController(t)
    41  	infos := NewMockInfoFetcher(ctrl)
    42  	secrets := NewMockSecretFetcher(ctrl)
    43  	storage1 := NewMockStorageWithTransfer(ctrl)
    44  	storage2 := NewMockStorageWithTransfer(ctrl)
    45  	inspector := NewInspector("default", infos, secrets, storage1, storage2)
    46  
    47  	req := RequestBase{Registry: "regname", Image: "imgname"}
    48  	storage1.EXPECT().Get(gomock.Any(), req).Return(&info1, nil)
    49  
    50  	v, err := inspector.Inspect(context.Background(), req.Registry, req.Image, corev1.PullIfNotPresent, []string{"secname"})
    51  	assert.NoError(t, err)
    52  	assert.Equal(t, &info1, v)
    53  
    54  	// Wait until asynchronous storage will be done
    55  	<-time.After(10 * time.Millisecond)
    56  }