package registry import ( "testing" "github.com/distribution/reference" "github.com/docker/docker/api/types/registry" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" ) func TestNewIndexInfo(t *testing.T) { type staticRepositoryInfo struct { Index *registry.IndexInfo RemoteName string CanonicalName string LocalName string } tests := map[string]staticRepositoryInfo{ "fooo/bar": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "fooo/bar", LocalName: "fooo/bar", CanonicalName: "docker.io/fooo/bar", }, "library/ubuntu": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "library/ubuntu", LocalName: "ubuntu", CanonicalName: "docker.io/library/ubuntu", }, "nonlibrary/ubuntu": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "nonlibrary/ubuntu", LocalName: "nonlibrary/ubuntu", CanonicalName: "docker.io/nonlibrary/ubuntu", }, "ubuntu": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "library/ubuntu", LocalName: "ubuntu", CanonicalName: "docker.io/library/ubuntu", }, "other/library": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "other/library", LocalName: "other/library", CanonicalName: "docker.io/other/library", }, "127.0.0.1:8000/private/moonbase": { Index: ®istry.IndexInfo{ Name: "127.0.0.1:8000", Official: false, Secure: false, }, RemoteName: "private/moonbase", LocalName: "127.0.0.1:8000/private/moonbase", CanonicalName: "127.0.0.1:8000/private/moonbase", }, "127.0.0.1:8000/privatebase": { Index: ®istry.IndexInfo{ Name: "127.0.0.1:8000", Official: false, Secure: false, }, RemoteName: "privatebase", LocalName: "127.0.0.1:8000/privatebase", CanonicalName: "127.0.0.1:8000/privatebase", }, "[::1]:8000/private/moonbase": { Index: ®istry.IndexInfo{ Name: "[::1]:8000", Official: false, Secure: false, }, RemoteName: "private/moonbase", LocalName: "[::1]:8000/private/moonbase", CanonicalName: "[::1]:8000/private/moonbase", }, "[::1]:8000/privatebase": { Index: ®istry.IndexInfo{ Name: "[::1]:8000", Official: false, Secure: false, }, RemoteName: "privatebase", LocalName: "[::1]:8000/privatebase", CanonicalName: "[::1]:8000/privatebase", }, // IPv6 only has a single loopback address, so ::2 is not a loopback, // hence not marked "insecure". "[::2]:8000/private/moonbase": { Index: ®istry.IndexInfo{ Name: "[::2]:8000", Official: false, Secure: true, }, RemoteName: "private/moonbase", LocalName: "[::2]:8000/private/moonbase", CanonicalName: "[::2]:8000/private/moonbase", }, // IPv6 only has a single loopback address, so ::2 is not a loopback, // hence not marked "insecure". "[::2]:8000/privatebase": { Index: ®istry.IndexInfo{ Name: "[::2]:8000", Official: false, Secure: true, }, RemoteName: "privatebase", LocalName: "[::2]:8000/privatebase", CanonicalName: "[::2]:8000/privatebase", }, "localhost:8000/private/moonbase": { Index: ®istry.IndexInfo{ Name: "localhost:8000", Official: false, Secure: false, }, RemoteName: "private/moonbase", LocalName: "localhost:8000/private/moonbase", CanonicalName: "localhost:8000/private/moonbase", }, "localhost:8000/privatebase": { Index: ®istry.IndexInfo{ Name: "localhost:8000", Official: false, Secure: false, }, RemoteName: "privatebase", LocalName: "localhost:8000/privatebase", CanonicalName: "localhost:8000/privatebase", }, "example.com/private/moonbase": { Index: ®istry.IndexInfo{ Name: "example.com", Official: false, Secure: true, }, RemoteName: "private/moonbase", LocalName: "example.com/private/moonbase", CanonicalName: "example.com/private/moonbase", }, "example.com/privatebase": { Index: ®istry.IndexInfo{ Name: "example.com", Official: false, Secure: true, }, RemoteName: "privatebase", LocalName: "example.com/privatebase", CanonicalName: "example.com/privatebase", }, "example.com:8000/private/moonbase": { Index: ®istry.IndexInfo{ Name: "example.com:8000", Official: false, Secure: true, }, RemoteName: "private/moonbase", LocalName: "example.com:8000/private/moonbase", CanonicalName: "example.com:8000/private/moonbase", }, "example.com:8000/privatebase": { Index: ®istry.IndexInfo{ Name: "example.com:8000", Official: false, Secure: true, }, RemoteName: "privatebase", LocalName: "example.com:8000/privatebase", CanonicalName: "example.com:8000/privatebase", }, "localhost/private/moonbase": { Index: ®istry.IndexInfo{ Name: "localhost", Official: false, Secure: false, }, RemoteName: "private/moonbase", LocalName: "localhost/private/moonbase", CanonicalName: "localhost/private/moonbase", }, "localhost/privatebase": { Index: ®istry.IndexInfo{ Name: "localhost", Official: false, Secure: false, }, RemoteName: "privatebase", LocalName: "localhost/privatebase", CanonicalName: "localhost/privatebase", }, IndexName + "/public/moonbase": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "public/moonbase", LocalName: "public/moonbase", CanonicalName: "docker.io/public/moonbase", }, "index." + IndexName + "/public/moonbase": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "public/moonbase", LocalName: "public/moonbase", CanonicalName: "docker.io/public/moonbase", }, "ubuntu-12.04-base": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "library/ubuntu-12.04-base", LocalName: "ubuntu-12.04-base", CanonicalName: "docker.io/library/ubuntu-12.04-base", }, IndexName + "/ubuntu-12.04-base": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "library/ubuntu-12.04-base", LocalName: "ubuntu-12.04-base", CanonicalName: "docker.io/library/ubuntu-12.04-base", }, "index." + IndexName + "/ubuntu-12.04-base": { Index: ®istry.IndexInfo{ Name: IndexName, Official: true, Secure: true, }, RemoteName: "library/ubuntu-12.04-base", LocalName: "ubuntu-12.04-base", CanonicalName: "docker.io/library/ubuntu-12.04-base", }, } for reposName, expected := range tests { t.Run(reposName, func(t *testing.T) { named, err := reference.ParseNormalizedNamed(reposName) assert.NilError(t, err) indexInfo := NewIndexInfo(named) repoInfoName := reference.TrimNamed(named) assert.Check(t, is.DeepEqual(indexInfo, expected.Index)) assert.Check(t, is.Equal(reference.Path(repoInfoName), expected.RemoteName)) assert.Check(t, is.Equal(reference.FamiliarName(repoInfoName), expected.LocalName)) assert.Check(t, is.Equal(repoInfoName.Name(), expected.CanonicalName)) }) } }