Merge pull request #36605 from mwielgus/test-fix-1

Automatic merge from submit-queue

Federation test util fix - 1

* Make nil and empty map equivalent when testing ObjectMeta equivalence
* Add a function that waits for a particular content inside federated store

cc: @nikhiljindal @madhusudancs
This commit is contained in:
Kubernetes Submit Queue 2016-11-11 08:21:59 -08:00 committed by GitHub
commit 3e6210994c
3 changed files with 47 additions and 6 deletions

View File

@ -65,10 +65,10 @@ func ObjectMetaEquivalent(a, b api_v1.ObjectMeta) bool {
if a.Namespace != b.Namespace { if a.Namespace != b.Namespace {
return false return false
} }
if !reflect.DeepEqual(a.Labels, b.Labels) { if !reflect.DeepEqual(a.Labels, b.Labels) && (len(a.Labels) != 0 || len(b.Labels) != 0) {
return false return false
} }
if !reflect.DeepEqual(a.Annotations, b.Annotations) { if !reflect.DeepEqual(a.Annotations, b.Annotations) && (len(a.Annotations) != 0 || len(b.Annotations) != 0) {
return false return false
} }
return true return true

View File

@ -56,6 +56,18 @@ func TestObjectMeta(t *testing.T) {
ResourceVersion: "1231255531412", ResourceVersion: "1231255531412",
Annotations: map[string]string{"A": "B"}, Annotations: map[string]string{"A": "B"},
} }
o7 := api_v1.ObjectMeta{
Namespace: "ns1",
Name: "s1",
ResourceVersion: "1231255531412",
Annotations: map[string]string{},
Labels: map[string]string{},
}
o8 := api_v1.ObjectMeta{
Namespace: "ns1",
Name: "s1",
ResourceVersion: "1231255531412",
}
assert.Equal(t, 0, len(o2.UID)) assert.Equal(t, 0, len(o2.UID))
assert.Equal(t, 0, len(o2.ResourceVersion)) assert.Equal(t, 0, len(o2.ResourceVersion))
assert.Equal(t, o1.Name, o2.Name) assert.Equal(t, o1.Name, o2.Name)
@ -64,6 +76,8 @@ func TestObjectMeta(t *testing.T) {
assert.True(t, ObjectMetaEquivalent(o3, o4)) assert.True(t, ObjectMetaEquivalent(o3, o4))
assert.True(t, ObjectMetaEquivalent(o5, o6)) assert.True(t, ObjectMetaEquivalent(o5, o6))
assert.True(t, ObjectMetaEquivalent(o3, o5)) assert.True(t, ObjectMetaEquivalent(o3, o5))
assert.True(t, ObjectMetaEquivalent(o7, o8))
assert.True(t, ObjectMetaEquivalent(o8, o7))
} }
func TestObjectMetaAndSpec(t *testing.T) { func TestObjectMetaAndSpec(t *testing.T) {

View File

@ -257,11 +257,11 @@ func CompareObjectMeta(a, b api_v1.ObjectMeta) error {
if a.Name != b.Name { if a.Name != b.Name {
return fmt.Errorf("Different name expected:%s observed:%s", a.Namespace, b.Namespace) return fmt.Errorf("Different name expected:%s observed:%s", a.Namespace, b.Namespace)
} }
if !reflect.DeepEqual(a.Annotations, b.Annotations) { if !reflect.DeepEqual(a.Labels, b.Labels) && (len(a.Labels) != 0 || len(b.Labels) != 0) {
return fmt.Errorf("Annotations are different expected:%v observerd:%v", a.Annotations, b.Annotations) return fmt.Errorf("Labels are different expected:%v observerd:%v", a.Labels, b.Labels)
} }
if !reflect.DeepEqual(a.Labels, b.Labels) { if !reflect.DeepEqual(a.Annotations, b.Annotations) && (len(a.Annotations) != 0 || len(b.Annotations) != 0) {
return fmt.Errorf("Annotations are different expected:%v observerd:%v", a.Labels, b.Labels) return fmt.Errorf("Annotations are different expected:%v observerd:%v", a.Annotations, b.Annotations)
} }
return nil return nil
} }
@ -295,3 +295,30 @@ func WaitForStoreUpdate(store util.FederatedReadOnlyStore, clusterName, key stri
}) })
return 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
}
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)
}
}