get.porter.sh/porter@v1.3.0/pkg/porter/resolver_test.go (about) 1 package porter 2 3 import ( 4 "context" 5 "testing" 6 7 "get.porter.sh/porter/pkg/cache" 8 "get.porter.sh/porter/pkg/cnab" 9 cnabtooci "get.porter.sh/porter/pkg/cnab/cnab-to-oci" 10 "get.porter.sh/porter/pkg/config" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestBundleResolver_Resolve_ForcePull(t *testing.T) { 16 ctx := context.Background() 17 tc := config.NewTestConfig(t) 18 testReg := cnabtooci.NewTestRegistry() 19 testCache := cache.NewTestCache(cache.New(tc.Config)) 20 resolver := BundleResolver{ 21 Cache: testCache, 22 Registry: testReg, 23 } 24 25 cacheSearched := false 26 testCache.FindBundleMock = func(ref cnab.OCIReference) (cache.CachedBundle, bool, error) { 27 cacheSearched = true 28 return cache.CachedBundle{}, true, nil 29 } 30 31 pulled := false 32 testReg.MockPullBundle = func(ctx context.Context, ref cnab.OCIReference, opts cnabtooci.RegistryOptions) (cnab.BundleReference, error) { 33 pulled = true 34 return cnab.BundleReference{Reference: ref}, nil 35 } 36 37 opts := BundlePullOptions{ 38 Reference: kahnlatest.String(), 39 Force: true, 40 } 41 require.NoError(t, opts.Validate()) 42 _, err := resolver.Resolve(ctx, opts) 43 require.NoError(t, err) 44 45 assert.False(t, cacheSearched, "Force should have skipped the cache") 46 assert.True(t, pulled, "The bundle should have been re-pulled") 47 } 48 49 func TestBundleResolver_Resolve_CacheHit(t *testing.T) { 50 ctx := context.Background() 51 tc := config.NewTestConfig(t) 52 testReg := cnabtooci.NewTestRegistry() 53 testCache := cache.NewTestCache(cache.New(tc.Config)) 54 resolver := BundleResolver{ 55 Cache: testCache, 56 Registry: testReg, 57 } 58 59 cacheSearched := false 60 testCache.FindBundleMock = func(ref cnab.OCIReference) (cache.CachedBundle, bool, error) { 61 cacheSearched = true 62 return cache.CachedBundle{BundleReference: cnab.BundleReference{Reference: ref}}, true, nil 63 } 64 65 pulled := false 66 testReg.MockPullBundle = func(ctx context.Context, ref cnab.OCIReference, opts cnabtooci.RegistryOptions) (cnab.BundleReference, error) { 67 pulled = true 68 return cnab.BundleReference{Reference: ref}, nil 69 } 70 71 opts := BundlePullOptions{Reference: "ghcr.io/getporter/examples/porter-hello:v0.2.0"} 72 _, err := resolver.Resolve(ctx, opts) 73 require.NoError(t, err) 74 75 assert.True(t, cacheSearched, "The cache should be searched when force is not specified") 76 assert.False(t, pulled, "The bundle should NOT be pulled because it was found in the cache") 77 } 78 79 func TestBundleResolver_Resolve_CacheMiss(t *testing.T) { 80 ctx := context.Background() 81 tc := config.NewTestConfig(t) 82 testReg := cnabtooci.NewTestRegistry() 83 testCache := cache.NewTestCache(cache.New(tc.Config)) 84 resolver := BundleResolver{ 85 Cache: testCache, 86 Registry: testReg, 87 } 88 89 cacheSearched := false 90 testCache.FindBundleMock = func(ref cnab.OCIReference) (cache.CachedBundle, bool, error) { 91 cacheSearched = true 92 return cache.CachedBundle{}, false, nil 93 } 94 95 pulled := false 96 testReg.MockPullBundle = func(ctx context.Context, ref cnab.OCIReference, options cnabtooci.RegistryOptions) (cnab.BundleReference, error) { 97 pulled = true 98 return cnab.BundleReference{Reference: ref}, nil 99 } 100 101 opts := BundlePullOptions{Reference: "ghcr.io/getporter/examples/porter-hello:v0.2.0"} 102 _, err := resolver.Resolve(ctx, opts) 103 require.NoError(t, err) 104 105 assert.True(t, cacheSearched, "The cache should be searched when force is not specified") 106 assert.True(t, pulled, "The bundle should have been pulled because the bundle was not in the cache") 107 }