@@ -2,7 +2,6 @@ package conformance
2
2
3
3
import (
4
4
"net/http"
5
- "os"
6
5
7
6
"github.com/bloodorangeio/reggie"
8
7
g "github.com/onsi/ginkgo/v2"
@@ -12,8 +11,6 @@ import (
12
11
var test01Pull = func () {
13
12
g .Context (titlePull , func () {
14
13
15
- var tag string
16
-
17
14
g .Context ("Setup" , func () {
18
15
g .Specify ("Populate registry with test blob" , func () {
19
16
SkipIfDisabled (pull )
@@ -72,9 +69,8 @@ var test01Pull = func() {
72
69
g .Specify ("Populate registry with test manifest" , func () {
73
70
SkipIfDisabled (pull )
74
71
RunOnlyIf (runPullSetup )
75
- tag = testTagName
76
72
req := client .NewRequest (reggie .PUT , "/v2/<name>/manifests/<reference>" ,
77
- reggie .WithReference (tag )).
73
+ reggie .WithReference (testTagName )).
78
74
SetHeader ("Content-Type" , "application/vnd.oci.image.manifest.v1+json" ).
79
75
SetBody (manifests [0 ].Content )
80
76
resp , err := client .Do (req )
@@ -98,14 +94,41 @@ var test01Pull = func() {
98
94
BeNumerically ("<" , 300 )))
99
95
})
100
96
101
- g .Specify ("Get tag name from environment " , func () {
97
+ g .Specify ("Populate registry with sha512 blobs " , func () {
102
98
SkipIfDisabled (pull )
103
- RunOnlyIfNot (runPullSetup )
104
- tmp := os .Getenv (envVarTagName )
105
- if tmp != "" {
106
- tag = tmp
99
+ RunOnlyIf (runPull512Setup )
100
+ for _ , blob := range testBlobs ["sha512" ] {
101
+ req := client .NewRequest (reggie .POST , "/v2/<name>/blobs/uploads/" ).
102
+ SetQueryParam ("digest-algorithm" , "sha512" )
103
+ resp , err := client .Do (req )
104
+ Expect (err ).To (BeNil ())
105
+ req = client .NewRequest (reggie .PUT , resp .GetRelativeLocation ()).
106
+ SetQueryParam ("digest" , blob .Digest ).
107
+ SetHeader ("Content-Type" , "application/octet-stream" ).
108
+ SetHeader ("Content-Length" , blob .ContentLength ).
109
+ SetBody (blob .Content )
110
+ resp , err = client .Do (req )
111
+ Expect (err ).To (BeNil ())
112
+ Expect (resp .StatusCode ()).To (SatisfyAll (
113
+ BeNumerically (">=" , 200 ),
114
+ BeNumerically ("<" , 300 )))
107
115
}
108
116
})
117
+
118
+ g .Specify ("Populate registry with test sha512 manifest" , func () {
119
+ SkipIfDisabled (pull )
120
+ RunOnlyIf (runPull512Setup )
121
+ req := client .NewRequest (reggie .PUT , "/v2/<name>/manifests/<reference>" ,
122
+ reggie .WithReference (testTag512Name )).
123
+ SetQueryParam ("digest" , testManifests ["sha512" ].Digest ).
124
+ SetHeader ("Content-Type" , "application/vnd.oci.image.manifest.v1+json" ).
125
+ SetBody (testManifests ["sha512" ].Content )
126
+ resp , err := client .Do (req )
127
+ Expect (err ).To (BeNil ())
128
+ Expect (resp .StatusCode ()).To (SatisfyAll (
129
+ BeNumerically (">=" , 200 ),
130
+ BeNumerically ("<" , 300 )))
131
+ })
109
132
})
110
133
111
134
g .Context ("Pull blobs" , func () {
@@ -130,6 +153,18 @@ var test01Pull = func() {
130
153
}
131
154
})
132
155
156
+ g .Specify ("HEAD request to existing sha512 blob should yield 200" , func () {
157
+ SkipIfDisabled (pull )
158
+ req := client .NewRequest (reggie .HEAD , "/v2/<name>/blobs/<digest>" ,
159
+ reggie .WithDigest (testBlobs ["sha512" ][0 ].Digest ))
160
+ resp , err := client .Do (req )
161
+ Expect (err ).To (BeNil ())
162
+ Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
163
+ if h := resp .Header ().Get ("Docker-Content-Digest" ); h != "" {
164
+ Expect (h ).To (Equal (testBlobs ["sha512" ][0 ].Digest ))
165
+ }
166
+ })
167
+
133
168
g .Specify ("GET nonexistent blob should result in 404 response" , func () {
134
169
SkipIfDisabled (pull )
135
170
req := client .NewRequest (reggie .GET , "/v2/<name>/blobs/<digest>" ,
@@ -146,6 +181,15 @@ var test01Pull = func() {
146
181
Expect (err ).To (BeNil ())
147
182
Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
148
183
})
184
+
185
+ g .Specify ("GET request to existing sha512 blob URL should yield 200" , func () {
186
+ SkipIfDisabled (pull )
187
+ req := client .NewRequest (reggie .GET , "/v2/<name>/blobs/<digest>" ,
188
+ reggie .WithDigest (testBlobs ["sha512" ][0 ].Digest ))
189
+ resp , err := client .Do (req )
190
+ Expect (err ).To (BeNil ())
191
+ Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
192
+ })
149
193
})
150
194
151
195
g .Context ("Pull manifests" , func () {
@@ -182,10 +226,23 @@ var test01Pull = func() {
182
226
}
183
227
})
184
228
229
+ g .Specify ("HEAD request to sha512 manifest (digest) should yield 200 response" , func () {
230
+ SkipIfDisabled (pull )
231
+ req := client .NewRequest (reggie .HEAD , "/v2/<name>/manifests/<digest>" ,
232
+ reggie .WithDigest (testManifests ["sha512" ].Digest )).
233
+ SetHeader ("Accept" , "application/vnd.oci.image.manifest.v1+json" )
234
+ resp , err := client .Do (req )
235
+ Expect (err ).To (BeNil ())
236
+ Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
237
+ if h := resp .Header ().Get ("Docker-Content-Digest" ); h != "" {
238
+ Expect (h ).To (Equal (testManifests ["sha512" ].Digest ))
239
+ }
240
+ })
241
+
185
242
g .Specify ("HEAD request to manifest path (tag) should yield 200 response" , func () {
186
243
SkipIfDisabled (pull )
187
- Expect (tag ).ToNot (BeEmpty ())
188
- req := client .NewRequest (reggie .HEAD , "/v2/<name>/manifests/<reference>" , reggie .WithReference (tag )).
244
+ Expect (testTagName ).ToNot (BeEmpty ())
245
+ req := client .NewRequest (reggie .HEAD , "/v2/<name>/manifests/<reference>" , reggie .WithReference (testTagName )).
189
246
SetHeader ("Accept" , "application/vnd.oci.image.manifest.v1+json" )
190
247
resp , err := client .Do (req )
191
248
Expect (err ).To (BeNil ())
@@ -195,6 +252,19 @@ var test01Pull = func() {
195
252
}
196
253
})
197
254
255
+ g .Specify ("HEAD request to sha512 manifest (tag) should yield 200 response" , func () {
256
+ SkipIfDisabled (pull )
257
+ Expect (testTag512Name ).ToNot (BeEmpty ())
258
+ req := client .NewRequest (reggie .HEAD , "/v2/<name>/manifests/<reference>" , reggie .WithReference (testTag512Name )).
259
+ SetHeader ("Accept" , "application/vnd.oci.image.manifest.v1+json" )
260
+ resp , err := client .Do (req )
261
+ Expect (err ).To (BeNil ())
262
+ Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
263
+ if h := resp .Header ().Get ("Docker-Content-Digest" ); h != "" {
264
+ Expect (h ).To (Equal (testManifests ["sha512" ].Digest ))
265
+ }
266
+ })
267
+
198
268
g .Specify ("GET nonexistent manifest should return 404" , func () {
199
269
SkipIfDisabled (pull )
200
270
req := client .NewRequest (reggie .GET , "/v2/<name>/manifests/<reference>" ,
@@ -222,10 +292,29 @@ var test01Pull = func() {
222
292
Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
223
293
})
224
294
295
+ g .Specify ("GET request to sha512 manifest (digest) should yield 200 response" , func () {
296
+ SkipIfDisabled (pull )
297
+ req := client .NewRequest (reggie .GET , "/v2/<name>/manifests/<digest>" , reggie .WithDigest (testManifests ["sha512" ].Digest )).
298
+ SetHeader ("Accept" , "application/vnd.oci.image.manifest.v1+json" )
299
+ resp , err := client .Do (req )
300
+ Expect (err ).To (BeNil ())
301
+ Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
302
+ })
303
+
225
304
g .Specify ("GET request to manifest path (tag) should yield 200 response" , func () {
226
305
SkipIfDisabled (pull )
227
- Expect (tag ).ToNot (BeEmpty ())
228
- req := client .NewRequest (reggie .GET , "/v2/<name>/manifests/<reference>" , reggie .WithReference (tag )).
306
+ Expect (testTagName ).ToNot (BeEmpty ())
307
+ req := client .NewRequest (reggie .GET , "/v2/<name>/manifests/<reference>" , reggie .WithReference (testTagName )).
308
+ SetHeader ("Accept" , "application/vnd.oci.image.manifest.v1+json" )
309
+ resp , err := client .Do (req )
310
+ Expect (err ).To (BeNil ())
311
+ Expect (resp .StatusCode ()).To (Equal (http .StatusOK ))
312
+ })
313
+
314
+ g .Specify ("GET request to sha512 manifest (tag) should yield 200 response" , func () {
315
+ SkipIfDisabled (pull )
316
+ Expect (testTag512Name ).ToNot (BeEmpty ())
317
+ req := client .NewRequest (reggie .GET , "/v2/<name>/manifests/<reference>" , reggie .WithReference (testTag512Name )).
229
318
SetHeader ("Accept" , "application/vnd.oci.image.manifest.v1+json" )
230
319
resp , err := client .Do (req )
231
320
Expect (err ).To (BeNil ())
@@ -285,6 +374,20 @@ var test01Pull = func() {
285
374
Equal (http .StatusMethodNotAllowed ),
286
375
))
287
376
})
377
+ g .Specify ("Delete sha512 manifest created in setup" , func () {
378
+ SkipIfDisabled (pull )
379
+ RunOnlyIf (runPull512Setup )
380
+ req := client .NewRequest (reggie .DELETE , "/v2/<name>/manifests/<digest>" , reggie .WithDigest (testManifests ["sha512" ].Digest ))
381
+ resp , err := client .Do (req )
382
+ Expect (err ).To (BeNil ())
383
+ Expect (resp .StatusCode ()).To (SatisfyAny (
384
+ SatisfyAll (
385
+ BeNumerically (">=" , 200 ),
386
+ BeNumerically ("<" , 300 ),
387
+ ),
388
+ Equal (http .StatusMethodNotAllowed ),
389
+ ))
390
+ })
288
391
}
289
392
290
393
g .Specify ("Delete config[0] blob created in setup" , func () {
@@ -331,6 +434,24 @@ var test01Pull = func() {
331
434
))
332
435
})
333
436
437
+ for _ , blob := range testBlobs ["sha512" ] {
438
+ g .Specify ("Delete blob created in setup" , func () {
439
+ SkipIfDisabled (pull )
440
+ RunOnlyIf (runPull512Setup )
441
+ req := client .NewRequest (reggie .DELETE , "/v2/<name>/blobs/<digest>" , reggie .WithDigest (blob .Digest ))
442
+ resp , err := client .Do (req )
443
+ Expect (err ).To (BeNil ())
444
+ Expect (resp .StatusCode ()).To (SatisfyAny (
445
+ SatisfyAll (
446
+ BeNumerically (">=" , 200 ),
447
+ BeNumerically ("<" , 300 ),
448
+ ),
449
+ Equal (http .StatusNotFound ),
450
+ Equal (http .StatusMethodNotAllowed ),
451
+ ))
452
+ })
453
+ }
454
+
334
455
if ! deleteManifestBeforeBlobs {
335
456
g .Specify ("Delete manifest[0] created in setup" , func () {
336
457
SkipIfDisabled (pull )
@@ -360,6 +481,20 @@ var test01Pull = func() {
360
481
Equal (http .StatusMethodNotAllowed ),
361
482
))
362
483
})
484
+ g .Specify ("Delete sha512 manifest created in setup" , func () {
485
+ SkipIfDisabled (pull )
486
+ RunOnlyIf (runPull512Setup )
487
+ req := client .NewRequest (reggie .DELETE , "/v2/<name>/manifests/<digest>" , reggie .WithDigest (testManifests ["sha512" ].Digest ))
488
+ resp , err := client .Do (req )
489
+ Expect (err ).To (BeNil ())
490
+ Expect (resp .StatusCode ()).To (SatisfyAny (
491
+ SatisfyAll (
492
+ BeNumerically (">=" , 200 ),
493
+ BeNumerically ("<" , 300 ),
494
+ ),
495
+ Equal (http .StatusMethodNotAllowed ),
496
+ ))
497
+ })
363
498
}
364
499
})
365
500
})
0 commit comments