Add wait to discovery integration test to fix flakiness

This commit is contained in:
Nail Islamov 2018-08-13 16:54:54 +10:00
parent 6274590518
commit 38895a56a8
No known key found for this signature in database
GPG Key ID: 36245154B2536826

View File

@ -334,11 +334,15 @@ func TestAggregatedAPIServer(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
// this is ugly, but sleep just a little bit so that the watch is probably observed. Since nothing will actually be added to discovery // wait for the unavailable API service to be processed with updated status
// (the service is missing), we don't have an external signal. err = wait.Poll(100*time.Millisecond, 5*time.Second, func() (done bool, err error) {
time.Sleep(100 * time.Millisecond) _, err = aggregatorDiscoveryClient.Discovery().ServerResources()
_, err = aggregatorDiscoveryClient.Discovery().ServerResources() hasExpectedError := checkWardleUnavailableDiscoveryError(t, err)
assertWardleUnavailableDiscoveryError(t, err) return hasExpectedError, nil
})
if err != nil {
t.Fatal(err)
}
_, err = aggregatorClient.ApiregistrationV1beta1().APIServices().Create(&apiregistrationv1beta1.APIService{ _, err = aggregatorClient.ApiregistrationV1beta1().APIServices().Create(&apiregistrationv1beta1.APIService{
ObjectMeta: metav1.ObjectMeta{Name: "v1."}, ObjectMeta: metav1.ObjectMeta{Name: "v1."},
@ -359,30 +363,39 @@ func TestAggregatedAPIServer(t *testing.T) {
// (the service is missing), we don't have an external signal. // (the service is missing), we don't have an external signal.
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
_, err = aggregatorDiscoveryClient.Discovery().ServerResources() _, err = aggregatorDiscoveryClient.Discovery().ServerResources()
assertWardleUnavailableDiscoveryError(t, err) hasExpectedError := checkWardleUnavailableDiscoveryError(t, err)
if !hasExpectedError {
t.Fatalf("Discovery call didn't return expected error: %v", err)
}
// TODO figure out how to turn on enough of services and dns to run more // TODO figure out how to turn on enough of services and dns to run more
} }
func assertWardleUnavailableDiscoveryError(t *testing.T, err error) { func checkWardleUnavailableDiscoveryError(t *testing.T, err error) bool {
if err == nil { if err == nil {
t.Fatal("Discovery call expected to return failed unavailable service") t.Log("Discovery call expected to return failed unavailable service")
return false
} }
if !discovery.IsGroupDiscoveryFailedError(err) { if !discovery.IsGroupDiscoveryFailedError(err) {
t.Fatalf("Unexpected error: %T, %v", err, err) t.Logf("Unexpected error: %T, %v", err, err)
return false
} }
discoveryErr := err.(*discovery.ErrGroupDiscoveryFailed) discoveryErr := err.(*discovery.ErrGroupDiscoveryFailed)
if len(discoveryErr.Groups) != 1 { if len(discoveryErr.Groups) != 1 {
t.Fatalf("Unexpected failed groups: %v", err) t.Logf("Unexpected failed groups: %v", err)
return false
} }
groupVersion := schema.GroupVersion{Group: "wardle.k8s.io", Version: "v1alpha1"} groupVersion := schema.GroupVersion{Group: "wardle.k8s.io", Version: "v1alpha1"}
groupVersionErr, ok := discoveryErr.Groups[groupVersion] groupVersionErr, ok := discoveryErr.Groups[groupVersion]
if !ok { if !ok {
t.Fatalf("Unexpected failed group version: %v", err) t.Logf("Unexpected failed group version: %v", err)
return false
} }
if !apierrors.IsServiceUnavailable(groupVersionErr) { if !apierrors.IsServiceUnavailable(groupVersionErr) {
t.Fatalf("Unexpected failed group version error: %v", err) t.Logf("Unexpected failed group version error: %v", err)
return false
} }
return true
} }
func createKubeConfig(clientCfg *rest.Config) *clientcmdapi.Config { func createKubeConfig(clientCfg *rest.Config) *clientcmdapi.Config {