@@ -15,6 +15,7 @@ import (
15
15
"helm.sh/helm/v3/pkg/storage/driver"
16
16
appsv1 "k8s.io/api/apps/v1"
17
17
corev1 "k8s.io/api/core/v1"
18
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
18
19
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19
20
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
20
21
"k8s.io/apimachinery/pkg/runtime"
@@ -567,6 +568,218 @@ func TestBoxcutter_Apply(t *testing.T) {
567
568
assert .Empty (t , revList .Items )
568
569
},
569
570
},
571
+ {
572
+ name : "sixth revision" ,
573
+ mockBuilder : & mockBundleRevisionBuilder {
574
+ makeRevisionFunc : func (bundleFS fs.FS , ext * ocv1.ClusterExtension , objectLabels , revisionAnnotations map [string ]string ) (* ocv1.ClusterExtensionRevision , error ) {
575
+ return & ocv1.ClusterExtensionRevision {
576
+ ObjectMeta : metav1.ObjectMeta {
577
+ Annotations : revisionAnnotations ,
578
+ Labels : map [string ]string {
579
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
580
+ },
581
+ },
582
+ Spec : ocv1.ClusterExtensionRevisionSpec {},
583
+ }, nil
584
+ },
585
+ },
586
+ existingObjs : []client.Object {
587
+ & ocv1.ClusterExtensionRevision {
588
+ ObjectMeta : metav1.ObjectMeta {
589
+ Name : "rev-1" ,
590
+ Labels : map [string ]string {
591
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
592
+ },
593
+ },
594
+ Spec : ocv1.ClusterExtensionRevisionSpec {
595
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
596
+ },
597
+ },
598
+ & ocv1.ClusterExtensionRevision {
599
+ ObjectMeta : metav1.ObjectMeta {
600
+ Name : "rev-2" ,
601
+ Labels : map [string ]string {
602
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
603
+ },
604
+ },
605
+ Spec : ocv1.ClusterExtensionRevisionSpec {
606
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
607
+ },
608
+ },
609
+ & ocv1.ClusterExtensionRevision {
610
+ ObjectMeta : metav1.ObjectMeta {
611
+ Name : "rev-3" ,
612
+ Labels : map [string ]string {
613
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
614
+ },
615
+ },
616
+ Spec : ocv1.ClusterExtensionRevisionSpec {
617
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
618
+ },
619
+ },
620
+ & ocv1.ClusterExtensionRevision {
621
+ ObjectMeta : metav1.ObjectMeta {
622
+ Name : "rev-4" ,
623
+ Labels : map [string ]string {
624
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
625
+ },
626
+ },
627
+ Spec : ocv1.ClusterExtensionRevisionSpec {
628
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
629
+ },
630
+ },
631
+ & ocv1.ClusterExtensionRevision {
632
+ ObjectMeta : metav1.ObjectMeta {
633
+ Name : "rev-5" ,
634
+ Labels : map [string ]string {
635
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
636
+ },
637
+ },
638
+ Spec : ocv1.ClusterExtensionRevisionSpec {
639
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
640
+ },
641
+ },
642
+ & ocv1.ClusterExtensionRevision {
643
+ ObjectMeta : metav1.ObjectMeta {
644
+ Name : "rev-6" ,
645
+ Labels : map [string ]string {
646
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
647
+ },
648
+ },
649
+ Spec : ocv1.ClusterExtensionRevisionSpec {
650
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
651
+ },
652
+ },
653
+ },
654
+ validate : func (t * testing.T , c client.Client ) {
655
+ rev1 := & ocv1.ClusterExtensionRevision {}
656
+ err := c .Get (t .Context (), client.ObjectKey {Name : "rev-1" }, rev1 )
657
+ require .Error (t , err )
658
+ assert .True (t , apierrors .IsNotFound (err ))
659
+
660
+ latest := & ocv1.ClusterExtensionRevision {}
661
+ err = c .Get (t .Context (), client.ObjectKey {Name : "test-ext-1" }, latest )
662
+ require .NoError (t , err )
663
+ assert .Len (t , latest .Spec .Previous , applier .ClusterExtensionRevisionPreviousLimit )
664
+ },
665
+ },
666
+ {
667
+ name : "len([]revisions) > limit but contains active revisions with index beyond limit" ,
668
+ mockBuilder : & mockBundleRevisionBuilder {
669
+ makeRevisionFunc : func (bundleFS fs.FS , ext * ocv1.ClusterExtension , objectLabels , revisionAnnotations map [string ]string ) (* ocv1.ClusterExtensionRevision , error ) {
670
+ return & ocv1.ClusterExtensionRevision {
671
+ ObjectMeta : metav1.ObjectMeta {
672
+ Annotations : revisionAnnotations ,
673
+ Labels : map [string ]string {
674
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
675
+ },
676
+ },
677
+ Spec : ocv1.ClusterExtensionRevisionSpec {},
678
+ }, nil
679
+ },
680
+ },
681
+ existingObjs : []client.Object {
682
+ & ocv1.ClusterExtensionRevision {
683
+ ObjectMeta : metav1.ObjectMeta {
684
+ Name : "rev-1" ,
685
+ Labels : map [string ]string {
686
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
687
+ },
688
+ },
689
+ Spec : ocv1.ClusterExtensionRevisionSpec {
690
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
691
+ },
692
+ },
693
+ & ocv1.ClusterExtensionRevision {
694
+ ObjectMeta : metav1.ObjectMeta {
695
+ Name : "rev-2" ,
696
+ Labels : map [string ]string {
697
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
698
+ },
699
+ },
700
+ Spec : ocv1.ClusterExtensionRevisionSpec {
701
+ // index beyond the retention limit but active; should be preserved
702
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateActive ,
703
+ },
704
+ },
705
+ & ocv1.ClusterExtensionRevision {
706
+ ObjectMeta : metav1.ObjectMeta {
707
+ Name : "rev-3" ,
708
+ Labels : map [string ]string {
709
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
710
+ },
711
+ },
712
+ Spec : ocv1.ClusterExtensionRevisionSpec {
713
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateActive ,
714
+ },
715
+ },
716
+ & ocv1.ClusterExtensionRevision {
717
+ ObjectMeta : metav1.ObjectMeta {
718
+ Name : "rev-4" ,
719
+ Labels : map [string ]string {
720
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
721
+ },
722
+ },
723
+ Spec : ocv1.ClusterExtensionRevisionSpec {
724
+ // archived but should be preserved since it is within the limit
725
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateArchived ,
726
+ },
727
+ },
728
+ & ocv1.ClusterExtensionRevision {
729
+ ObjectMeta : metav1.ObjectMeta {
730
+ Name : "rev-5" ,
731
+ Labels : map [string ]string {
732
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
733
+ },
734
+ },
735
+ Spec : ocv1.ClusterExtensionRevisionSpec {
736
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateActive ,
737
+ },
738
+ },
739
+ & ocv1.ClusterExtensionRevision {
740
+ ObjectMeta : metav1.ObjectMeta {
741
+ Name : "rev-6" ,
742
+ Labels : map [string ]string {
743
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
744
+ },
745
+ },
746
+ Spec : ocv1.ClusterExtensionRevisionSpec {
747
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateActive ,
748
+ },
749
+ },
750
+ & ocv1.ClusterExtensionRevision {
751
+ ObjectMeta : metav1.ObjectMeta {
752
+ Name : "rev-7" ,
753
+ Labels : map [string ]string {
754
+ controllers .ClusterExtensionRevisionOwnerLabel : ext .Name ,
755
+ },
756
+ },
757
+ Spec : ocv1.ClusterExtensionRevisionSpec {
758
+ LifecycleState : ocv1 .ClusterExtensionRevisionLifecycleStateActive ,
759
+ },
760
+ },
761
+ },
762
+ validate : func (t * testing.T , c client.Client ) {
763
+ rev1 := & ocv1.ClusterExtensionRevision {}
764
+ err := c .Get (t .Context (), client.ObjectKey {Name : "rev-1" }, rev1 )
765
+ require .Error (t , err )
766
+ assert .True (t , apierrors .IsNotFound (err ))
767
+
768
+ rev2 := & ocv1.ClusterExtensionRevision {}
769
+ err = c .Get (t .Context (), client.ObjectKey {Name : "rev-2" }, rev2 )
770
+ require .NoError (t , err )
771
+
772
+ rev4 := & ocv1.ClusterExtensionRevision {}
773
+ err = c .Get (t .Context (), client.ObjectKey {Name : "rev-4" }, rev4 )
774
+ require .NoError (t , err )
775
+
776
+ latest := & ocv1.ClusterExtensionRevision {}
777
+ err = c .Get (t .Context (), client.ObjectKey {Name : "test-ext-1" }, latest )
778
+ require .NoError (t , err )
779
+ assert .Len (t , latest .Spec .Previous , 6 )
780
+ assert .Contains (t , latest .Spec .Previous , ocv1.ClusterExtensionRevisionPrevious {Name : "rev-4" })
781
+ },
782
+ },
570
783
}
571
784
572
785
for _ , tc := range testCases {
0 commit comments