Skip to content

Commit 13f01ec

Browse files
authored
tests: Improve unit tests for pkg/registry/client.go (#865)
Signed-off-by: Cheng Fang <cfang@redhat.com>
1 parent e92c4e6 commit 13f01ec

File tree

1 file changed

+112
-1
lines changed

1 file changed

+112
-1
lines changed

pkg/registry/client_test.go

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import (
99
"testing"
1010
"time"
1111

12+
"github.com/distribution/distribution/v3/manifest"
13+
"github.com/distribution/distribution/v3/manifest/manifestlist"
14+
"github.com/distribution/distribution/v3/manifest/ocischema"
15+
"github.com/distribution/distribution/v3/manifest/schema2"
16+
1217
"github.com/distribution/distribution/v3"
1318
"github.com/distribution/distribution/v3/manifest/schema1" //nolint:staticcheck
1419
v1 "github.com/opencontainers/image-spec/specs-go/v1"
@@ -444,7 +449,7 @@ func Test_TagMetadata(t *testing.T) {
444449

445450
})
446451

447-
t.Run("Check for correct error handling when time stamp cannot be parsed", func(t *testing.T) {
452+
t.Run("Check for invalid/valid timestamp and non-match platforms", func(t *testing.T) {
448453
ts := "invalid"
449454
meta1 := &schema1.SignedManifest{ //nolint:staticcheck
450455
Manifest: schema1.Manifest{ //nolint:staticcheck
@@ -461,6 +466,103 @@ func Test_TagMetadata(t *testing.T) {
461466
require.NoError(t, err)
462467
_, err = client.TagMetadata(meta1, &options.ManifestOptions{})
463468
require.Error(t, err)
469+
470+
ts = time.Now().Format(time.RFC3339Nano)
471+
opts := &options.ManifestOptions{}
472+
meta1.Manifest.History[0].V1Compatibility = `{"created":"` + ts + `"}`
473+
tagInfo, _ := client.TagMetadata(meta1, opts)
474+
assert.Equal(t, ts, tagInfo.CreatedAt.Format(time.RFC3339Nano))
475+
476+
opts.WithPlatform("testOS", "testArch", "testVariant")
477+
tagInfo, err = client.TagMetadata(meta1, opts)
478+
assert.Nil(t, tagInfo)
479+
assert.Nil(t, err)
480+
})
481+
}
482+
483+
func Test_TagMetadata_2(t *testing.T) {
484+
t.Run("ocischema DeserializedManifest invalid digest format", func(t *testing.T) {
485+
meta1 := &ocischema.DeserializedManifest{
486+
Manifest: ocischema.Manifest{
487+
Versioned: manifest.Versioned{
488+
SchemaVersion: 1,
489+
MediaType: "",
490+
},
491+
},
492+
}
493+
ep, err := GetRegistryEndpoint("")
494+
require.NoError(t, err)
495+
client, err := NewClient(ep, "", "")
496+
497+
require.NoError(t, err)
498+
err = client.NewRepository("test/test")
499+
require.NoError(t, err)
500+
_, err = client.TagMetadata(meta1, &options.ManifestOptions{})
501+
require.Error(t, err) // invalid digest format
502+
})
503+
t.Run("schema2 DeserializedManifest invalid digest format", func(t *testing.T) {
504+
meta1 := &schema2.DeserializedManifest{
505+
Manifest: schema2.Manifest{
506+
Versioned: manifest.Versioned{
507+
SchemaVersion: 1,
508+
MediaType: "",
509+
},
510+
Config: distribution.Descriptor{
511+
MediaType: "",
512+
Digest: "sha256:abc",
513+
},
514+
},
515+
}
516+
ep, err := GetRegistryEndpoint("")
517+
require.NoError(t, err)
518+
client, err := NewClient(ep, "", "")
519+
520+
require.NoError(t, err)
521+
err = client.NewRepository("test/test")
522+
require.NoError(t, err)
523+
_, err = client.TagMetadata(meta1, &options.ManifestOptions{})
524+
require.Error(t, err) // invalid digest format
525+
})
526+
t.Run("ocischema DeserializedImageIndex empty index not supported", func(t *testing.T) {
527+
meta1 := &ocischema.DeserializedImageIndex{
528+
ImageIndex: ocischema.ImageIndex{
529+
Versioned: manifest.Versioned{
530+
SchemaVersion: 1,
531+
MediaType: "",
532+
},
533+
Manifests: nil,
534+
Annotations: nil,
535+
},
536+
}
537+
ep, err := GetRegistryEndpoint("")
538+
require.NoError(t, err)
539+
client, err := NewClient(ep, "", "")
540+
541+
require.NoError(t, err)
542+
err = client.NewRepository("test/test")
543+
require.NoError(t, err)
544+
_, err = client.TagMetadata(meta1, &options.ManifestOptions{})
545+
require.Error(t, err) // empty index not supported
546+
})
547+
t.Run("ocischema DeserializedImageIndex empty manifestlist not supported", func(t *testing.T) {
548+
meta1 := &manifestlist.DeserializedManifestList{
549+
ManifestList: manifestlist.ManifestList{
550+
Versioned: manifest.Versioned{
551+
SchemaVersion: 1,
552+
MediaType: "",
553+
},
554+
Manifests: nil,
555+
},
556+
}
557+
ep, err := GetRegistryEndpoint("")
558+
require.NoError(t, err)
559+
client, err := NewClient(ep, "", "")
560+
561+
require.NoError(t, err)
562+
err = client.NewRepository("test/test")
563+
require.NoError(t, err)
564+
_, err = client.TagMetadata(meta1, &options.ManifestOptions{})
565+
require.Error(t, err) // empty manifestlist not supported
464566
})
465567
}
466568

@@ -495,4 +597,13 @@ func TestPing(t *testing.T) {
495597
assert.ErrorContains(t, err, "does not seem to be a valid v2 Docker Registry API")
496598
})
497599

600+
t.Run("Empty Registry API", func(t *testing.T) {
601+
mockManager := new(mocks.Manager)
602+
ep := &RegistryEndpoint{RegistryAPI: ""}
603+
mockManager.On("AddResponse", mock.Anything).Return(nil)
604+
_, err := ping(mockManager, ep, "")
605+
require.Error(t, err)
606+
assert.ErrorContains(t, err, "unsupported protocol scheme")
607+
})
608+
498609
}

0 commit comments

Comments
 (0)