github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/container/reference_test.go (about) 1 package container 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 9 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 10 ) 11 12 var ( 13 sel = MustParseSelector("gcr.io/foo/bar") 14 ) 15 16 func TestNewRefSetWithInvalidRegistryErrors(t *testing.T) { 17 reg := &v1alpha1.RegistryHosting{Host: "invalid"} 18 assertNewRefSetError(t, sel, reg, "repository name must be canonical") 19 } 20 21 func TestNewRefSetErrorsWithBadLocalRef(t *testing.T) { 22 // Force "repository name must not be longer than 255 characters" when assembling LocalRef 23 var longname string 24 for i := 0; i < 230; i++ { 25 longname += "o" 26 } 27 selector := MustParseSelector(longname) 28 reg := &v1alpha1.RegistryHosting{Host: "gcr.io/somewhat/long/hostname"} 29 assertNewRefSetError(t, selector, reg, "after applying default registry") 30 } 31 32 func TestNewRefSetErrorsWithBadClusterRef(t *testing.T) { 33 // Force "repository name must not be longer than 255 characters" when assembling ClusterRef 34 var longname string 35 for i := 0; i < 230; i++ { 36 longname += "o" 37 } 38 selector := MustParseSelector(longname) 39 reg := &v1alpha1.RegistryHosting{Host: "gcr.io", HostFromContainerRuntime: "gcr.io/somewhat/long/hostname"} 40 assertNewRefSetError(t, selector, reg, "after applying default registry") 41 } 42 43 func TestNewRefSetEmptyRegistryOK(t *testing.T) { 44 _, err := NewRefSet(sel, nil) 45 assert.NoError(t, err) 46 } 47 48 var cases = []struct { 49 name string 50 host string 51 clusterHost string 52 expectedLocalRef string 53 expectedClusterRef string 54 }{ 55 {"empty registry", "", "", "gcr.io/foo", "gcr.io/foo"}, 56 {"host only", "localhost:1234", "", "localhost:1234/gcr.io_foo", "localhost:1234/gcr.io_foo"}, 57 {"host and clusterHost", "localhost:1234", "registry:1234", "localhost:1234/gcr.io_foo", "registry:1234/gcr.io_foo"}, 58 } 59 60 func TestDeriveRefs(t *testing.T) { 61 for _, tc := range cases { 62 t.Run(tc.name, func(t *testing.T) { 63 var reg *v1alpha1.RegistryHosting 64 if tc.host != "" { 65 reg = &v1alpha1.RegistryHosting{ 66 Host: tc.host, 67 HostFromContainerRuntime: tc.clusterHost, 68 } 69 } 70 refs, err := NewRefSet(MustParseSelector("gcr.io/foo"), reg) 71 require.NoError(t, err) 72 73 localRef := refs.LocalRef() 74 clusterRef := refs.ClusterRef() 75 76 assert.Equal(t, tc.expectedLocalRef, localRef.String()) 77 assert.Equal(t, tc.expectedClusterRef, clusterRef.String()) 78 }) 79 } 80 } 81 82 func TestWithoutRegistry(t *testing.T) { 83 reg := &v1alpha1.RegistryHosting{ 84 Host: "localhost:5000", 85 HostFromContainerRuntime: "localhost:5000", 86 } 87 refs, err := NewRefSet(MustParseSelector("foo"), reg) 88 require.NoError(t, err) 89 90 assert.Equal(t, "localhost:5000/foo", FamiliarString(refs.LocalRef())) 91 assert.Equal(t, "foo", FamiliarString(refs.WithoutRegistry().LocalRef())) 92 } 93 94 func assertNewRefSetError(t *testing.T, selector RefSelector, reg *v1alpha1.RegistryHosting, expectedErr string) { 95 t.Helper() 96 _, err := NewRefSet(selector, reg) 97 require.Error(t, err) 98 require.Contains(t, err.Error(), expectedErr) 99 }