@@ -9,6 +9,11 @@ import (
9
9
"testing"
10
10
"time"
11
11
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
+
12
17
"github.com/distribution/distribution/v3"
13
18
"github.com/distribution/distribution/v3/manifest/schema1" //nolint:staticcheck
14
19
v1 "github.com/opencontainers/image-spec/specs-go/v1"
@@ -444,7 +449,7 @@ func Test_TagMetadata(t *testing.T) {
444
449
445
450
})
446
451
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 ) {
448
453
ts := "invalid"
449
454
meta1 := & schema1.SignedManifest { //nolint:staticcheck
450
455
Manifest : schema1.Manifest { //nolint:staticcheck
@@ -461,6 +466,103 @@ func Test_TagMetadata(t *testing.T) {
461
466
require .NoError (t , err )
462
467
_ , err = client .TagMetadata (meta1 , & options.ManifestOptions {})
463
468
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
464
566
})
465
567
}
466
568
@@ -495,4 +597,13 @@ func TestPing(t *testing.T) {
495
597
assert .ErrorContains (t , err , "does not seem to be a valid v2 Docker Registry API" )
496
598
})
497
599
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
+
498
609
}
0 commit comments