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  }