// 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 }
// Wait for ingress status to be updated to match the desiredStatus. func WaitForStatusUpdate(t *testing.T, store util.FederatedReadOnlyStore, clusterName, key string, desiredStatus apiv1.LoadBalancerStatus, timeout time.Duration) error { retryInterval := 100 * time.Millisecond err := wait.PollImmediate(retryInterval, timeout, func() (bool, error) { obj, found, err := store.GetByKey(clusterName, key) if !found || err != nil { return false, err } ingress := obj.(*extensionsv1beta1.Ingress) return reflect.DeepEqual(ingress.Status.LoadBalancer, desiredStatus), nil }) return err }
// Wait till the store is updated with latest secret. func WaitForSecretStoreUpdate(store util.FederatedReadOnlyStore, clusterName, key string, desiredSecret *api_v1.Secret, timeout time.Duration) error { retryInterval := 100 * time.Millisecond err := wait.PollImmediate(retryInterval, timeout, func() (bool, error) { obj, found, err := store.GetByKey(clusterName, key) if !found || err != nil { return false, err } equal := secretsEqual(*obj.(*api_v1.Secret), *desiredSecret) return equal, err }) return err }
// Wait for the cluster ingress to appear in cluster store. func WaitForIngressInClusterStore(store util.FederatedReadOnlyStore, clusterName, key string) error { retryInterval := 100 * time.Millisecond timeout := wait.ForeverTestTimeout err := wait.PollImmediate(retryInterval, timeout, func() (bool, error) { _, found, err := store.GetByKey(clusterName, key) if found && err == nil { return true, nil } if errors.IsNotFound(err) { return false, nil } return false, err }) 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 }
// Wait till the store is updated with latest secret. func WaitForSecretStoreUpdate(store util.FederatedReadOnlyStore, clusterName, key string, desiredSecret *apiv1.Secret, timeout time.Duration) error { retryInterval := 200 * time.Millisecond err := wait.PollImmediate(retryInterval, timeout, func() (bool, error) { obj, found, err := store.GetByKey(clusterName, key) if !found || err != nil { glog.Infof("%s is not in the store", key) return false, err } equal := secretsEqual(*obj.(*apiv1.Secret), *desiredSecret) if !equal { glog.Infof("wrong content in the store expected:\n%v\nactual:\n%v\n", *desiredSecret, *obj.(*apiv1.Secret)) } return equal, err }) return err }