test: use white-box testing

This commit is contained in:
CrazyMax
2023-09-16 10:30:36 +02:00
parent bc5cdf7aa1
commit 49b8852a04
10 changed files with 103 additions and 113 deletions

View File

@@ -1,24 +1,23 @@
package registry_test
package registry
import (
"testing"
"github.com/crazy-max/diun/v4/pkg/registry"
"github.com/stretchr/testify/assert"
)
func TestParseImage(t *testing.T) {
testCases := []struct {
desc string
parseOpts registry.ParseImageOptions
expected registry.Image
parseOpts ParseImageOptions
expected Image
}{
{
desc: "bintray artifactory-oss",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:4.0.0",
},
expected: registry.Image{
expected: Image{
Domain: "jfrog-docker-reg2.bintray.io",
Path: "jfrog/artifactory-oss",
Tag: "4.0.0",
@@ -26,10 +25,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "bintray xray-server",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "docker.bintray.io/jfrog/xray-server:2.8.6",
},
expected: registry.Image{
expected: Image{
Domain: "docker.bintray.io",
Path: "jfrog/xray-server",
Tag: "2.8.6",
@@ -37,10 +36,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "dockerhub alpine",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "alpine",
},
expected: registry.Image{
expected: Image{
Domain: "docker.io",
Path: "library/alpine",
Tag: "latest",
@@ -48,10 +47,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "dockerhub crazymax/nextcloud",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "docker.io/crazymax/nextcloud:latest",
},
expected: registry.Image{
expected: Image{
Domain: "docker.io",
Path: "crazymax/nextcloud",
Tag: "latest",
@@ -59,10 +58,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "gcr busybox",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "gcr.io/google-containers/busybox:latest",
},
expected: registry.Image{
expected: Image{
Domain: "gcr.io",
Path: "google-containers/busybox",
Tag: "latest",
@@ -70,10 +69,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "github ddns-route53",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "docker.pkg.github.com/crazy-max/ddns-route53/ddns-route53:latest",
},
expected: registry.Image{
expected: Image{
Domain: "docker.pkg.github.com",
Path: "crazy-max/ddns-route53/ddns-route53",
Tag: "latest",
@@ -81,10 +80,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "gitlab meltano",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "registry.gitlab.com/meltano/meltano",
},
expected: registry.Image{
expected: Image{
Domain: "registry.gitlab.com",
Path: "meltano/meltano",
Tag: "latest",
@@ -92,10 +91,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "quay hypercube",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "quay.io/coreos/hyperkube",
},
expected: registry.Image{
expected: Image{
Domain: "quay.io",
Path: "coreos/hyperkube",
Tag: "latest",
@@ -103,10 +102,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "ghcr ddns-route53",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "ghcr.io/crazy-max/ddns-route53",
},
expected: registry.Image{
expected: Image{
Domain: "ghcr.io",
Path: "crazy-max/ddns-route53",
Tag: "latest",
@@ -114,10 +113,10 @@ func TestParseImage(t *testing.T) {
},
{
desc: "ghcr radarr",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "ghcr.io/linuxserver/radarr",
},
expected: registry.Image{
expected: Image{
Domain: "ghcr.io",
Path: "linuxserver/radarr",
Tag: "latest",
@@ -128,7 +127,7 @@ func TestParseImage(t *testing.T) {
for _, tt := range testCases {
tt := tt
t.Run(tt.desc, func(t *testing.T) {
img, err := registry.ParseImage(tt.parseOpts)
img, err := ParseImage(tt.parseOpts)
if err != nil {
t.Error(err)
}
@@ -142,96 +141,96 @@ func TestParseImage(t *testing.T) {
func TestHubLink(t *testing.T) {
testCases := []struct {
desc string
parseOpts registry.ParseImageOptions
parseOpts ParseImageOptions
expected string
}{
{
desc: "bintray artifactory-oss",
parseOpts: registry.ParseImageOptions{
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: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "jfrog-docker-reg2.bintray.io/kubexray:latest",
},
expected: "https://bintray.com/jfrog/reg2/kubexray",
},
{
desc: "bintray xray-server",
parseOpts: registry.ParseImageOptions{
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: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "alpine",
},
expected: "https://hub.docker.com/_/alpine",
},
{
desc: "dockerhub crazymax/nextcloud",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "docker.io/crazymax/nextcloud:latest",
},
expected: "https://hub.docker.com/r/crazymax/nextcloud",
},
{
desc: "gcr busybox",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "gcr.io/google-containers/busybox:latest",
},
expected: "https://gcr.io/google-containers/busybox",
},
{
desc: "github ddns-route53",
parseOpts: registry.ParseImageOptions{
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: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "registry.gitlab.com/meltano/meltano",
},
expected: "https://gitlab.com/meltano/meltano/container_registry",
},
{
desc: "quay hypercube",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "quay.io/coreos/hyperkube",
},
expected: "https://quay.io/repository/coreos/hyperkube",
},
{
desc: "ghcr ddns-route53",
parseOpts: registry.ParseImageOptions{
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: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "ghcr.io/linuxserver/radarr",
},
expected: "https://github.com/users/linuxserver/packages/container/package/radarr",
},
{
desc: "redhat etcd",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "registry.access.redhat.com/rhel7/etcd",
},
expected: "https://access.redhat.com/containers/#/registry.access.redhat.com/rhel7/etcd",
},
{
desc: "private",
parseOpts: registry.ParseImageOptions{
parseOpts: ParseImageOptions{
Name: "myregistry.example.com/an/image:latest",
HubTpl: "https://{{ .Domain }}/ui/repos/{{ .Path }}",
},
@@ -242,7 +241,7 @@ func TestHubLink(t *testing.T) {
for _, tt := range testCases {
tt := tt
t.Run(tt.desc, func(t *testing.T) {
img, err := registry.ParseImage(tt.parseOpts)
img, err := ParseImage(tt.parseOpts)
if err != nil {
t.Error(err)
}

View File

@@ -1,29 +1,28 @@
package registry_test
package registry
import (
"testing"
"github.com/crazy-max/diun/v4/pkg/registry"
"github.com/stretchr/testify/assert"
)
func TestCompareDigest(t *testing.T) {
t.Parallel()
rc, err := registry.New(registry.Options{
rc, err := New(Options{
CompareDigest: true,
})
if err != nil {
t.Error(err)
}
img, err := registry.ParseImage(registry.ParseImageOptions{
img, err := ParseImage(ParseImageOptions{
Name: "crazymax/diun:2.5.0",
})
if err != nil {
t.Error(err)
}
manifest, _, err := rc.Manifest(img, registry.Manifest{
manifest, _, err := rc.Manifest(img, Manifest{
Name: "docker.io/crazymax/diun",
Tag: "2.5.0",
MIMEType: "application/vnd.docker.distribution.manifest.list.v2+json",
@@ -40,7 +39,7 @@ func TestCompareDigest(t *testing.T) {
func TestManifest(t *testing.T) {
t.Parallel()
rc, err := registry.New(registry.Options{
rc, err := New(Options{
CompareDigest: true,
ImageOs: "linux",
ImageArch: "amd64",
@@ -49,14 +48,14 @@ func TestManifest(t *testing.T) {
t.Error(err)
}
img, err := registry.ParseImage(registry.ParseImageOptions{
img, err := ParseImage(ParseImageOptions{
Name: "portainer/portainer-ce:linux-amd64-2.5.1",
})
if err != nil {
t.Error(err)
}
manifest, updated, err := rc.Manifest(img, registry.Manifest{
manifest, updated, err := rc.Manifest(img, Manifest{
Name: "docker.io/portainer/portainer-ce",
Tag: "linux-amd64-2.5.1",
MIMEType: "application/vnd.docker.distribution.manifest.v2+json",
@@ -101,7 +100,7 @@ func TestManifest(t *testing.T) {
func TestManifestMultiUpdatedPlatform(t *testing.T) {
t.Parallel()
rc, err := registry.New(registry.Options{
rc, err := New(Options{
CompareDigest: true,
ImageOs: "linux",
ImageArch: "amd64",
@@ -110,14 +109,14 @@ func TestManifestMultiUpdatedPlatform(t *testing.T) {
t.Error(err)
}
img, err := registry.ParseImage(registry.ParseImageOptions{
img, err := ParseImage(ParseImageOptions{
Name: "mongo:3.6.21",
})
if err != nil {
t.Error(err)
}
manifest, updated, err := rc.Manifest(img, registry.Manifest{
manifest, updated, err := rc.Manifest(img, Manifest{
Name: "docker.io/library/mongo",
Tag: "3.6.21",
MIMEType: "application/vnd.docker.distribution.manifest.list.v2+json",
@@ -181,7 +180,7 @@ func TestManifestMultiUpdatedPlatform(t *testing.T) {
func TestManifestMultiNotUpdatedPlatform(t *testing.T) {
t.Parallel()
rc, err := registry.New(registry.Options{
rc, err := New(Options{
CompareDigest: true,
ImageOs: "linux",
ImageArch: "amd64",
@@ -190,14 +189,14 @@ func TestManifestMultiNotUpdatedPlatform(t *testing.T) {
t.Error(err)
}
img, err := registry.ParseImage(registry.ParseImageOptions{
img, err := ParseImage(ParseImageOptions{
Name: "mongo:3.6.21",
})
if err != nil {
t.Error(err)
}
manifest, updated, err := rc.Manifest(img, registry.Manifest{
manifest, updated, err := rc.Manifest(img, Manifest{
Name: "docker.io/library/mongo",
Tag: "3.6.21",
MIMEType: "application/vnd.docker.distribution.manifest.list.v2+json",
@@ -261,7 +260,7 @@ func TestManifestMultiNotUpdatedPlatform(t *testing.T) {
func TestManifestVariant(t *testing.T) {
t.Parallel()
rc, err := registry.New(registry.Options{
rc, err := New(Options{
ImageOs: "linux",
ImageArch: "arm",
ImageVariant: "v7",
@@ -270,14 +269,14 @@ func TestManifestVariant(t *testing.T) {
t.Error(err)
}
img, err := registry.ParseImage(registry.ParseImageOptions{
img, err := ParseImage(ParseImageOptions{
Name: "crazymax/diun:2.5.0",
})
if err != nil {
t.Error(err)
}
manifest, _, err := rc.Manifest(img, registry.Manifest{})
manifest, _, err := rc.Manifest(img, Manifest{})
assert.NoError(t, err)
assert.Equal(t, "docker.io/crazymax/diun", manifest.Name)
assert.Equal(t, "2.5.0", manifest.Tag)

View File

@@ -1,9 +1,8 @@
package registry_test
package registry
import (
"testing"
"github.com/crazy-max/diun/v4/pkg/registry"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -54,7 +53,7 @@ func TestParseReference(t *testing.T) {
for _, tt := range testCases {
tt := tt
t.Run(tt.input, func(t *testing.T) {
ref, err := registry.ParseReference(tt.input)
ref, err := ParseReference(tt.input)
if tt.wantErr {
require.Error(t, err)
return

View File

@@ -1,21 +1,20 @@
package registry_test
package registry
import (
"os"
"testing"
"github.com/crazy-max/diun/v4/pkg/registry"
"github.com/stretchr/testify/assert"
)
var (
rc *registry.Client
rc *Client
)
func TestMain(m *testing.M) {
var err error
rc, err = registry.New(registry.Options{
rc, err = New(Options{
ImageOs: "linux",
ImageArch: "amd64",
})

View File

@@ -1,23 +1,22 @@
package registry_test
package registry
import (
"testing"
"github.com/crazy-max/diun/v4/pkg/registry"
"github.com/stretchr/testify/assert"
)
func TestTags(t *testing.T) {
assert.NotNil(t, rc)
image, err := registry.ParseImage(registry.ParseImageOptions{
image, err := ParseImage(ParseImageOptions{
Name: "crazymax/diun:3.0.0",
})
if err != nil {
t.Error(err)
}
tags, err := rc.Tags(registry.TagsOptions{
tags, err := rc.Tags(TagsOptions{
Image: image,
})
if err != nil {
@@ -31,12 +30,12 @@ func TestTags(t *testing.T) {
func TestTagsSort(t *testing.T) {
testCases := []struct {
name string
sortTag registry.SortTag
sortTag SortTag
expected []string
}{
{
name: "sort default",
sortTag: registry.SortTagDefault,
sortTag: SortTagDefault,
expected: []string{
"0.1.0",
"0.4.0",
@@ -76,7 +75,7 @@ func TestTagsSort(t *testing.T) {
},
{
name: "sort lexicographical",
sortTag: registry.SortTagLexicographical,
sortTag: SortTagLexicographical,
expected: []string{
"0.1.0",
"0.4.0",
@@ -116,7 +115,7 @@ func TestTagsSort(t *testing.T) {
},
{
name: "sort reverse",
sortTag: registry.SortTagReverse,
sortTag: SortTagReverse,
expected: []string{
"latest",
"edge",
@@ -156,7 +155,7 @@ func TestTagsSort(t *testing.T) {
},
{
name: "sort semver",
sortTag: registry.SortTagSemver,
sortTag: SortTagSemver,
expected: []string{
"alpine-5.0",
"ubuntu-5.0",
@@ -237,7 +236,7 @@ func TestTagsSort(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
tags := registry.SortTags(repotags, tt.sortTag)
tags := SortTags(repotags, tt.sortTag)
assert.Equal(t, tt.expected, tags)
})
}