@@ -2263,7 +2263,7 @@ func TestStore_PredecessorsAndDelete(t *testing.T) {
2263
2263
}
2264
2264
}
2265
2265
2266
- func TestStore_DeleteWithAutoGCAndAutoRemoveReferrers (t * testing.T ) {
2266
+ func TestStore_DeleteWithAutoGC (t * testing.T ) {
2267
2267
tempDir := t .TempDir ()
2268
2268
s , err := New (tempDir )
2269
2269
if err != nil {
@@ -2417,317 +2417,6 @@ func TestStore_DeleteWithAutoGCAndAutoRemoveReferrers(t *testing.T) {
2417
2417
}
2418
2418
}
2419
2419
2420
- func TestStore_DeleteDisableAutoRemoveReferrers (t * testing.T ) {
2421
- tempDir := t .TempDir ()
2422
- s , err := New (tempDir )
2423
- if err != nil {
2424
- t .Fatal ("New() error =" , err )
2425
- }
2426
- s .AutoDeleteReferrers = false
2427
- ctx := context .Background ()
2428
-
2429
- // generate test content
2430
- var blobs [][]byte
2431
- var descs []ocispec.Descriptor
2432
- appendBlob := func (mediaType string , blob []byte ) {
2433
- blobs = append (blobs , blob )
2434
- descs = append (descs , ocispec.Descriptor {
2435
- MediaType : mediaType ,
2436
- Digest : digest .FromBytes (blob ),
2437
- Size : int64 (len (blob )),
2438
- })
2439
- }
2440
- generateManifest := func (config ocispec.Descriptor , subject * ocispec.Descriptor , layers ... ocispec.Descriptor ) {
2441
- manifest := ocispec.Manifest {
2442
- Config : config ,
2443
- Subject : subject ,
2444
- Layers : layers ,
2445
- }
2446
- manifestJSON , err := json .Marshal (manifest )
2447
- if err != nil {
2448
- t .Fatal (err )
2449
- }
2450
- appendBlob (ocispec .MediaTypeImageManifest , manifestJSON )
2451
- }
2452
- generateIndex := func (manifests ... ocispec.Descriptor ) {
2453
- index := ocispec.Index {
2454
- Manifests : manifests ,
2455
- }
2456
- indexJSON , err := json .Marshal (index )
2457
- if err != nil {
2458
- t .Fatal (err )
2459
- }
2460
- appendBlob (ocispec .MediaTypeImageIndex , indexJSON )
2461
- }
2462
-
2463
- appendBlob (ocispec .MediaTypeImageConfig , []byte ("config" )) // Blob 0
2464
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("foo" )) // Blob 1
2465
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("bar" )) // Blob 2
2466
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("hello" )) // Blob 3
2467
- generateManifest (descs [0 ], nil , descs [1 ]) // Blob 4
2468
- generateManifest (descs [0 ], nil , descs [2 ]) // Blob 5
2469
- generateManifest (descs [0 ], nil , descs [3 ]) // Blob 6
2470
- generateIndex (descs [4 :6 ]... ) // Blob 7
2471
- generateIndex (descs [6 ]) // Blob 8
2472
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("world" )) // Blob 9
2473
- generateManifest (descs [0 ], & descs [6 ], descs [9 ]) // Blob 10
2474
- generateManifest (descs [0 ], & descs [10 ], descs [2 ]) // Blob 11
2475
-
2476
- eg , egCtx := errgroup .WithContext (ctx )
2477
- for i := range blobs {
2478
- eg .Go (func (i int ) func () error {
2479
- return func () error {
2480
- err := s .Push (egCtx , descs [i ], bytes .NewReader (blobs [i ]))
2481
- if err != nil {
2482
- return fmt .Errorf ("failed to push test content to src: %d: %v" , i , err )
2483
- }
2484
- return nil
2485
- }
2486
- }(i ))
2487
- }
2488
- if err := eg .Wait (); err != nil {
2489
- t .Fatal (err )
2490
- }
2491
-
2492
- // delete blob 4 and verify the result
2493
- if err := s .Delete (egCtx , descs [4 ]); err != nil {
2494
- t .Fatal (err )
2495
- }
2496
-
2497
- // blob 1 and 4 are now deleted, and other blobs are still present
2498
- notPresent := []ocispec.Descriptor {descs [1 ], descs [4 ]}
2499
- for _ , node := range notPresent {
2500
- if exists , _ := s .Exists (egCtx , node ); exists {
2501
- t .Errorf ("%v should not exist in store" , node )
2502
- }
2503
- }
2504
- stillPresent := []ocispec.Descriptor {descs [0 ], descs [2 ], descs [3 ], descs [5 ], descs [6 ], descs [7 ], descs [8 ], descs [9 ], descs [10 ], descs [11 ]}
2505
- for _ , node := range stillPresent {
2506
- if exists , _ := s .Exists (egCtx , node ); ! exists {
2507
- t .Errorf ("%v should exist in store" , node )
2508
- }
2509
- }
2510
-
2511
- // delete blob 8 and verify the result
2512
- if err := s .Delete (egCtx , descs [8 ]); err != nil {
2513
- t .Fatal (err )
2514
- }
2515
-
2516
- // blob 1, 4 and 8 are now deleted, and other blobs are still present
2517
- notPresent = []ocispec.Descriptor {descs [1 ], descs [4 ], descs [8 ]}
2518
- for _ , node := range notPresent {
2519
- if exists , _ := s .Exists (egCtx , node ); exists {
2520
- t .Errorf ("%v should not exist in store" , node )
2521
- }
2522
- }
2523
- stillPresent = []ocispec.Descriptor {descs [0 ], descs [2 ], descs [3 ], descs [5 ], descs [6 ], descs [7 ], descs [9 ], descs [10 ], descs [11 ]}
2524
- for _ , node := range stillPresent {
2525
- if exists , _ := s .Exists (egCtx , node ); ! exists {
2526
- t .Errorf ("%v should exist in store" , node )
2527
- }
2528
- }
2529
-
2530
- // delete blob 6 and verify the result
2531
- if err := s .Delete (egCtx , descs [6 ]); err != nil {
2532
- t .Fatal (err )
2533
- }
2534
-
2535
- // blob 1, 3, 4, 6, 8 are now deleted, and other blobs are still present
2536
- notPresent = []ocispec.Descriptor {descs [1 ], descs [3 ], descs [4 ], descs [6 ], descs [8 ]}
2537
- for _ , node := range notPresent {
2538
- if exists , _ := s .Exists (egCtx , node ); exists {
2539
- t .Errorf ("%v should not exist in store" , node )
2540
- }
2541
- }
2542
- stillPresent = []ocispec.Descriptor {descs [0 ], descs [2 ], descs [5 ], descs [7 ], descs [9 ], descs [10 ], descs [11 ]}
2543
- for _ , node := range stillPresent {
2544
- if exists , _ := s .Exists (egCtx , node ); ! exists {
2545
- t .Errorf ("%v should exist in store" , node )
2546
- }
2547
- }
2548
-
2549
- // verify predecessors information
2550
- wants := [][]ocispec.Descriptor {
2551
- {descs [5 ], descs [10 ], descs [11 ]}, // Blob 0
2552
- nil , // Blob 1
2553
- {descs [5 ], descs [11 ]}, // Blob 2
2554
- nil , // Blob 3
2555
- {descs [7 ]}, // Blob 4's predecessor is descs[7], even though blob 4 no longer exist
2556
- {descs [7 ]}, // Blob 5
2557
- {descs [10 ]}, // Blob 6's predecessor is descs[10], even though blob 6 no longer exist
2558
- nil , // Blob 7
2559
- nil , // Blob 8
2560
- {descs [10 ]}, // Blob 9
2561
- {descs [11 ]}, // Blob 10
2562
- nil , // Blob 11
2563
- }
2564
- for i , want := range wants {
2565
- predecessors , err := s .Predecessors (ctx , descs [i ])
2566
- if err != nil {
2567
- t .Errorf ("Store.Predecessors(%d) error = %v" , i , err )
2568
- }
2569
- if ! equalDescriptorSet (predecessors , want ) {
2570
- t .Errorf ("Store.Predecessors(%d) = %v, want %v" , i , predecessors , want )
2571
- }
2572
- }
2573
- }
2574
-
2575
- func TestStore_DeleteDisableAutoGCAndAutoRemoveReferrers (t * testing.T ) {
2576
- tempDir := t .TempDir ()
2577
- s , err := New (tempDir )
2578
- if err != nil {
2579
- t .Fatal ("New() error =" , err )
2580
- }
2581
- s .AutoDeleteReferrers = false
2582
- s .AutoGC = false
2583
- ctx := context .Background ()
2584
-
2585
- // generate test content
2586
- var blobs [][]byte
2587
- var descs []ocispec.Descriptor
2588
- appendBlob := func (mediaType string , blob []byte ) {
2589
- blobs = append (blobs , blob )
2590
- descs = append (descs , ocispec.Descriptor {
2591
- MediaType : mediaType ,
2592
- Digest : digest .FromBytes (blob ),
2593
- Size : int64 (len (blob )),
2594
- })
2595
- }
2596
- generateManifest := func (config ocispec.Descriptor , subject * ocispec.Descriptor , layers ... ocispec.Descriptor ) {
2597
- manifest := ocispec.Manifest {
2598
- Config : config ,
2599
- Subject : subject ,
2600
- Layers : layers ,
2601
- }
2602
- manifestJSON , err := json .Marshal (manifest )
2603
- if err != nil {
2604
- t .Fatal (err )
2605
- }
2606
- appendBlob (ocispec .MediaTypeImageManifest , manifestJSON )
2607
- }
2608
- generateIndex := func (manifests ... ocispec.Descriptor ) {
2609
- index := ocispec.Index {
2610
- Manifests : manifests ,
2611
- }
2612
- indexJSON , err := json .Marshal (index )
2613
- if err != nil {
2614
- t .Fatal (err )
2615
- }
2616
- appendBlob (ocispec .MediaTypeImageIndex , indexJSON )
2617
- }
2618
-
2619
- appendBlob (ocispec .MediaTypeImageConfig , []byte ("config" )) // Blob 0
2620
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("foo" )) // Blob 1
2621
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("bar" )) // Blob 2
2622
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("hello" )) // Blob 3
2623
- generateManifest (descs [0 ], nil , descs [1 ]) // Blob 4
2624
- generateManifest (descs [0 ], nil , descs [2 ]) // Blob 5
2625
- generateManifest (descs [0 ], nil , descs [3 ]) // Blob 6
2626
- generateIndex (descs [4 :6 ]... ) // Blob 7
2627
- generateIndex (descs [6 ]) // Blob 8
2628
- appendBlob (ocispec .MediaTypeImageLayer , []byte ("world" )) // Blob 9
2629
- generateManifest (descs [0 ], & descs [6 ], descs [9 ]) // Blob 10
2630
- generateManifest (descs [0 ], & descs [10 ], descs [2 ]) // Blob 11
2631
-
2632
- eg , egCtx := errgroup .WithContext (ctx )
2633
- for i := range blobs {
2634
- eg .Go (func (i int ) func () error {
2635
- return func () error {
2636
- err := s .Push (egCtx , descs [i ], bytes .NewReader (blobs [i ]))
2637
- if err != nil {
2638
- return fmt .Errorf ("failed to push test content to src: %d: %v" , i , err )
2639
- }
2640
- return nil
2641
- }
2642
- }(i ))
2643
- }
2644
- if err := eg .Wait (); err != nil {
2645
- t .Fatal (err )
2646
- }
2647
-
2648
- // delete blob 4 and verify the result
2649
- if err := s .Delete (egCtx , descs [4 ]); err != nil {
2650
- t .Fatal (err )
2651
- }
2652
-
2653
- // blob 4 is now deleted, and other blobs are still present
2654
- notPresent := []ocispec.Descriptor {descs [4 ]}
2655
- for _ , node := range notPresent {
2656
- if exists , _ := s .Exists (egCtx , node ); exists {
2657
- t .Errorf ("%v should not exist in store" , node )
2658
- }
2659
- }
2660
- stillPresent := []ocispec.Descriptor {descs [0 ], descs [1 ], descs [2 ], descs [3 ], descs [5 ], descs [6 ], descs [7 ], descs [8 ], descs [9 ], descs [10 ], descs [11 ]}
2661
- for _ , node := range stillPresent {
2662
- if exists , _ := s .Exists (egCtx , node ); ! exists {
2663
- t .Errorf ("%v should exist in store" , node )
2664
- }
2665
- }
2666
-
2667
- // delete blob 8 and verify the result
2668
- if err := s .Delete (egCtx , descs [8 ]); err != nil {
2669
- t .Fatal (err )
2670
- }
2671
-
2672
- // blob 4 and 8 are now deleted, and other blobs are still present
2673
- notPresent = []ocispec.Descriptor {descs [4 ], descs [8 ]}
2674
- for _ , node := range notPresent {
2675
- if exists , _ := s .Exists (egCtx , node ); exists {
2676
- t .Errorf ("%v should not exist in store" , node )
2677
- }
2678
- }
2679
- stillPresent = []ocispec.Descriptor {descs [0 ], descs [1 ], descs [2 ], descs [3 ], descs [5 ], descs [6 ], descs [7 ], descs [9 ], descs [10 ], descs [11 ]}
2680
- for _ , node := range stillPresent {
2681
- if exists , _ := s .Exists (egCtx , node ); ! exists {
2682
- t .Errorf ("%v should exist in store" , node )
2683
- }
2684
- }
2685
-
2686
- // delete blob 6 and verify the result
2687
- if err := s .Delete (egCtx , descs [6 ]); err != nil {
2688
- t .Fatal (err )
2689
- }
2690
-
2691
- // blob 4, 6, 8 are now deleted, and other blobs are still present
2692
- notPresent = []ocispec.Descriptor {descs [4 ], descs [6 ], descs [8 ]}
2693
- for _ , node := range notPresent {
2694
- if exists , _ := s .Exists (egCtx , node ); exists {
2695
- t .Errorf ("%v should not exist in store" , node )
2696
- }
2697
- }
2698
- stillPresent = []ocispec.Descriptor {descs [0 ], descs [1 ], descs [2 ], descs [3 ], descs [5 ], descs [7 ], descs [9 ], descs [10 ], descs [11 ]}
2699
- for _ , node := range stillPresent {
2700
- if exists , _ := s .Exists (egCtx , node ); ! exists {
2701
- t .Errorf ("%v should exist in store" , node )
2702
- }
2703
- }
2704
-
2705
- // verify predecessors information
2706
- wants := [][]ocispec.Descriptor {
2707
- {descs [5 ], descs [10 ], descs [11 ]}, // Blob 0
2708
- nil , // Blob 1
2709
- {descs [5 ], descs [11 ]}, // Blob 2
2710
- nil , // Blob 3
2711
- {descs [7 ]}, // Blob 4's predecessor is descs[7], even though blob 4 no longer exist
2712
- {descs [7 ]}, // Blob 5
2713
- {descs [10 ]}, // Blob 6's predecessor is descs[10], even though blob 6 no longer exist
2714
- nil , // Blob 7
2715
- nil , // Blob 8
2716
- {descs [10 ]}, // Blob 9
2717
- {descs [11 ]}, // Blob 10
2718
- nil , // Blob 11
2719
- }
2720
- for i , want := range wants {
2721
- predecessors , err := s .Predecessors (ctx , descs [i ])
2722
- if err != nil {
2723
- t .Errorf ("Store.Predecessors(%d) error = %v" , i , err )
2724
- }
2725
- if ! equalDescriptorSet (predecessors , want ) {
2726
- t .Errorf ("Store.Predecessors(%d) = %v, want %v" , i , predecessors , want )
2727
- }
2728
- }
2729
- }
2730
-
2731
2420
func TestStore_Untag (t * testing.T ) {
2732
2421
content := []byte ("test delete" )
2733
2422
desc := ocispec.Descriptor {
0 commit comments