@@ -34,6 +34,7 @@ import (
34
34
corev1 "k8s.io/api/core/v1"
35
35
appextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
36
36
"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
37
+ k8serrors "k8s.io/apimachinery/pkg/api/errors"
37
38
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
38
39
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
39
40
k8sruntime "k8s.io/apimachinery/pkg/runtime"
@@ -147,6 +148,20 @@ func deployChartsAndApps(t *testing.T, testKubeConfig string) {
147
148
crd , err := apiExtensions .Create (context .Background (), crd , metav1.CreateOptions {})
148
149
require .NoError (t , err )
149
150
t .Logf ("Deployed CRD %s" , crd .Name )
151
+
152
+ // Wait for CRD to be Established before moving on
153
+ require .EventuallyWithT (t , func (tt * assert.CollectT ) {
154
+ latest , getErr := apiExtensions .Get (context .Background (), crd .Name , metav1.GetOptions {})
155
+ assert .NoError (tt , getErr )
156
+ established := false
157
+ for _ , cond := range latest .Status .Conditions {
158
+ if cond .Type == appextensionsv1 .Established && cond .Status == appextensionsv1 .ConditionTrue {
159
+ established = true
160
+ }
161
+ }
162
+ assert .True (tt , established )
163
+ }, 3 * time .Minute , 3 * time .Second , "CRD %s not established" , crd .Name )
164
+
150
165
for _ , version := range crd .Spec .Versions {
151
166
sch .AddKnownTypeWithName (
152
167
schema.GroupVersionKind {
@@ -162,28 +177,19 @@ func deployChartsAndApps(t *testing.T, testKubeConfig string) {
162
177
163
178
codecs := serializer .NewCodecFactory (sch )
164
179
crdDecode := codecs .UniversalDeserializer ().Decode
180
+
165
181
// Prometheus pod monitor
166
182
stream , err = os .ReadFile (filepath .Join (testDir , manifestsDir , "pod_monitor.yaml" ))
167
183
require .NoError (t , err )
168
-
169
184
podMonitor , _ , err := crdDecode (stream , nil , nil )
170
185
require .NoError (t , err )
171
186
g := schema.GroupVersionResource {
172
187
Group : "monitoring.coreos.com" ,
173
188
Version : "v1" ,
174
189
Resource : "podmonitors" ,
175
190
}
176
- // CRDs sometimes take time to register. We retry deploying the pod monitor until such a time all CRDs are deployed.
177
- require .EventuallyWithT (t , func (tt * assert.CollectT ) {
178
- _ , err = dynamicClient .Resource (g ).Namespace ("default" ).Create (context .Background (), podMonitor .(* unstructured.Unstructured ), metav1.CreateOptions {})
179
- if err != nil {
180
- _ , err2 := dynamicClient .Resource (g ).Namespace ("default" ).Update (context .Background (), podMonitor .(* unstructured.Unstructured ), metav1.UpdateOptions {})
181
- assert .NoError (tt , err2 )
182
- if err2 != nil {
183
- assert .NoError (tt , err )
184
- }
185
- }
186
- }, 1 * time .Minute , 5 * time .Second )
191
+ _ , err = dynamicClient .Resource (g ).Namespace ("default" ).Create (context .Background (), podMonitor .(* unstructured.Unstructured ), metav1.CreateOptions {})
192
+ assert .NoError (t , err )
187
193
188
194
chart := internal .LoadCollectorChart (t )
189
195
@@ -361,13 +367,8 @@ func deployChartsAndApps(t *testing.T, testKubeConfig string) {
361
367
Resource : "servicemonitors" ,
362
368
}
363
369
_ , err = dynamicClient .Resource (g ).Namespace ("default" ).Create (context .Background (), serviceMonitor .(* unstructured.Unstructured ), metav1.CreateOptions {})
364
- if err != nil {
365
- _ , err2 := dynamicClient .Resource (g ).Namespace ("default" ).Update (context .Background (), serviceMonitor .(* unstructured.Unstructured ), metav1.UpdateOptions {})
366
- assert .NoError (t , err2 )
367
- if err2 != nil {
368
- require .NoError (t , err )
369
- }
370
- }
370
+ assert .NoError (t , err )
371
+
371
372
// Read jobs
372
373
jobstream , err := os .ReadFile (filepath .Join (testDir , manifestsDir , "test_jobs.yaml" ))
373
374
require .NoError (t , err )
@@ -526,6 +527,10 @@ func teardown(t *testing.T, testKubeConfig string) {
526
527
_ = nmClient .Delete (context .Background (), nm .Name , metav1.DeleteOptions {
527
528
GracePeriodSeconds : & waitTime ,
528
529
})
530
+ require .Eventually (t , func () bool {
531
+ _ , err := client .CoreV1 ().Namespaces ().Get (context .Background (), nm .Name , metav1.GetOptions {})
532
+ return k8serrors .IsNotFound (err )
533
+ }, 3 * time .Minute , 3 * time .Second , "namespace %s not removed in time" , nm .Name )
529
534
}
530
535
actionConfig := new (action.Configuration )
531
536
if err := actionConfig .Init (kube .GetConfig (testKubeConfig , "" , "default" ), "default" , os .Getenv ("HELM_DRIVER" ), func (format string , v ... interface {}) {
0 commit comments