mirror of https://github.com/docker/cli.git
282 lines
7.5 KiB
Go
282 lines
7.5 KiB
Go
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))
|
|
})
|
|
}
|
|
}
|