@@ -2,6 +2,7 @@ package imageprune
2
2
3
3
import (
4
4
"bytes"
5
+ "errors"
5
6
"flag"
6
7
"fmt"
7
8
"io/ioutil"
@@ -73,7 +74,7 @@ func TestImagePruning(t *testing.T) {
73
74
imageStreamDeleterErr error
74
75
layerDeleterErr error
75
76
manifestDeleterErr error
76
- blobDeleterErr error
77
+ blobDeleterErrorGetter errorForSHA
77
78
expectedImageDeletions []string
78
79
expectedStreamUpdates []string
79
80
expectedLayerLinkDeletions []string
@@ -406,7 +407,7 @@ func TestImagePruning(t *testing.T) {
406
407
testutil .UnmanagedImage ("sha256:0000000000000000000000000000000000000000000000000000000000000000" , "otherregistry/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000000" , false , "" , "" ),
407
408
testutil .Image ("sha256:0000000000000000000000000000000000000000000000000000000000000002" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000002" ),
408
409
testutil .Image ("sha256:0000000000000000000000000000000000000000000000000000000000000003" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000003" ),
409
- testutil .Image ("sha256:0000000000000000000000000000000000000000000000000000000000000004" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000004" ),
410
+ testutil .ImageWithLayers ("sha256:0000000000000000000000000000000000000000000000000000000000000004" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000004" , nil , "layer1" , "layer2 " ),
410
411
),
411
412
streams : testutil .StreamList (
412
413
testutil .Stream (registryHost , "foo" , "bar" , testutil .Tags (
@@ -418,12 +419,49 @@ func TestImagePruning(t *testing.T) {
418
419
),
419
420
)),
420
421
),
421
- blobDeleterErr : fmt .Errorf ("err" ),
422
+ blobDeleterErrorGetter : func (dgst string ) error {
423
+ if dgst == "layer1" {
424
+ return errors .New ("err" )
425
+ }
426
+ return nil
427
+ },
422
428
expectedImageDeletions : []string {"sha256:0000000000000000000000000000000000000000000000000000000000000004" },
423
429
expectedStreamUpdates : []string {"foo/bar|sha256:0000000000000000000000000000000000000000000000000000000000000004" },
424
430
expectedManifestLinkDeletions : []string {registryURL + "|foo/bar|sha256:0000000000000000000000000000000000000000000000000000000000000004" },
425
- expectedBlobDeletions : []string {registryURL + "|" + "sha256:0000000000000000000000000000000000000000000000000000000000000004" },
426
- expectedFailures : []string {registryURL + "|" + "sha256:0000000000000000000000000000000000000000000000000000000000000004|err" },
431
+ expectedLayerLinkDeletions : []string {registryURL + "|foo/bar|layer1" , registryURL + "|foo/bar|layer2" },
432
+ expectedBlobDeletions : []string {
433
+ registryURL + "|" + "layer1" ,
434
+ registryURL + "|" + "layer2" ,
435
+ registryURL + "|" + "sha256:0000000000000000000000000000000000000000000000000000000000000004" ,
436
+ },
437
+ expectedFailures : []string {registryURL + "|" + "layer1|err" },
438
+ },
439
+
440
+ {
441
+ name : "keep image when all blob deletions fail" ,
442
+ images : testutil .ImageList (
443
+ testutil .UnmanagedImage ("sha256:0000000000000000000000000000000000000000000000000000000000000000" , "otherregistry/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000000" , false , "" , "" ),
444
+ testutil .Image ("sha256:0000000000000000000000000000000000000000000000000000000000000002" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000002" ),
445
+ testutil .Image ("sha256:0000000000000000000000000000000000000000000000000000000000000003" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000003" ),
446
+ testutil .ImageWithLayers ("sha256:0000000000000000000000000000000000000000000000000000000000000004" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000004" , nil , "layer1" , "layer2" ),
447
+ ),
448
+ streams : testutil .StreamList (
449
+ testutil .Stream (registryHost , "foo" , "bar" , testutil .Tags (
450
+ testutil .Tag ("latest" ,
451
+ testutil .TagEvent ("sha256:0000000000000000000000000000000000000000000000000000000000000000" , "otherregistry/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000000" ),
452
+ testutil .TagEvent ("sha256:0000000000000000000000000000000000000000000000000000000000000002" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000002" ),
453
+ testutil .TagEvent ("sha256:0000000000000000000000000000000000000000000000000000000000000003" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000003" ),
454
+ testutil .TagEvent ("sha256:0000000000000000000000000000000000000000000000000000000000000004" , registryHost + "/foo/bar@sha256:0000000000000000000000000000000000000000000000000000000000000004" ),
455
+ ),
456
+ )),
457
+ ),
458
+ blobDeleterErrorGetter : func (dgst string ) error { return errors .New ("err" ) },
459
+ expectedImageDeletions : []string {},
460
+ expectedStreamUpdates : []string {"foo/bar|sha256:0000000000000000000000000000000000000000000000000000000000000004" },
461
+ expectedManifestLinkDeletions : []string {registryURL + "|foo/bar|sha256:0000000000000000000000000000000000000000000000000000000000000004" },
462
+ expectedLayerLinkDeletions : []string {registryURL + "|foo/bar|layer1" , registryURL + "|foo/bar|layer2" },
463
+ expectedBlobDeletions : []string {registryURL + "|layer1" , registryURL + "|layer2" , registryURL + "|" + "sha256:0000000000000000000000000000000000000000000000000000000000000004" },
464
+ expectedFailures : []string {registryURL + "|" + "layer1|err" , registryURL + "|" + "layer2|err" , registryURL + "|sha256:0000000000000000000000000000000000000000000000000000000000000004|err" },
427
465
},
428
466
429
467
{
@@ -1195,7 +1233,7 @@ func TestImagePruning(t *testing.T) {
1195
1233
imageDeleter , imageDeleterFactory := newFakeImageDeleter (test .imageDeleterErr )
1196
1234
streamDeleter := & fakeImageStreamDeleter {err : test .imageStreamDeleterErr , invocations : sets .NewString ()}
1197
1235
layerLinkDeleter := & fakeLayerLinkDeleter {err : test .layerDeleterErr , invocations : sets .NewString ()}
1198
- blobDeleter := & fakeBlobDeleter {err : test .blobDeleterErr , invocations : sets .NewString ()}
1236
+ blobDeleter := & fakeBlobDeleter {getError : test .blobDeleterErrorGetter , invocations : sets .NewString ()}
1199
1237
manifestDeleter := & fakeManifestDeleter {err : test .manifestDeleterErr , invocations : sets .NewString ()}
1200
1238
1201
1239
deletions , failures := p .Prune (imageDeleterFactory , streamDeleter , layerLinkDeleter , blobDeleter , manifestDeleter )
@@ -2166,10 +2204,12 @@ func (p *fakeImageStreamDeleter) NotifyImageStreamPrune(stream *imageapi.ImageSt
2166
2204
return
2167
2205
}
2168
2206
2207
+ type errorForSHA func (dgst string ) error
2208
+
2169
2209
type fakeBlobDeleter struct {
2170
2210
mutex sync.Mutex
2171
2211
invocations sets.String
2172
- err error
2212
+ getError errorForSHA
2173
2213
}
2174
2214
2175
2215
var _ BlobDeleter = & fakeBlobDeleter {}
@@ -2178,7 +2218,10 @@ func (p *fakeBlobDeleter) DeleteBlob(registryClient *http.Client, registryURL *u
2178
2218
p .mutex .Lock ()
2179
2219
defer p .mutex .Unlock ()
2180
2220
p .invocations .Insert (fmt .Sprintf ("%s|%s" , registryURL .String (), blob ))
2181
- return p .err
2221
+ if p .getError == nil {
2222
+ return nil
2223
+ }
2224
+ return p .getError (blob )
2182
2225
}
2183
2226
2184
2227
type fakeLayerLinkDeleter struct {
0 commit comments