crazy-max_diun/pkg/registry/image_test.go

264 lines
6.0 KiB
Go

package registry
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseImage(t *testing.T) {
testCases := []struct {
desc string
parseOpts ParseImageOptions
expected Image
}{
{
desc: "bintray artifactory-oss",
parseOpts: ParseImageOptions{
Name: "jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:4.0.0",
},
expected: Image{
Domain: "jfrog-docker-reg2.bintray.io",
Path: "jfrog/artifactory-oss",
Tag: "4.0.0",
},
},
{
desc: "bintray xray-server",
parseOpts: ParseImageOptions{
Name: "docker.bintray.io/jfrog/xray-server:2.8.6",
},
expected: Image{
Domain: "docker.bintray.io",
Path: "jfrog/xray-server",
Tag: "2.8.6",
},
},
{
desc: "dockerhub alpine",
parseOpts: ParseImageOptions{
Name: "alpine",
},
expected: Image{
Domain: "docker.io",
Path: "library/alpine",
Tag: "latest",
},
},
{
desc: "dockerhub crazymax/nextcloud",
parseOpts: ParseImageOptions{
Name: "docker.io/crazymax/nextcloud:latest",
},
expected: Image{
Domain: "docker.io",
Path: "crazymax/nextcloud",
Tag: "latest",
},
},
{
desc: "gcr busybox",
parseOpts: ParseImageOptions{
Name: "gcr.io/google-containers/busybox:latest",
},
expected: Image{
Domain: "gcr.io",
Path: "google-containers/busybox",
Tag: "latest",
},
},
{
desc: "gcr busybox tag/digest",
parseOpts: ParseImageOptions{
Name: "gcr.io/google-containers/busybox:latest" + sha256digest,
},
expected: Image{
Domain: "gcr.io",
Path: "google-containers/busybox",
Tag: "latest",
Digest: sha256digest,
},
},
{
desc: "github ddns-route53",
parseOpts: ParseImageOptions{
Name: "docker.pkg.github.com/crazy-max/ddns-route53/ddns-route53:latest",
},
expected: Image{
Domain: "docker.pkg.github.com",
Path: "crazy-max/ddns-route53/ddns-route53",
Tag: "latest",
},
},
{
desc: "gitlab meltano",
parseOpts: ParseImageOptions{
Name: "registry.gitlab.com/meltano/meltano",
},
expected: Image{
Domain: "registry.gitlab.com",
Path: "meltano/meltano",
Tag: "latest",
},
},
{
desc: "quay hypercube",
parseOpts: ParseImageOptions{
Name: "quay.io/coreos/hyperkube",
},
expected: Image{
Domain: "quay.io",
Path: "coreos/hyperkube",
Tag: "latest",
},
},
{
desc: "ghcr ddns-route53",
parseOpts: ParseImageOptions{
Name: "ghcr.io/crazy-max/ddns-route53",
},
expected: Image{
Domain: "ghcr.io",
Path: "crazy-max/ddns-route53",
Tag: "latest",
},
},
{
desc: "ghcr radarr",
parseOpts: ParseImageOptions{
Name: "ghcr.io/linuxserver/radarr",
},
expected: Image{
Domain: "ghcr.io",
Path: "linuxserver/radarr",
Tag: "latest",
},
},
}
for _, tt := range testCases {
tt := tt
t.Run(tt.desc, func(t *testing.T) {
img, err := ParseImage(tt.parseOpts)
if err != nil {
t.Error(err)
}
assert.Equal(t, tt.expected.Domain, img.Domain)
assert.Equal(t, tt.expected.Path, img.Path)
assert.Equal(t, tt.expected.Tag, img.Tag)
})
}
}
func TestHubLink(t *testing.T) {
testCases := []struct {
desc string
parseOpts ParseImageOptions
expected string
}{
{
desc: "bintray artifactory-oss",
parseOpts: ParseImageOptions{
Name: "jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:4.0.0",
},
expected: "https://bintray.com/jfrog/reg2/jfrog%3Aartifactory-oss",
},
{
desc: "bintray kubexray",
parseOpts: ParseImageOptions{
Name: "jfrog-docker-reg2.bintray.io/kubexray:latest",
},
expected: "https://bintray.com/jfrog/reg2/kubexray",
},
{
desc: "bintray xray-server",
parseOpts: ParseImageOptions{
Name: "docker.bintray.io/jfrog/xray-server:2.8.6",
},
expected: "https://bintray.com/jfrog/reg2/jfrog%3Axray-server",
},
{
desc: "dockerhub alpine",
parseOpts: ParseImageOptions{
Name: "alpine",
},
expected: "https://hub.docker.com/_/alpine",
},
{
desc: "dockerhub crazymax/nextcloud",
parseOpts: ParseImageOptions{
Name: "docker.io/crazymax/nextcloud:latest",
},
expected: "https://hub.docker.com/r/crazymax/nextcloud",
},
{
desc: "gcr busybox",
parseOpts: ParseImageOptions{
Name: "gcr.io/google-containers/busybox:latest",
},
expected: "https://gcr.io/google-containers/busybox",
},
{
desc: "github ddns-route53",
parseOpts: ParseImageOptions{
Name: "docker.pkg.github.com/crazy-max/ddns-route53/ddns-route53:latest",
},
expected: "https://github.com/crazy-max/ddns-route53/packages",
},
{
desc: "gitlab meltano",
parseOpts: ParseImageOptions{
Name: "registry.gitlab.com/meltano/meltano",
},
expected: "https://gitlab.com/meltano/meltano/container_registry",
},
{
desc: "quay hypercube",
parseOpts: ParseImageOptions{
Name: "quay.io/coreos/hyperkube",
},
expected: "https://quay.io/repository/coreos/hyperkube",
},
{
desc: "ghcr ddns-route53",
parseOpts: ParseImageOptions{
Name: "ghcr.io/crazy-max/ddns-route53",
},
expected: "https://github.com/users/crazy-max/packages/container/package/ddns-route53",
},
{
desc: "ghcr radarr",
parseOpts: ParseImageOptions{
Name: "ghcr.io/linuxserver/radarr",
},
expected: "https://github.com/users/linuxserver/packages/container/package/radarr",
},
{
desc: "redhat etcd",
parseOpts: ParseImageOptions{
Name: "registry.access.redhat.com/rhel7/etcd",
},
expected: "https://access.redhat.com/containers/#/registry.access.redhat.com/rhel7/etcd",
},
{
desc: "private",
parseOpts: ParseImageOptions{
Name: "myregistry.example.com/an/image:latest",
HubTpl: "https://{{ .Domain }}/ui/repos/{{ .Path }}",
},
expected: "https://myregistry.example.com/ui/repos/an/image",
},
}
for _, tt := range testCases {
tt := tt
t.Run(tt.desc, func(t *testing.T) {
img, err := ParseImage(tt.parseOpts)
if err != nil {
t.Error(err)
}
assert.Equal(t, tt.expected, img.HubLink)
})
}
}