@@ -31,6 +31,7 @@ func TestSplitGroupsAndResources(t *testing.T) {
31
31
agg apidiscovery.APIGroupDiscoveryList
32
32
expectedGroups metav1.APIGroupList
33
33
expectedGVResources map [schema.GroupVersion ]* metav1.APIResourceList
34
+ expectedFailedGVs map [schema.GroupVersion ]error
34
35
}{
35
36
{
36
37
name : "Aggregated discovery: core/v1 group and pod resource" ,
@@ -90,6 +91,7 @@ func TestSplitGroupsAndResources(t *testing.T) {
90
91
},
91
92
},
92
93
},
94
+ expectedFailedGVs : map [schema.GroupVersion ]error {},
93
95
},
94
96
{
95
97
name : "Aggregated discovery: 1 group/1 resources at /api, 1 group/2 versions/1 resources at /apis" ,
@@ -179,6 +181,7 @@ func TestSplitGroupsAndResources(t *testing.T) {
179
181
},
180
182
},
181
183
},
184
+ expectedFailedGVs : map [schema.GroupVersion ]error {},
182
185
},
183
186
{
184
187
name : "Aggregated discovery: 1 group/2 resources at /api, 1 group/2 resources at /apis" ,
@@ -313,6 +316,7 @@ func TestSplitGroupsAndResources(t *testing.T) {
313
316
},
314
317
},
315
318
},
319
+ expectedFailedGVs : map [schema.GroupVersion ]error {},
316
320
},
317
321
{
318
322
name : "Aggregated discovery: multiple groups with cluster-scoped resources" ,
@@ -447,6 +451,7 @@ func TestSplitGroupsAndResources(t *testing.T) {
447
451
},
448
452
},
449
453
},
454
+ expectedFailedGVs : map [schema.GroupVersion ]error {},
450
455
},
451
456
{
452
457
name : "Aggregated discovery with single subresource" ,
@@ -534,6 +539,7 @@ func TestSplitGroupsAndResources(t *testing.T) {
534
539
},
535
540
},
536
541
},
542
+ expectedFailedGVs : map [schema.GroupVersion ]error {},
537
543
},
538
544
{
539
545
name : "Aggregated discovery with multiple subresources" ,
@@ -633,11 +639,185 @@ func TestSplitGroupsAndResources(t *testing.T) {
633
639
},
634
640
},
635
641
},
642
+ expectedFailedGVs : map [schema.GroupVersion ]error {},
643
+ },
644
+ {
645
+ name : "Aggregated discovery: single failed GV at /api" ,
646
+ agg : apidiscovery.APIGroupDiscoveryList {
647
+ Items : []apidiscovery.APIGroupDiscovery {
648
+ {
649
+ Versions : []apidiscovery.APIVersionDiscovery {
650
+ {
651
+ Version : "v1" ,
652
+ Resources : []apidiscovery.APIResourceDiscovery {
653
+ {
654
+ Resource : "pods" ,
655
+ ResponseKind : & metav1.GroupVersionKind {
656
+ Group : "" ,
657
+ Version : "v1" ,
658
+ Kind : "Pod" ,
659
+ },
660
+ Scope : apidiscovery .ScopeNamespace ,
661
+ },
662
+ {
663
+ Resource : "services" ,
664
+ ResponseKind : & metav1.GroupVersionKind {
665
+ Group : "" ,
666
+ Version : "v1" ,
667
+ Kind : "Service" ,
668
+ },
669
+ Scope : apidiscovery .ScopeNamespace ,
670
+ },
671
+ },
672
+ Freshness : apidiscovery .DiscoveryFreshnessStale ,
673
+ },
674
+ },
675
+ },
676
+ },
677
+ },
678
+ // Single core Group/Version is stale, so no Version within Group.
679
+ expectedGroups : metav1.APIGroupList {
680
+ Groups : []metav1.APIGroup {{Name : "" }},
681
+ },
682
+ // Single core Group/Version is stale, so there are no expected resources.
683
+ expectedGVResources : map [schema.GroupVersion ]* metav1.APIResourceList {},
684
+ expectedFailedGVs : map [schema.GroupVersion ]error {
685
+ {Group : "" , Version : "v1" }: StaleGroupVersionError {gv : schema.GroupVersion {Group : "" , Version : "v1" }},
686
+ },
687
+ },
688
+ {
689
+ name : "Aggregated discovery: single failed GV at /apis" ,
690
+ agg : apidiscovery.APIGroupDiscoveryList {
691
+ Items : []apidiscovery.APIGroupDiscovery {
692
+ {
693
+ ObjectMeta : metav1.ObjectMeta {
694
+ Name : "apps" ,
695
+ },
696
+ Versions : []apidiscovery.APIVersionDiscovery {
697
+ {
698
+ Version : "v1" ,
699
+ Resources : []apidiscovery.APIResourceDiscovery {
700
+ {
701
+ Resource : "deployments" ,
702
+ ResponseKind : & metav1.GroupVersionKind {
703
+ Group : "apps" ,
704
+ Version : "v1" ,
705
+ Kind : "Deployment" ,
706
+ },
707
+ Scope : apidiscovery .ScopeNamespace ,
708
+ },
709
+ {
710
+ Resource : "statefulsets" ,
711
+ ResponseKind : & metav1.GroupVersionKind {
712
+ Group : "apps" ,
713
+ Version : "v1" ,
714
+ Kind : "StatefulSets" ,
715
+ },
716
+ Scope : apidiscovery .ScopeNamespace ,
717
+ },
718
+ },
719
+ Freshness : apidiscovery .DiscoveryFreshnessStale ,
720
+ },
721
+ },
722
+ },
723
+ },
724
+ },
725
+ // Single apps/v1 Group/Version is stale, so no Version within Group.
726
+ expectedGroups : metav1.APIGroupList {
727
+ Groups : []metav1.APIGroup {{Name : "apps" }},
728
+ },
729
+ // Single apps/v1 Group/Version is stale, so there are no expected resources.
730
+ expectedGVResources : map [schema.GroupVersion ]* metav1.APIResourceList {},
731
+ expectedFailedGVs : map [schema.GroupVersion ]error {
732
+ {Group : "apps" , Version : "v1" }: StaleGroupVersionError {gv : schema.GroupVersion {Group : "apps" , Version : "v1" }},
733
+ },
734
+ },
735
+ {
736
+ name : "Aggregated discovery: 1 group/2 versions/1 failed GV at /apis" ,
737
+ agg : apidiscovery.APIGroupDiscoveryList {
738
+ Items : []apidiscovery.APIGroupDiscovery {
739
+ {
740
+ ObjectMeta : metav1.ObjectMeta {
741
+ Name : "apps" ,
742
+ },
743
+ Versions : []apidiscovery.APIVersionDiscovery {
744
+ // Stale v2 should report failed GV.
745
+ {
746
+ Version : "v2" ,
747
+ Resources : []apidiscovery.APIResourceDiscovery {
748
+ {
749
+ Resource : "daemonsets" ,
750
+ ResponseKind : & metav1.GroupVersionKind {
751
+ Group : "apps" ,
752
+ Version : "v2" ,
753
+ Kind : "DaemonSets" ,
754
+ },
755
+ Scope : apidiscovery .ScopeNamespace ,
756
+ },
757
+ },
758
+ Freshness : apidiscovery .DiscoveryFreshnessStale ,
759
+ },
760
+ {
761
+ Version : "v1" ,
762
+ Resources : []apidiscovery.APIResourceDiscovery {
763
+ {
764
+ Resource : "deployments" ,
765
+ ResponseKind : & metav1.GroupVersionKind {
766
+ Group : "apps" ,
767
+ Version : "v1" ,
768
+ Kind : "Deployment" ,
769
+ },
770
+ Scope : apidiscovery .ScopeNamespace ,
771
+ },
772
+ },
773
+ },
774
+ },
775
+ },
776
+ },
777
+ },
778
+ // Only apps/v1 is non-stale expected Group/Version
779
+ expectedGroups : metav1.APIGroupList {
780
+ Groups : []metav1.APIGroup {
781
+ {
782
+ Name : "apps" ,
783
+ Versions : []metav1.GroupVersionForDiscovery {
784
+ {
785
+ GroupVersion : "apps/v1" ,
786
+ Version : "v1" ,
787
+ },
788
+ },
789
+ // PreferredVersion must be apps/v1
790
+ PreferredVersion : metav1.GroupVersionForDiscovery {
791
+ GroupVersion : "apps/v1" ,
792
+ Version : "v1" ,
793
+ },
794
+ },
795
+ },
796
+ },
797
+ // Only apps/v1 resources expected.
798
+ expectedGVResources : map [schema.GroupVersion ]* metav1.APIResourceList {
799
+ {Group : "apps" , Version : "v1" }: {
800
+ GroupVersion : "apps/v1" ,
801
+ APIResources : []metav1.APIResource {
802
+ {
803
+ Name : "deployments" ,
804
+ Namespaced : true ,
805
+ Group : "apps" ,
806
+ Version : "v1" ,
807
+ Kind : "Deployment" ,
808
+ },
809
+ },
810
+ },
811
+ },
812
+ expectedFailedGVs : map [schema.GroupVersion ]error {
813
+ {Group : "apps" , Version : "v2" }: StaleGroupVersionError {gv : schema.GroupVersion {Group : "apps" , Version : "v2" }},
814
+ },
636
815
},
637
816
}
638
817
639
818
for _ , test := range tests {
640
- apiGroups , resourcesByGV := SplitGroupsAndResources (test .agg )
819
+ apiGroups , resourcesByGV , failedGVs := SplitGroupsAndResources (test .agg )
820
+ assert .Equal (t , test .expectedFailedGVs , failedGVs )
641
821
assert .Equal (t , test .expectedGroups , * apiGroups )
642
822
assert .Equal (t , test .expectedGVResources , resourcesByGV )
643
823
}
0 commit comments