@@ -11,39 +11,41 @@ import (
1111 . "github.com/onsi/gomega"
1212 k8serrors "k8s.io/apimachinery/pkg/api/errors"
1313 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+ "k8s.io/apimachinery/pkg/runtime/schema"
1415
1516 "open-cluster-management.io/config-policy-controller/test/utils"
1617)
1718
18- const (
19- case18PolicyName = "policy-c18"
20- case18Policy = "../resources/case18_discovery_refresh/policy.yaml"
21- case18PolicyTemplateName = "policy-c18-template"
22- case18PolicyTemplatePreReqs = "../resources/case18_discovery_refresh/prereqs-for-template-policy.yaml"
23- case18PolicyTemplate = "../resources/case18_discovery_refresh/policy-template.yaml"
24- case18ConfigMapName = "c18-configmap"
25- )
19+ var _ = Describe ("Test discovery info refresh" , Ordered , func () {
20+ const (
21+ policyName = "policy-c18"
22+ policyYaml = "../resources/case18_discovery_refresh/policy.yaml"
23+ policyTemplateName = "policy-c18-template"
24+ policyTemplatePreReqs = "../resources/case18_discovery_refresh/prereqs-for-template-policy.yaml"
25+ policyTemplateYaml = "../resources/case18_discovery_refresh/policy-template.yaml"
26+ configMapName = "c18-configmap"
27+ badAPIServiceYaml = "../resources/case18_discovery_refresh/bad-apiservice.yaml"
28+ )
2629
27- var _ = Describe ("Test discovery info refresh" , func () {
2830 It ("Verifies that the discovery info is refreshed after a CRD is installed" , func () {
29- By ("Creating " + case18PolicyName + " on managed" )
30- utils .Kubectl ("apply" , "-f" , case18Policy , "-n" , testNamespace )
31+ By ("Creating " + policyName + " on managed" )
32+ utils .Kubectl ("apply" , "-f" , policyYaml , "-n" , testNamespace )
3133 policy := utils .GetWithTimeout (
3234 clientManagedDynamic ,
3335 gvrConfigPolicy ,
34- case18PolicyName ,
36+ policyName ,
3537 testNamespace ,
3638 true ,
3739 defaultTimeoutSeconds ,
3840 )
3941 Expect (policy ).NotTo (BeNil ())
4042
41- By ("Verifying " + case18PolicyName + " becomes compliant" )
43+ By ("Verifying " + policyName + " becomes compliant" )
4244 Eventually (func () interface {} {
4345 policy := utils .GetWithTimeout (
4446 clientManagedDynamic ,
4547 gvrConfigPolicy ,
46- case18PolicyName ,
48+ policyName ,
4749 testNamespace ,
4850 true ,
4951 defaultTimeoutSeconds ,
@@ -54,12 +56,33 @@ var _ = Describe("Test discovery info refresh", func() {
5456 })
5557
5658 It ("Verifies that the discovery info is refreshed when a template references a new object kind" , func () {
59+ By ("Adding a non-functional API service" )
60+ utils .Kubectl ("apply" , "-f" , badAPIServiceYaml )
61+
62+ By ("Checking that the API causes an error during API discovery" )
63+ Eventually (
64+ func () error {
65+ cmd := exec .Command ("kubectl" , "api-resources" )
66+
67+ err := cmd .Start ()
68+ if err != nil {
69+ return nil // Just retry. If this consistently has an error, the test should fail.
70+ }
71+
72+ err = cmd .Wait ()
73+
74+ return err
75+ },
76+ defaultTimeoutSeconds ,
77+ 1 ,
78+ ).ShouldNot (BeNil ())
79+
5780 By ("Creating the prerequisites on managed" )
5881 // This needs to be wrapped in an eventually since the object can't be created immediately after the CRD
5982 // is created.
6083 Eventually (
6184 func () interface {} {
62- cmd := exec .Command ("kubectl" , "apply" , "-f" , case18PolicyTemplatePreReqs )
85+ cmd := exec .Command ("kubectl" , "apply" , "-f" , policyTemplatePreReqs )
6386
6487 err := cmd .Start ()
6588 if err != nil {
@@ -74,24 +97,24 @@ var _ = Describe("Test discovery info refresh", func() {
7497 1 ,
7598 ).Should (BeNil ())
7699
77- By ("Creating " + case18PolicyTemplateName + " on managed" )
78- utils .Kubectl ("apply" , "-f" , case18PolicyTemplate , "-n" , testNamespace )
100+ By ("Creating " + policyTemplateName + " on managed" )
101+ utils .Kubectl ("apply" , "-f" , policyTemplateYaml , "-n" , testNamespace )
79102 policy := utils .GetWithTimeout (
80103 clientManagedDynamic ,
81104 gvrConfigPolicy ,
82- case18PolicyTemplateName ,
105+ policyTemplateName ,
83106 testNamespace ,
84107 true ,
85108 defaultTimeoutSeconds ,
86109 )
87110 Expect (policy ).NotTo (BeNil ())
88111
89- By ("Verifying " + case18PolicyTemplateName + " becomes compliant" )
112+ By ("Verifying " + policyTemplateName + " becomes compliant" )
90113 Eventually (func () interface {} {
91114 policy := utils .GetWithTimeout (
92115 clientManagedDynamic ,
93116 gvrConfigPolicy ,
94- case18PolicyTemplateName ,
117+ policyTemplateName ,
95118 testNamespace ,
96119 true ,
97120 defaultTimeoutSeconds ,
@@ -101,9 +124,9 @@ var _ = Describe("Test discovery info refresh", func() {
101124 }, defaultTimeoutSeconds , 1 ).Should (Equal ("Compliant" ))
102125 })
103126
104- It ( "Cleans up" , func () {
127+ AfterAll ( func () {
105128 err := clientManagedDynamic .Resource (gvrConfigPolicy ).Namespace (testNamespace ).Delete (
106- context .TODO (), case18PolicyName , metav1.DeleteOptions {},
129+ context .TODO (), policyName , metav1.DeleteOptions {},
107130 )
108131 if ! k8serrors .IsNotFound (err ) {
109132 Expect (err ).ToNot (HaveOccurred ())
@@ -117,7 +140,7 @@ var _ = Describe("Test discovery info refresh", func() {
117140 }
118141
119142 err = clientManagedDynamic .Resource (gvrConfigPolicy ).Namespace (testNamespace ).Delete (
120- context .TODO (), case18PolicyTemplateName , metav1.DeleteOptions {},
143+ context .TODO (), policyTemplateName , metav1.DeleteOptions {},
121144 )
122145 if ! k8serrors .IsNotFound (err ) {
123146 Expect (err ).ToNot (HaveOccurred ())
@@ -131,7 +154,20 @@ var _ = Describe("Test discovery info refresh", func() {
131154 }
132155
133156 err = clientManaged .CoreV1 ().ConfigMaps ("default" ).Delete (
134- context .TODO (), case18ConfigMapName , metav1.DeleteOptions {},
157+ context .TODO (), configMapName , metav1.DeleteOptions {},
158+ )
159+ if ! k8serrors .IsNotFound (err ) {
160+ Expect (err ).ToNot (HaveOccurred ())
161+ }
162+
163+ gvrAPIService := schema.GroupVersionResource {
164+ Group : "apiregistration.k8s.io" ,
165+ Version : "v1" ,
166+ Resource : "apiservices" ,
167+ }
168+
169+ err = clientManagedDynamic .Resource (gvrAPIService ).Delete (
170+ context .TODO (), "v1beta1.pizza.example.com" , metav1.DeleteOptions {},
135171 )
136172 if ! k8serrors .IsNotFound (err ) {
137173 Expect (err ).ToNot (HaveOccurred ())
0 commit comments