@@ -23,7 +23,6 @@ import (
23
23
"fmt"
24
24
"io"
25
25
"os"
26
- "path"
27
26
"path/filepath"
28
27
"strings"
29
28
"testing"
@@ -268,7 +267,7 @@ func TestStorageRemoveAllButCurrent(t *testing.T) {
268
267
t .Fatalf ("Valid path did not successfully return: %v" , err )
269
268
}
270
269
271
- if _ , err := s .RemoveAllButCurrent (sourcev1.Artifact {Path : path .Join (dir , "really" , "nonexistent" )}); err == nil {
270
+ if _ , err := s .RemoveAllButCurrent (sourcev1.Artifact {Path : filepath .Join (dir , "really" , "nonexistent" )}); err == nil {
272
271
t .Fatal ("Did not error while pruning non-existent path" )
273
272
}
274
273
})
@@ -281,18 +280,18 @@ func TestStorageRemoveAllButCurrent(t *testing.T) {
281
280
g .Expect (err ).ToNot (HaveOccurred (), "failed to create new storage" )
282
281
283
282
artifact := sourcev1.Artifact {
284
- Path : path .Join ("foo" , "bar" , "artifact1.tar.gz" ),
283
+ Path : filepath .Join ("foo" , "bar" , "artifact1.tar.gz" ),
285
284
}
286
285
287
286
// Create artifact dir and artifacts.
288
- artifactDir := path .Join (dir , "foo" , "bar" )
287
+ artifactDir := filepath .Join (dir , "foo" , "bar" )
289
288
g .Expect (os .MkdirAll (artifactDir , 0o750 )).NotTo (HaveOccurred ())
290
289
current := []string {
291
- path .Join (artifactDir , "artifact1.tar.gz" ),
290
+ filepath .Join (artifactDir , "artifact1.tar.gz" ),
292
291
}
293
292
wantDeleted := []string {
294
- path .Join (artifactDir , "file1.txt" ),
295
- path .Join (artifactDir , "file2.txt" ),
293
+ filepath .Join (artifactDir , "file1.txt" ),
294
+ filepath .Join (artifactDir , "file2.txt" ),
296
295
}
297
296
createFile := func (files []string ) {
298
297
for _ , c := range files {
@@ -321,15 +320,15 @@ func TestStorageRemoveAll(t *testing.T) {
321
320
}{
322
321
{
323
322
name : "delete non-existent path" ,
324
- artifactPath : path .Join ("foo" , "bar" , "artifact1.tar.gz" ),
323
+ artifactPath : filepath .Join ("foo" , "bar" , "artifact1.tar.gz" ),
325
324
createArtifactPath : false ,
326
325
wantDeleted : "" ,
327
326
},
328
327
{
329
328
name : "delete existing path" ,
330
- artifactPath : path .Join ("foo" , "bar" , "artifact1.tar.gz" ),
329
+ artifactPath : filepath .Join ("foo" , "bar" , "artifact1.tar.gz" ),
331
330
createArtifactPath : true ,
332
- wantDeleted : path .Join ("foo" , "bar" ),
331
+ wantDeleted : filepath .Join ("foo" , "bar" ),
333
332
},
334
333
}
335
334
@@ -346,7 +345,7 @@ func TestStorageRemoveAll(t *testing.T) {
346
345
}
347
346
348
347
if tt .createArtifactPath {
349
- g .Expect (os .MkdirAll (path .Join (dir , tt .artifactPath ), 0o750 )).ToNot (HaveOccurred ())
348
+ g .Expect (os .MkdirAll (filepath .Join (dir , tt .artifactPath ), 0o750 )).ToNot (HaveOccurred ())
350
349
}
351
350
352
351
deleted , err := s .RemoveAll (artifact )
@@ -449,7 +448,7 @@ func TestStorageCopyFromPath(t *testing.T) {
449
448
}
450
449
451
450
func TestStorage_getGarbageFiles (t * testing.T ) {
452
- artifactFolder := path .Join ("foo" , "bar" )
451
+ artifactFolder := filepath .Join ("foo" , "bar" )
453
452
tests := []struct {
454
453
name string
455
454
artifactPaths []string
@@ -462,77 +461,119 @@ func TestStorage_getGarbageFiles(t *testing.T) {
462
461
{
463
462
name : "delete files based on maxItemsToBeRetained" ,
464
463
artifactPaths : []string {
465
- path .Join (artifactFolder , "artifact1.tar.gz" ),
466
- path .Join (artifactFolder , "artifact2.tar.gz" ),
467
- path .Join (artifactFolder , "artifact3.tar.gz" ),
468
- path .Join (artifactFolder , "artifact4.tar.gz" ),
469
- path .Join (artifactFolder , "artifact5.tar.gz" ),
464
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
465
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
466
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
467
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
468
+ filepath .Join (artifactFolder , "artifact5.tar.gz" ),
470
469
},
471
470
createPause : time .Millisecond * 10 ,
472
471
ttl : time .Minute * 2 ,
473
472
totalCountLimit : 10 ,
474
473
maxItemsToBeRetained : 2 ,
475
474
wantDeleted : []string {
476
- path .Join (artifactFolder , "artifact1.tar.gz" ),
477
- path .Join (artifactFolder , "artifact2.tar.gz" ),
478
- path .Join (artifactFolder , "artifact3.tar.gz" ),
475
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
476
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
477
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
478
+ },
479
+ },
480
+ {
481
+ name : "delete files based on maxItemsToBeRetained, ignore lock files" ,
482
+ artifactPaths : []string {
483
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
484
+ filepath .Join (artifactFolder , "artifact1.tar.gz.lock" ),
485
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
486
+ filepath .Join (artifactFolder , "artifact2.tar.gz.lock" ),
487
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
488
+ filepath .Join (artifactFolder , "artifact3.tar.gz.lock" ),
489
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
490
+ filepath .Join (artifactFolder , "artifact5.tar.gz" ),
491
+ },
492
+ createPause : time .Millisecond * 10 ,
493
+ ttl : time .Minute * 2 ,
494
+ totalCountLimit : 10 ,
495
+ maxItemsToBeRetained : 2 ,
496
+ wantDeleted : []string {
497
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
498
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
499
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
479
500
},
480
501
},
481
502
{
482
503
name : "delete files based on ttl" ,
483
504
artifactPaths : []string {
484
- path .Join (artifactFolder , "artifact1.tar.gz" ),
485
- path .Join (artifactFolder , "artifact2.tar.gz" ),
486
- path .Join (artifactFolder , "artifact3.tar.gz" ),
487
- path .Join (artifactFolder , "artifact4.tar.gz" ),
488
- path .Join (artifactFolder , "artifact5.tar.gz" ),
505
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
506
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
507
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
508
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
509
+ filepath .Join (artifactFolder , "artifact5.tar.gz" ),
510
+ },
511
+ createPause : time .Second * 1 ,
512
+ ttl : time .Second * 3 + time .Millisecond * 500 ,
513
+ totalCountLimit : 10 ,
514
+ maxItemsToBeRetained : 4 ,
515
+ wantDeleted : []string {
516
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
517
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
518
+ },
519
+ },
520
+ {
521
+ name : "delete files based on ttl, ignore lock files" ,
522
+ artifactPaths : []string {
523
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
524
+ filepath .Join (artifactFolder , "artifact1.tar.gz.lock" ),
525
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
526
+ filepath .Join (artifactFolder , "artifact2.tar.gz.lock" ),
527
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
528
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
529
+ filepath .Join (artifactFolder , "artifact5.tar.gz" ),
489
530
},
490
531
createPause : time .Second * 1 ,
491
532
ttl : time .Second * 3 + time .Millisecond * 500 ,
492
533
totalCountLimit : 10 ,
493
534
maxItemsToBeRetained : 4 ,
494
535
wantDeleted : []string {
495
- path .Join (artifactFolder , "artifact1.tar.gz" ),
496
- path .Join (artifactFolder , "artifact2.tar.gz" ),
536
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
537
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
497
538
},
498
539
},
499
540
{
500
541
name : "delete files based on ttl and maxItemsToBeRetained" ,
501
542
artifactPaths : []string {
502
- path .Join (artifactFolder , "artifact1.tar.gz" ),
503
- path .Join (artifactFolder , "artifact2.tar.gz" ),
504
- path .Join (artifactFolder , "artifact3.tar.gz" ),
505
- path .Join (artifactFolder , "artifact4.tar.gz" ),
506
- path .Join (artifactFolder , "artifact5.tar.gz" ),
507
- path .Join (artifactFolder , "artifact6.tar.gz" ),
543
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
544
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
545
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
546
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
547
+ filepath .Join (artifactFolder , "artifact5.tar.gz" ),
548
+ filepath .Join (artifactFolder , "artifact6.tar.gz" ),
508
549
},
509
550
createPause : time .Second * 1 ,
510
551
ttl : time .Second * 5 + time .Millisecond * 500 ,
511
552
totalCountLimit : 10 ,
512
553
maxItemsToBeRetained : 4 ,
513
554
wantDeleted : []string {
514
- path .Join (artifactFolder , "artifact1.tar.gz" ),
515
- path .Join (artifactFolder , "artifact2.tar.gz" ),
555
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
556
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
516
557
},
517
558
},
518
559
{
519
560
name : "delete files based on ttl and maxItemsToBeRetained and totalCountLimit" ,
520
561
artifactPaths : []string {
521
- path .Join (artifactFolder , "artifact1.tar.gz" ),
522
- path .Join (artifactFolder , "artifact2.tar.gz" ),
523
- path .Join (artifactFolder , "artifact3.tar.gz" ),
524
- path .Join (artifactFolder , "artifact4.tar.gz" ),
525
- path .Join (artifactFolder , "artifact5.tar.gz" ),
526
- path .Join (artifactFolder , "artifact6.tar.gz" ),
562
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
563
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
564
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
565
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
566
+ filepath .Join (artifactFolder , "artifact5.tar.gz" ),
567
+ filepath .Join (artifactFolder , "artifact6.tar.gz" ),
527
568
},
528
569
createPause : time .Millisecond * 500 ,
529
570
ttl : time .Millisecond * 500 ,
530
571
totalCountLimit : 3 ,
531
572
maxItemsToBeRetained : 2 ,
532
573
wantDeleted : []string {
533
- path .Join (artifactFolder , "artifact1.tar.gz" ),
534
- path .Join (artifactFolder , "artifact2.tar.gz" ),
535
- path .Join (artifactFolder , "artifact3.tar.gz" ),
574
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
575
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
576
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
536
577
},
537
578
},
538
579
}
@@ -548,9 +589,9 @@ func TestStorage_getGarbageFiles(t *testing.T) {
548
589
artifact := sourcev1.Artifact {
549
590
Path : tt .artifactPaths [len (tt .artifactPaths )- 1 ],
550
591
}
551
- g .Expect (os .MkdirAll (path .Join (dir , artifactFolder ), 0o750 )).ToNot (HaveOccurred ())
592
+ g .Expect (os .MkdirAll (filepath .Join (dir , artifactFolder ), 0o750 )).ToNot (HaveOccurred ())
552
593
for _ , artifactPath := range tt .artifactPaths {
553
- f , err := os .Create (path .Join (dir , artifactPath ))
594
+ f , err := os .Create (filepath .Join (dir , artifactPath ))
554
595
g .Expect (err ).ToNot (HaveOccurred ())
555
596
g .Expect (f .Close ()).ToNot (HaveOccurred ())
556
597
time .Sleep (tt .createPause )
@@ -576,35 +617,44 @@ func TestStorage_getGarbageFiles(t *testing.T) {
576
617
}
577
618
578
619
func TestStorage_GarbageCollect (t * testing.T ) {
579
- artifactFolder := path .Join ("foo" , "bar" )
620
+ artifactFolder := filepath .Join ("foo" , "bar" )
580
621
tests := []struct {
581
622
name string
582
623
artifactPaths []string
624
+ wantCollected []string
583
625
wantDeleted []string
584
626
wantErr string
585
627
ctxTimeout time.Duration
586
628
}{
587
629
{
588
630
name : "garbage collects" ,
589
631
artifactPaths : []string {
590
- path .Join (artifactFolder , "artifact1.tar.gz" ),
591
- path .Join (artifactFolder , "artifact2.tar.gz" ),
592
- path .Join (artifactFolder , "artifact3.tar.gz" ),
593
- path .Join (artifactFolder , "artifact4.tar.gz" ),
632
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
633
+ filepath .Join (artifactFolder , "artifact1.tar.gz.lock" ),
634
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
635
+ filepath .Join (artifactFolder , "artifact2.tar.gz.lock" ),
636
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
637
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
638
+ },
639
+ wantCollected : []string {
640
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
641
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
594
642
},
595
643
wantDeleted : []string {
596
- path .Join (artifactFolder , "artifact1.tar.gz" ),
597
- path .Join (artifactFolder , "artifact2.tar.gz" ),
644
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
645
+ filepath .Join (artifactFolder , "artifact1.tar.gz.lock" ),
646
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
647
+ filepath .Join (artifactFolder , "artifact2.tar.gz.lock" ),
598
648
},
599
649
ctxTimeout : time .Second * 1 ,
600
650
},
601
651
{
602
652
name : "garbage collection fails with context timeout" ,
603
653
artifactPaths : []string {
604
- path .Join (artifactFolder , "artifact1.tar.gz" ),
605
- path .Join (artifactFolder , "artifact2.tar.gz" ),
606
- path .Join (artifactFolder , "artifact3.tar.gz" ),
607
- path .Join (artifactFolder , "artifact4.tar.gz" ),
654
+ filepath .Join (artifactFolder , "artifact1.tar.gz" ),
655
+ filepath .Join (artifactFolder , "artifact2.tar.gz" ),
656
+ filepath .Join (artifactFolder , "artifact3.tar.gz" ),
657
+ filepath .Join (artifactFolder , "artifact4.tar.gz" ),
608
658
},
609
659
wantErr : "context deadline exceeded" ,
610
660
ctxTimeout : time .Nanosecond * 1 ,
@@ -622,39 +672,42 @@ func TestStorage_GarbageCollect(t *testing.T) {
622
672
artifact := sourcev1.Artifact {
623
673
Path : tt .artifactPaths [len (tt .artifactPaths )- 1 ],
624
674
}
625
- g .Expect (os .MkdirAll (path .Join (dir , artifactFolder ), 0o750 )).ToNot (HaveOccurred ())
675
+ g .Expect (os .MkdirAll (filepath .Join (dir , artifactFolder ), 0o750 )).ToNot (HaveOccurred ())
626
676
for i , artifactPath := range tt .artifactPaths {
627
- f , err := os .Create (path .Join (dir , artifactPath ))
677
+ f , err := os .Create (filepath .Join (dir , artifactPath ))
628
678
g .Expect (err ).ToNot (HaveOccurred ())
629
679
g .Expect (f .Close ()).ToNot (HaveOccurred ())
630
680
if i != len (tt .artifactPaths )- 1 {
631
681
time .Sleep (time .Second * 1 )
632
682
}
633
683
}
634
684
635
- deletedPaths , err := s .GarbageCollect (context .TODO (), artifact , tt .ctxTimeout )
685
+ collectedPaths , err := s .GarbageCollect (context .TODO (), artifact , tt .ctxTimeout )
636
686
if tt .wantErr == "" {
637
687
g .Expect (err ).ToNot (HaveOccurred (), "failed to collect garbage files" )
638
688
} else {
639
689
g .Expect (err ).To (HaveOccurred ())
640
690
g .Expect (err .Error ()).To (ContainSubstring (tt .wantErr ))
641
691
}
642
- if len (tt .wantDeleted ) > 0 {
643
- g .Expect (len (tt .wantDeleted )).To (Equal (len (deletedPaths )))
644
- for _ , wantDeletedPath := range tt .wantDeleted {
692
+ if len (tt .wantCollected ) > 0 {
693
+ g .Expect (len (tt .wantCollected )).To (Equal (len (collectedPaths )))
694
+ for _ , wantCollectedPath := range tt .wantCollected {
645
695
present := false
646
- for _ , deletedPath := range deletedPaths {
647
- if strings .Contains (deletedPath , wantDeletedPath ) {
648
- g .Expect (deletedPath ).ToNot (BeAnExistingFile ())
696
+ for _ , collectedPath := range collectedPaths {
697
+ if strings .Contains (collectedPath , wantCollectedPath ) {
698
+ g .Expect (collectedPath ).ToNot (BeAnExistingFile ())
649
699
present = true
650
700
break
651
701
}
652
702
}
653
703
if present == false {
654
- g .Fail (fmt .Sprintf ("expected file to be deleted , still exists: %s" , wantDeletedPath ))
704
+ g .Fail (fmt .Sprintf ("expected file to be garbage collected , still exists: %s" , wantCollectedPath ))
655
705
}
656
706
}
657
707
}
708
+ for _ , delFile := range tt .wantDeleted {
709
+ g .Expect (filepath .Join (dir , delFile )).ToNot (BeAnExistingFile ())
710
+ }
658
711
})
659
712
}
660
713
}
0 commit comments