package cache import ( _ "embed" "fmt" "testing" "github.com/google/go-containerregistry/pkg/name" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "edge-infra.dev/pkg/f8n/warehouse/cluster" "edge-infra.dev/pkg/f8n/warehouse/lift/unpack" "edge-infra.dev/pkg/f8n/warehouse/oci/layer" "edge-infra.dev/pkg/f8n/warehouse/oci/remote" "edge-infra.dev/pkg/f8n/warehouse/pallet" ) func benchmarkCache(b *testing.B, providers ...cluster.Provider) { d, err := store.Digest() require.NoError(b, err) ref, err := name.NewDigest(fmt.Sprintf("%s/%s/%s@%s", rURL.Host, "benchmark-cache", "store", d)) require.NoError(b, err) cache, err := New( WithMemoryCacheSize(500), ) require.NoError(b, err) require.NoError(b, remote.Write(store, ref)) if len(providers) == 0 { p, err := pallet.New(store) require.NoError(b, err) providers = p.Providers() } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { cached, err := cache.Get(ref) require.NoError(b, err) fn := func(pallet.Pallet, []layer.Layer) error { return nil } for _, provider := range providers { assert.NoError(b, unpack.Walk(cached, fn, unpack.ForProvider(provider))) } } }) b.ReportAllocs() } func BenchmarkCache_AllProviders(b *testing.B) { benchmarkCache(b) } func BenchmarkCache_SingleProvider(b *testing.B) { benchmarkCache(b, cluster.Generic) }