From 2fb71ed9554414f96f5c9997d691dfe0465782cb Mon Sep 17 00:00:00 2001 From: Marcin Wielgus Date: Thu, 10 Nov 2016 01:53:15 +0100 Subject: [PATCH] Test equality in get from storage --- .../util/test/test_helper.go | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/federation/pkg/federation-controller/util/test/test_helper.go b/federation/pkg/federation-controller/util/test/test_helper.go index e7011ed4b61..32c4c3545ac 100644 --- a/federation/pkg/federation-controller/util/test/test_helper.go +++ b/federation/pkg/federation-controller/util/test/test_helper.go @@ -280,3 +280,30 @@ func WaitForStoreUpdate(store util.FederatedReadOnlyStore, clusterName, key stri }) return err } + +// Ensure a key is in the store before returning (or timeout w/ error) +func WaitForStoreUpdateChecking(store util.FederatedReadOnlyStore, clusterName, key string, timeout time.Duration, + checkFunction CheckingFunction) error { + retryInterval := 500 * time.Millisecond + var lastError error + err := wait.PollImmediate(retryInterval, timeout, func() (bool, error) { + item, found, err := store.GetByKey(clusterName, key) + if err != nil || !found { + return found, err + } + runtimeObj := item.(runtime.Object) + lastError = checkFunction(runtimeObj) + glog.V(2).Infof("Check function failed for %s %v %v", key, runtimeObj, lastError) + return lastError == nil, nil + }) + return err +} + +func MetaAndSpecCheckingFunction(expected runtime.Object) CheckingFunction { + return func(obj runtime.Object) error { + if util.ObjectMetaAndSpecEquivalent(obj, expected) { + return nil + } + return fmt.Errorf("Object different expected=%#v received=%#v", expected, obj) + } +}