2022-01-19 01:37:45 +01:00
|
|
|
package solver
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestParseAuthHost(t *testing.T) {
|
|
|
|
type hcase struct {
|
|
|
|
Host, Domain string
|
|
|
|
}
|
|
|
|
|
|
|
|
scases := []hcase{
|
|
|
|
// Short
|
|
|
|
{
|
|
|
|
Host: "foo",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "foo:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "foo@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Short image
|
|
|
|
{
|
|
|
|
Host: "foo/bar",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "foo/bar:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Private registry
|
|
|
|
{
|
|
|
|
Host: "registry.com",
|
|
|
|
Domain: "registry.com",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com:1.1",
|
|
|
|
Domain: "registry.com",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "registry.com",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Private image
|
|
|
|
{
|
|
|
|
Host: "registry.com/foo/bar",
|
|
|
|
Domain: "registry.com",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com/foo/bar:1.1",
|
|
|
|
Domain: "registry.com",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "registry.com",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Private registry with port
|
|
|
|
{
|
|
|
|
Host: "registry.com:5000",
|
|
|
|
Domain: "registry.com:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com:5000:1.1",
|
|
|
|
Domain: "registry.com:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com:5000@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "registry.com:5000",
|
|
|
|
},
|
|
|
|
|
|
|
|
// Private image with port
|
|
|
|
{
|
|
|
|
Host: "registry.com:5000/foo/bar",
|
|
|
|
Domain: "registry.com:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com:5000/foo/bar:1.1",
|
|
|
|
Domain: "registry.com:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry.com:5000/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "registry.com:5000",
|
|
|
|
},
|
|
|
|
|
|
|
|
// docker.io short
|
|
|
|
{
|
|
|
|
Host: "docker.io",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "docker.io:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "docker.io@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// docker.io image
|
|
|
|
{
|
|
|
|
Host: "docker.io/foo/bar",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "docker.io/foo/bar:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "docker.io/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// registry-1.docker.io short
|
|
|
|
{
|
|
|
|
Host: "registry-1.docker.io",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry-1.docker.io:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry-1.docker.io@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// registry-1.docker.io image
|
|
|
|
{
|
|
|
|
Host: "registry-1.docker.io/foo/bar",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry-1.docker.io/foo/bar:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "registry-1.docker.io/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// index.docker.io short
|
|
|
|
{
|
|
|
|
Host: "index.docker.io",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "index.docker.io:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "index.docker.io@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// index.docker.io image
|
|
|
|
{
|
|
|
|
Host: "index.docker.io/foo/bar",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "index.docker.io/foo/bar:1.1",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "index.docker.io/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
|
|
|
|
// localhost repository
|
|
|
|
{
|
|
|
|
Host: "localhost",
|
|
|
|
Domain: "localhost",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost:1.1",
|
|
|
|
Domain: "localhost",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "localhost",
|
|
|
|
},
|
|
|
|
|
|
|
|
// localhost image
|
|
|
|
{
|
|
|
|
Host: "localhost/foo/bar",
|
|
|
|
Domain: "localhost",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost/foo/bar:1.1",
|
|
|
|
Domain: "localhost",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "localhost",
|
|
|
|
},
|
|
|
|
|
|
|
|
// localhost repository with port
|
|
|
|
{
|
|
|
|
Host: "localhost:5000",
|
|
|
|
Domain: "localhost:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost:5000:1.1",
|
|
|
|
Domain: "localhost:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost:5000@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "localhost:5000",
|
|
|
|
},
|
|
|
|
|
|
|
|
// localhost image with port
|
|
|
|
{
|
|
|
|
Host: "localhost:5000/foo/bar",
|
|
|
|
Domain: "localhost:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost:5000/foo/bar:1.1",
|
|
|
|
Domain: "localhost:5000",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "localhost:5000/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb",
|
|
|
|
Domain: "localhost:5000",
|
|
|
|
},
|
|
|
|
|
|
|
|
// empty host
|
|
|
|
{
|
|
|
|
Host: "",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Host: "/jo",
|
|
|
|
Domain: "docker.io",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
fcases := []hcase{
|
|
|
|
{
|
|
|
|
Host: ":/jo",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
type output struct {
|
|
|
|
expected, actual string
|
|
|
|
}
|
|
|
|
|
|
|
|
successRefs := []output{}
|
|
|
|
for _, scase := range scases {
|
2022-01-31 16:05:58 +01:00
|
|
|
named, err := ParseAuthHost(scase.Host)
|
2022-01-19 01:37:45 +01:00
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Invalid normalized reference for [%q]. Got %q", scase, err)
|
|
|
|
}
|
|
|
|
successRefs = append(successRefs, output{
|
|
|
|
actual: named,
|
|
|
|
expected: scase.Domain,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
for _, r := range successRefs {
|
|
|
|
if r.expected != r.actual {
|
|
|
|
t.Fatalf("Invalid normalized reference for [%q]. Expected %q, got %q", r, r.expected, r.actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, fcase := range fcases {
|
2022-01-31 16:05:58 +01:00
|
|
|
named, err := ParseAuthHost(fcase.Host)
|
2022-01-19 01:37:45 +01:00
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("Invalid normalized reference for [%q]. Expected failure for %q", fcase, named)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|