@@ -99,6 +99,7 @@ func TestRepositoryBlobStat(t *testing.T) {
99
99
stat string
100
100
images []imageapiv1.Image
101
101
imageStreams []imageapiv1.ImageStream
102
+ imageStreamLayers []imageapiv1.ImageStreamLayers
102
103
skipAuth bool
103
104
deferredErrors deferredErrors
104
105
expectedDescriptor distribution.Descriptor
@@ -141,7 +142,7 @@ func TestRepositoryBlobStat(t *testing.T) {
141
142
},
142
143
143
144
{
144
- name : "blob referenced only by unmanaged image with pullthrough on" ,
145
+ name : "blob referenced only by unmanaged image with pullthrough on and server doesn't support layers subresource " ,
145
146
stat : "nm/unmanaged@" + testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].Name ,
146
147
images : []imageapiv1.Image {* testImages ["nm/unmanaged:missing-layer-links" ][0 ]},
147
148
imageStreams : []imageapiv1.ImageStream {
@@ -168,6 +169,87 @@ func TestRepositoryBlobStat(t *testing.T) {
168
169
expectedActions : []clientAction {{"get" , "imagestreams/layers" }, {"get" , "imagestreams" }, {"get" , "images" }},
169
170
},
170
171
172
+ {
173
+ name : "blob not referenced and server supports layers subresource" ,
174
+ stat : "nm/unmanaged@" + testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].Name ,
175
+ imageStreams : []imageapiv1.ImageStream {
176
+ {
177
+ ObjectMeta : metav1.ObjectMeta {
178
+ Namespace : "nm" ,
179
+ Name : "unmanaged" ,
180
+ },
181
+ Status : imageapiv1.ImageStreamStatus {
182
+ Tags : []imageapiv1.NamedTagEventList {
183
+ {
184
+ Tag : "latest" ,
185
+ Items : []imageapiv1.TagEvent {
186
+ {
187
+ Image : testImages ["nm/unmanaged:missing-layer-links" ][0 ].Name ,
188
+ },
189
+ },
190
+ },
191
+ },
192
+ },
193
+ },
194
+ },
195
+ imageStreamLayers : []imageapiv1.ImageStreamLayers {
196
+ {
197
+ ObjectMeta : metav1.ObjectMeta {
198
+ Namespace : "nm" ,
199
+ Name : "unmanaged" ,
200
+ },
201
+ Blobs : map [string ]imageapiv1.ImageLayerData {
202
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].Name : {
203
+ LayerSize : & testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].LayerSize ,
204
+ MediaType : testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].MediaType ,
205
+ },
206
+ },
207
+ Images : map [string ]imageapiv1.ImageBlobReferences {
208
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].Name : {
209
+ Layers : []string {
210
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].Name ,
211
+ },
212
+ },
213
+ },
214
+ },
215
+ },
216
+ expectedError : distribution .ErrBlobUnknown ,
217
+ expectedActions : []clientAction {{"get" , "imagestreams/layers" }, {"get" , "imagestreams" }, {"get" , "imagestreams/secrets" }},
218
+ },
219
+
220
+ {
221
+ name : "blob referenced only by unmanaged image with pullthrough on and server supports layers subresource" ,
222
+ stat : "nm/unmanaged@" + testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].Name ,
223
+ imageStreamLayers : []imageapiv1.ImageStreamLayers {
224
+ {
225
+ ObjectMeta : metav1.ObjectMeta {
226
+ Namespace : "nm" ,
227
+ Name : "unmanaged" ,
228
+ },
229
+ Blobs : map [string ]imageapiv1.ImageLayerData {
230
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].Name : {
231
+ LayerSize : & testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].LayerSize ,
232
+ MediaType : testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].MediaType ,
233
+ },
234
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].Name : {
235
+ LayerSize : & testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].LayerSize ,
236
+ MediaType : testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].MediaType ,
237
+ },
238
+ },
239
+ Images : map [string ]imageapiv1.ImageBlobReferences {
240
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].Name : {
241
+ Layers : []string {
242
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [0 ].Name ,
243
+ testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ].Name ,
244
+ },
245
+ },
246
+ },
247
+ },
248
+ },
249
+ expectedDescriptor : testNewDescriptorForLayer (testImages ["nm/unmanaged:missing-layer-links" ][0 ].DockerImageLayers [1 ]),
250
+ expectedActions : []clientAction {{"get" , "imagestreams/layers" }},
251
+ },
252
+
171
253
{
172
254
// TODO: this should err out because of missing image stream.
173
255
// Unfortunately, it's not the case. Until we start storing layer links in etcd, we depend on
@@ -312,6 +394,13 @@ func TestRepositoryBlobStat(t *testing.T) {
312
394
}
313
395
}
314
396
397
+ for _ , image := range tc .imageStreamLayers {
398
+ _ , err = fos .CreateImageStreamLayers (image .Namespace , & image )
399
+ if err != nil {
400
+ t .Fatal (err )
401
+ }
402
+ }
403
+
315
404
reg , err := newTestRegistry (ctx , registryclient .NewFakeRegistryAPIClient (nil , imageClient ), driver , cfg .Cache .BlobRepositoryTTL , true )
316
405
if err != nil {
317
406
t .Fatalf ("unexpected error: %v" , err )
0 commit comments