...
1 package cache
2
3 import (
4 _ "embed"
5 "fmt"
6 "testing"
7
8 "github.com/google/go-containerregistry/pkg/name"
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11
12 "edge-infra.dev/pkg/f8n/warehouse/cluster"
13 "edge-infra.dev/pkg/f8n/warehouse/lift/unpack"
14 "edge-infra.dev/pkg/f8n/warehouse/oci/layer"
15 "edge-infra.dev/pkg/f8n/warehouse/oci/remote"
16 "edge-infra.dev/pkg/f8n/warehouse/pallet"
17 )
18
19 func benchmarkCache(b *testing.B, providers ...cluster.Provider) {
20 d, err := store.Digest()
21 require.NoError(b, err)
22 ref, err := name.NewDigest(fmt.Sprintf("%s/%s/%s@%s", rURL.Host, "benchmark-cache", "store", d))
23 require.NoError(b, err)
24
25 cache, err := New(
26 WithMemoryCacheSize(500),
27 )
28 require.NoError(b, err)
29 require.NoError(b, remote.Write(store, ref))
30
31 if len(providers) == 0 {
32 p, err := pallet.New(store)
33 require.NoError(b, err)
34 providers = p.Providers()
35 }
36
37 b.ResetTimer()
38
39 b.RunParallel(func(pb *testing.PB) {
40 for pb.Next() {
41 cached, err := cache.Get(ref)
42 require.NoError(b, err)
43
44 fn := func(pallet.Pallet, []layer.Layer) error { return nil }
45 for _, provider := range providers {
46 assert.NoError(b, unpack.Walk(cached, fn, unpack.ForProvider(provider)))
47 }
48 }
49 })
50
51 b.ReportAllocs()
52 }
53
54 func BenchmarkCache_AllProviders(b *testing.B) { benchmarkCache(b) }
55 func BenchmarkCache_SingleProvider(b *testing.B) { benchmarkCache(b, cluster.Generic) }
56
View as plain text