...

Source file src/edge-infra.dev/pkg/f8n/warehouse/oci/cache/providers/disk/disk_test.go

Documentation: edge-infra.dev/pkg/f8n/warehouse/oci/cache/providers/disk

     1  package disk
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/google/go-containerregistry/pkg/name"
     9  	"github.com/stretchr/testify/assert"
    10  
    11  	"edge-infra.dev/pkg/f8n/warehouse/lift"
    12  	"edge-infra.dev/pkg/f8n/warehouse/oci"
    13  	"edge-infra.dev/pkg/f8n/warehouse/oci/layout"
    14  	"edge-infra.dev/pkg/lib/build/bazel"
    15  	"edge-infra.dev/pkg/lib/uuid"
    16  	"edge-infra.dev/test/fixtures"
    17  )
    18  
    19  var (
    20  	fixturePath *fixtures.Path
    21  	shoot       oci.Artifact
    22  	redpanda    oci.Artifact
    23  )
    24  
    25  func TestMain(m *testing.M) {
    26  	var err error
    27  
    28  	fixturePath, err = fixtures.Layout()
    29  	if err != nil {
    30  		panic(err)
    31  	}
    32  	shoot, err = fixturePath.Get(name.MustParseReference("shoot:latest"))
    33  	if err != nil {
    34  		panic(err)
    35  	}
    36  	redpanda, err = fixturePath.Get(name.MustParseReference("redpanda-system:latest"))
    37  	if err != nil {
    38  		panic(err)
    39  	}
    40  
    41  	os.Exit(m.Run())
    42  }
    43  
    44  func TestNew(t *testing.T) {
    45  	assert.NotEmpty(t, New(testLayout(t, "new-cache")))
    46  }
    47  
    48  func TestCache(t *testing.T) {
    49  	t.Parallel()
    50  	var (
    51  		diskCache      = New(testLayout(t, "add"))
    52  		shootTag       = testTag(t, "shoot", uuid.New().Hash())
    53  		shootDigest    = testDigest(t, "shoot", shoot)
    54  		redpandaDigest = testDigest(t, "redpanda", redpanda)
    55  	)
    56  
    57  	assert.NotEmpty(t, diskCache)
    58  
    59  	t.Run("Add", func(t *testing.T) {
    60  		assert.NoError(t, diskCache.Add(shootTag, shoot))
    61  		assert.NoError(t, diskCache.Add(redpandaDigest, redpanda))
    62  	})
    63  
    64  	t.Run("Get", func(t *testing.T) {
    65  		a, err := diskCache.Get(shootTag)
    66  		assert.NoError(t, err)
    67  		sameDigest(t, shoot, a)
    68  
    69  		a, err = diskCache.Get(shootDigest)
    70  		assert.NoError(t, err)
    71  		sameDigest(t, shoot, a)
    72  
    73  		a, err = diskCache.Get(redpandaDigest)
    74  		assert.NoError(t, err)
    75  		sameDigest(t, redpanda, a)
    76  	})
    77  
    78  	t.Run("Exists", func(t *testing.T) {
    79  		assert.True(t, diskCache.Exists(shootTag))
    80  		assert.True(t, diskCache.Exists(redpandaDigest))
    81  		assert.False(t, diskCache.Exists(name.MustParseReference("ubuntu:latest")))
    82  	})
    83  }
    84  
    85  func TestPurge(t *testing.T) {
    86  	t.Parallel()
    87  
    88  	diskCache := New(testLayout(t, "purge"))
    89  	assert.NotEmpty(t, diskCache)
    90  	assert.NoError(t, diskCache.Add(testTag(t, "shoot", uuid.New().Hash()), shoot))
    91  	assert.NoError(t, diskCache.Add(testTag(t, "redpanda", uuid.New().Hash()), redpanda))
    92  
    93  	assert.NoError(t, diskCache.Purge())
    94  
    95  	assert.NoError(t, diskCache.Add(testTag(t, "shoot", uuid.New().Hash()), shoot))
    96  	assert.NoError(t, diskCache.Add(testTag(t, "redpanda", uuid.New().Hash()), redpanda))
    97  }
    98  
    99  func testLayout(t *testing.T, id string) *layout.Path {
   100  	t.Helper()
   101  	dir, err := bazel.NewTestTmpDir(fmt.Sprintf("edge-infra-disk-cache-%s-", id))
   102  	assert.NoError(t, err)
   103  	path, err := layout.New(dir)
   104  	assert.NoError(t, err)
   105  	return path
   106  }
   107  
   108  func testTag(t *testing.T, n, tag string) name.Reference {
   109  	t.Helper()
   110  	ref, err := name.NewTag(fmt.Sprintf("%s/%s:%s", lift.LocalRegistryAlias, n, tag))
   111  	assert.NoError(t, err)
   112  	return ref
   113  }
   114  
   115  func testDigest(t *testing.T, n string, a oci.Artifact) name.Reference {
   116  	t.Helper()
   117  	d, err := a.Digest()
   118  	assert.NoError(t, err)
   119  	ref, err := name.NewDigest(fmt.Sprintf("%s/%s@%s", lift.LocalRegistryAlias, n, d))
   120  	assert.NoError(t, err)
   121  	return ref
   122  }
   123  
   124  func sameDigest(t *testing.T, exp, actual oci.Artifact) {
   125  	ad, err := actual.Digest()
   126  	assert.NoError(t, err)
   127  
   128  	ed, err := exp.Digest()
   129  	assert.NoError(t, err)
   130  
   131  	assert.Equal(t, ed, ad)
   132  }
   133  

View as plain text