github.com/kubeshop/testkube@v1.17.23/pkg/imageinspector/memorystorage_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  )
    11  
    12  var (
    13  	time1     = time.Now().UTC().Add(-4 * time.Minute)
    14  	time2     = time.Now().UTC().Add(-2 * time.Minute)
    15  	time3     = time.Now().UTC()
    16  	noInfoPtr *Info
    17  	info1     = Info{
    18  		FetchedAt:  time1,
    19  		Entrypoint: []string{"en", "try"},
    20  		Cmd:        []string{"c", "md"},
    21  		Shell:      "/bin/shell",
    22  		WorkingDir: "some-wd",
    23  	}
    24  	info2 = Info{
    25  		FetchedAt:  time2,
    26  		Entrypoint: []string{"en", "try2"},
    27  		Cmd:        []string{"c", "md2"},
    28  		Shell:      "/bin/shell",
    29  		WorkingDir: "some-wd",
    30  	}
    31  	info3 = Info{
    32  		FetchedAt:  time3,
    33  		Entrypoint: []string{"en", "try3"},
    34  		Cmd:        []string{"c", "md3"},
    35  		Shell:      "/bin/shell",
    36  		WorkingDir: "some-wd",
    37  	}
    38  	req1 = RequestBase{
    39  		Registry: "foo",
    40  		Image:    "bar",
    41  	}
    42  	req1Copy = RequestBase{
    43  		Registry: "foo",
    44  		Image:    "bar",
    45  	}
    46  	req2 = RequestBase{
    47  		Registry: "foo2",
    48  		Image:    "bar2",
    49  	}
    50  	req3 = RequestBase{
    51  		Registry: "foo3",
    52  		Image:    "bar3",
    53  	}
    54  )
    55  
    56  func TestMemoryStorageGetAndStore(t *testing.T) {
    57  	m := NewMemoryStorage()
    58  	err1 := m.Store(context.Background(), req1, info1)
    59  	err2 := m.Store(context.Background(), req2, info2)
    60  	v1, gErr1 := m.Get(context.Background(), req1)
    61  	v2, gErr2 := m.Get(context.Background(), req2)
    62  	v3, gErr3 := m.Get(context.Background(), req1Copy)
    63  	v4, gErr4 := m.Get(context.Background(), req3)
    64  	assert.NoError(t, err1)
    65  	assert.NoError(t, err2)
    66  	assert.NoError(t, gErr1)
    67  	assert.NoError(t, gErr2)
    68  	assert.NoError(t, gErr3)
    69  	assert.NoError(t, gErr4)
    70  	assert.Equal(t, &info1, v1)
    71  	assert.Equal(t, &info2, v2)
    72  	assert.Equal(t, &info1, v3)
    73  	assert.Equal(t, noInfoPtr, v4)
    74  }
    75  
    76  func TestMemoryStorageStoreManyAndGet(t *testing.T) {
    77  	m := NewMemoryStorage()
    78  	err1 := m.StoreMany(context.Background(), map[Hash]Info{
    79  		hash(req1.Registry, req1.Image): info1,
    80  		hash(req2.Registry, req2.Image): info2,
    81  	})
    82  	v1, gErr1 := m.Get(context.Background(), req1)
    83  	v2, gErr2 := m.Get(context.Background(), req2)
    84  	v3, gErr3 := m.Get(context.Background(), req1Copy)
    85  	v4, gErr4 := m.Get(context.Background(), req3)
    86  	assert.NoError(t, err1)
    87  	assert.NoError(t, gErr1)
    88  	assert.NoError(t, gErr2)
    89  	assert.NoError(t, gErr3)
    90  	assert.NoError(t, gErr4)
    91  	assert.Equal(t, &info1, v1)
    92  	assert.Equal(t, &info2, v2)
    93  	assert.Equal(t, &info1, v3)
    94  	assert.Equal(t, noInfoPtr, v4)
    95  }
    96  
    97  func TestMemoryStorageFillAndCopyTo(t *testing.T) {
    98  	m := NewMemoryStorage()
    99  	value := map[Hash]Info{
   100  		hash(req1.Registry, req1.Image): info1,
   101  		hash(req2.Registry, req2.Image): info2,
   102  	}
   103  	err1 := m.StoreMany(context.Background(), value)
   104  
   105  	ctrl := gomock.NewController(t)
   106  	mockStorage1 := NewMockStorageWithTransfer(ctrl)
   107  	mockStorage2 := NewMockStorageWithTransfer(ctrl)
   108  	mockStorage1.EXPECT().StoreMany(gomock.Any(), value)
   109  	mockStorage2.EXPECT().StoreMany(gomock.Any(), value)
   110  	err2 := m.CopyTo(context.Background(), mockStorage1, mockStorage2)
   111  
   112  	assert.NoError(t, err1)
   113  	assert.NoError(t, err2)
   114  }