@@ -28,6 +28,7 @@ const (
28
28
validDigest7 = "13b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
29
29
validDigest8 = "57f2c47061dae97063dc46598168a80a9f89302c1f24fe2a422a1ec0aba3017a"
30
30
validDigest9 = "023c624b58dbbcd3c0dd82b4c53f04194d1247c6eebdaab7c610cf7d66709b3b"
31
+ validDigest10 = "1761e09cad8aa44e48ffb41c78371a6c139bd0df555c90b5d99739b9551c7828"
31
32
invalidDigest = "invaliddigest"
32
33
algo = "sha256"
33
34
validDigestWithAlgo = algo + ":" + validDigest
@@ -39,6 +40,7 @@ const (
39
40
validDigestWithAlgo7 = algo + ":" + validDigest7
40
41
validDigestWithAlgo8 = algo + ":" + validDigest8
41
42
validDigestWithAlgo9 = algo + ":" + validDigest9
43
+ validDigestWithAlgo10 = algo + ":" + validDigest10
42
44
validHost = "localhost"
43
45
validRegistry = validHost + ":5000"
44
46
invalidHost = "badhost"
@@ -52,6 +54,7 @@ const (
52
54
validReference6 = validRegistry + "/" + validRepo + "@" + validDigest6
53
55
invalidReference = "invalid reference"
54
56
joseTag = "application/jose+json"
57
+ coseTag = "application/cose"
55
58
validTimestamp = "2022-07-29T02:23:10Z"
56
59
size = 104
57
60
size2 = 135
@@ -103,14 +106,15 @@ const (
103
106
)
104
107
105
108
type args struct {
106
- ctx context.Context
107
- reference string
108
- remoteClient remote.Client
109
- plainHttp bool
110
- digest digest.Digest
111
- annotations map [string ]string
112
- subjectManifest notation.Descriptor
113
- signature []byte
109
+ ctx context.Context
110
+ reference string
111
+ remoteClient remote.Client
112
+ plainHttp bool
113
+ digest digest.Digest
114
+ annotations map [string ]string
115
+ subjectManifest notation.Descriptor
116
+ signature []byte
117
+ signatureMediaType string
114
118
}
115
119
116
120
type mockRemoteClient struct {
@@ -255,6 +259,17 @@ func (c mockRemoteClient) Do(req *http.Request) (*http.Response, error) {
255
259
"Content-Type" : {mediaType },
256
260
},
257
261
}, nil
262
+ case "/v2/test/manifests/" + validDigestWithAlgo10 :
263
+ if req .Method == "GET" {
264
+ return & http.Response {}, fmt .Errorf (msg )
265
+ }
266
+ return & http.Response {
267
+ StatusCode : http .StatusCreated ,
268
+ Body : io .NopCloser (bytes .NewReader ([]byte (msg ))),
269
+ Header : map [string ][]string {
270
+ "Docker-Content-Digest" : {validDigestWithAlgo10 },
271
+ },
272
+ }, nil
258
273
case "/v2/test/blobs/uploads/" :
259
274
switch req .Host {
260
275
case validRegistry :
@@ -507,7 +522,7 @@ func TestPutSignatureManifest(t *testing.T) {
507
522
},
508
523
},
509
524
{
510
- name : "succeed to put signature manifest" ,
525
+ name : "succeed to put signature manifest with jws media type " ,
511
526
expectErr : false ,
512
527
expectDes : notation.Descriptor {
513
528
MediaType : artifactspec .MediaTypeArtifactManifest ,
@@ -531,6 +546,35 @@ func TestPutSignatureManifest(t *testing.T) {
531
546
annotations : map [string ]string {
532
547
artifactspec .AnnotationArtifactCreated : validTimestamp ,
533
548
},
549
+ signatureMediaType : joseTag ,
550
+ },
551
+ },
552
+ {
553
+ name : "succeed to put signature manifest with cose media type" ,
554
+ expectErr : false ,
555
+ expectDes : notation.Descriptor {
556
+ MediaType : artifactspec .MediaTypeArtifactManifest ,
557
+ Digest : digest .Digest (validDigestWithAlgo10 ),
558
+ Size : 364 ,
559
+ },
560
+ expectManifest : SignatureManifest {
561
+ Annotations : map [string ]string {
562
+ artifactspec .AnnotationArtifactCreated : validTimestamp ,
563
+ },
564
+ Blob : notation.Descriptor {
565
+ MediaType : coseTag ,
566
+ Digest : validDigestWithAlgo5 ,
567
+ },
568
+ },
569
+ args : args {
570
+ reference : validReference ,
571
+ signature : make ([]byte , 0 ),
572
+ ctx : context .Background (),
573
+ remoteClient : mockRemoteClient {},
574
+ annotations : map [string ]string {
575
+ artifactspec .AnnotationArtifactCreated : validTimestamp ,
576
+ },
577
+ signatureMediaType : coseTag ,
534
578
},
535
579
},
536
580
}
@@ -540,7 +584,7 @@ func TestPutSignatureManifest(t *testing.T) {
540
584
ref , _ := registry .ParseReference (args .reference )
541
585
client := NewRepositoryClient (args .remoteClient , ref , args .plainHttp )
542
586
543
- des , manifest , err := client .PutSignatureManifest (args .ctx , args .signature , args .subjectManifest , args .annotations )
587
+ des , manifest , err := client .PutSignatureManifest (args .ctx , args .signature , args .signatureMediaType , args . subjectManifest , args .annotations )
544
588
if (err != nil ) != tt .expectErr {
545
589
t .Errorf ("error = %v, expectErr = %v" , err , tt .expectErr )
546
590
}
0 commit comments