From 98ff390a63cc02a92bd83d2dcfd026e8a5521897 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Sun, 2 Oct 2016 21:44:05 -0500 Subject: [PATCH] wait for store update before modify --- .../namespace/namespace_controller_test.go | 7 +++++++ .../secret/secret_controller_test.go | 7 +++++++ .../federation-controller/util/test/test_helper.go | 11 +++++++++++ 3 files changed, 25 insertions(+) diff --git a/federation/pkg/federation-controller/namespace/namespace_controller_test.go b/federation/pkg/federation-controller/namespace/namespace_controller_test.go index 92bbeb11cc8..29c1aa92aae 100644 --- a/federation/pkg/federation-controller/namespace/namespace_controller_test.go +++ b/federation/pkg/federation-controller/namespace/namespace_controller_test.go @@ -31,6 +31,7 @@ import ( fake_kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake" "k8s.io/kubernetes/pkg/client/testing/core" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/wait" "github.com/stretchr/testify/assert" ) @@ -111,6 +112,12 @@ func TestNamespaceController(t *testing.T) { assert.NotNil(t, createdNamespace) assert.Equal(t, ns1.Name, createdNamespace.Name) + // Wait for the secret to appear in the informer store + err := WaitForStoreUpdate( + namespaceController.namespaceFederatedInformer.GetTargetStore(), + cluster1.Name, ns1.Name, wait.ForeverTestTimeout) + assert.Nil(t, err, "namespace should have appeared in the informer store") + // Test update federated namespace. ns1.Annotations = map[string]string{ "A": "B", diff --git a/federation/pkg/federation-controller/secret/secret_controller_test.go b/federation/pkg/federation-controller/secret/secret_controller_test.go index a0989f69626..c0b9c3e9713 100644 --- a/federation/pkg/federation-controller/secret/secret_controller_test.go +++ b/federation/pkg/federation-controller/secret/secret_controller_test.go @@ -29,6 +29,7 @@ import ( kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" fake_kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/wait" "github.com/stretchr/testify/assert" ) @@ -96,6 +97,12 @@ func TestSecretController(t *testing.T) { assert.Equal(t, secret1.Name, createdSecret.Name) assert.True(t, secretsEqual(secret1, *createdSecret)) + // Wait for the secret to appear in the informer store + err := WaitForStoreUpdate( + secretController.secretFederatedInformer.GetTargetStore(), + cluster1.Name, getSecretKey(secret1.Namespace, secret1.Name), wait.ForeverTestTimeout) + assert.Nil(t, err, "secret should have appeared in the informer store") + // Test update federated secret. secret1.Annotations = map[string]string{ "A": "B", diff --git a/federation/pkg/federation-controller/util/test/test_helper.go b/federation/pkg/federation-controller/util/test/test_helper.go index 2866e48771a..9fa3416173c 100644 --- a/federation/pkg/federation-controller/util/test/test_helper.go +++ b/federation/pkg/federation-controller/util/test/test_helper.go @@ -28,6 +28,7 @@ import ( api_v1 "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/testing/core" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/watch" "github.com/golang/glog" @@ -211,3 +212,13 @@ func NewCluster(name string, readyStatus api_v1.ConditionStatus) *federation_api }, } } + +// Ensure a key is in the store before returning (or timeout w/ error) +func WaitForStoreUpdate(store util.FederatedReadOnlyStore, clusterName, key string, timeout time.Duration) error { + retryInterval := 100 * time.Millisecond + err := wait.PollImmediate(retryInterval, timeout, func() (bool, error) { + _, found, err := store.GetByKey(clusterName, key) + return found, err + }) + return err +}