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  }