|
|
|
@ -25,6 +25,7 @@ import (
|
|
|
|
|
|
|
|
|
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
|
|
|
|
"k8s.io/apimachinery/pkg/api/errors"
|
|
|
|
|
"k8s.io/apimachinery/pkg/api/meta"
|
|
|
|
|
"k8s.io/apimachinery/pkg/api/validation/path"
|
|
|
|
|
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
|
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
@ -107,24 +108,24 @@ func (t *Tester) TestContext() genericapirequest.Context {
|
|
|
|
|
return genericapirequest.WithNamespace(genericapirequest.NewContext(), t.TestNamespace())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (t *Tester) getObjectMetaOrFail(obj runtime.Object) *metav1.ObjectMeta {
|
|
|
|
|
meta, err := metav1.ObjectMetaFor(obj)
|
|
|
|
|
func (t *Tester) getObjectMetaOrFail(obj runtime.Object) metav1.Object {
|
|
|
|
|
objMeta, err := meta.Accessor(obj)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("object does not have ObjectMeta: %v\n%#v", err, obj)
|
|
|
|
|
}
|
|
|
|
|
return meta
|
|
|
|
|
return objMeta
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (t *Tester) setObjectMeta(obj runtime.Object, name string) {
|
|
|
|
|
meta := t.getObjectMetaOrFail(obj)
|
|
|
|
|
meta.Name = name
|
|
|
|
|
meta.SetName(name)
|
|
|
|
|
if t.clusterScope {
|
|
|
|
|
meta.Namespace = metav1.NamespaceNone
|
|
|
|
|
meta.SetNamespace(metav1.NamespaceNone)
|
|
|
|
|
} else {
|
|
|
|
|
meta.Namespace = genericapirequest.NamespaceValue(t.TestContext())
|
|
|
|
|
meta.SetNamespace(genericapirequest.NamespaceValue(t.TestContext()))
|
|
|
|
|
}
|
|
|
|
|
meta.GenerateName = ""
|
|
|
|
|
meta.Generation = 1
|
|
|
|
|
meta.SetGenerateName("")
|
|
|
|
|
meta.SetGeneration(1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func copyOrDie(obj runtime.Object, copier runtime.ObjectCopier) runtime.Object {
|
|
|
|
@ -228,7 +229,7 @@ func (t *Tester) TestWatch(
|
|
|
|
|
// Creation tests.
|
|
|
|
|
|
|
|
|
|
func (t *Tester) delete(ctx genericapirequest.Context, obj runtime.Object) error {
|
|
|
|
|
objectMeta, err := metav1.ObjectMetaFor(obj)
|
|
|
|
|
objectMeta, err := meta.Accessor(obj)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
@ -236,7 +237,7 @@ func (t *Tester) delete(ctx genericapirequest.Context, obj runtime.Object) error
|
|
|
|
|
if !ok {
|
|
|
|
|
return fmt.Errorf("Expected deleting storage, got %v", t.storage)
|
|
|
|
|
}
|
|
|
|
|
_, _, err = deleter.Delete(ctx, objectMeta.Name, nil)
|
|
|
|
|
_, _, err = deleter.Delete(ctx, objectMeta.GetName(), nil)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -276,7 +277,7 @@ func (t *Tester) testCreateEquals(obj runtime.Object, getFn GetFunc) {
|
|
|
|
|
// Set resource version which might be unset in created object.
|
|
|
|
|
createdMeta := t.getObjectMetaOrFail(created)
|
|
|
|
|
gotMeta := t.getObjectMetaOrFail(got)
|
|
|
|
|
createdMeta.ResourceVersion = gotMeta.ResourceVersion
|
|
|
|
|
createdMeta.SetResourceVersion(gotMeta.GetResourceVersion())
|
|
|
|
|
|
|
|
|
|
if e, a := created, got; !apiequality.Semantic.DeepEqual(e, a) {
|
|
|
|
|
t.Errorf("unexpected obj: %#v, expected %#v", e, a)
|
|
|
|
@ -287,7 +288,7 @@ func (t *Tester) testCreateDiscardsObjectNamespace(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
|
|
|
|
|
// Ignore non-empty namespace in object meta
|
|
|
|
|
objectMeta.Namespace = "not-default"
|
|
|
|
|
objectMeta.SetNamespace("not-default")
|
|
|
|
|
|
|
|
|
|
// Ideally, we'd get an error back here, but at least verify the namespace wasn't persisted
|
|
|
|
|
created, err := t.storage.(rest.Creater).Create(t.TestContext(), copyOrDie(valid, t.scheme))
|
|
|
|
@ -296,30 +297,30 @@ func (t *Tester) testCreateDiscardsObjectNamespace(valid runtime.Object) {
|
|
|
|
|
}
|
|
|
|
|
defer t.delete(t.TestContext(), created)
|
|
|
|
|
createdObjectMeta := t.getObjectMetaOrFail(created)
|
|
|
|
|
if createdObjectMeta.Namespace != metav1.NamespaceNone {
|
|
|
|
|
t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.Namespace)
|
|
|
|
|
if createdObjectMeta.GetNamespace() != metav1.NamespaceNone {
|
|
|
|
|
t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.GetNamespace())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (t *Tester) testCreateGeneratesName(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
objectMeta.Name = ""
|
|
|
|
|
objectMeta.GenerateName = "test-"
|
|
|
|
|
objectMeta.SetName("")
|
|
|
|
|
objectMeta.SetGenerateName("test-")
|
|
|
|
|
|
|
|
|
|
created, err := t.storage.(rest.Creater).Create(t.TestContext(), valid)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
defer t.delete(t.TestContext(), created)
|
|
|
|
|
if objectMeta.Name == "test-" || !strings.HasPrefix(objectMeta.Name, "test-") {
|
|
|
|
|
if objectMeta.GetName() == "test-" || !strings.HasPrefix(objectMeta.GetName(), "test-") {
|
|
|
|
|
t.Errorf("unexpected name: %#v", valid)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (t *Tester) testCreateHasMetadata(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
objectMeta.Name = t.namer(1)
|
|
|
|
|
objectMeta.Namespace = t.TestNamespace()
|
|
|
|
|
objectMeta.SetName(t.namer(1))
|
|
|
|
|
objectMeta.SetNamespace(t.TestNamespace())
|
|
|
|
|
|
|
|
|
|
obj, err := t.storage.(rest.Creater).Create(t.TestContext(), valid)
|
|
|
|
|
if err != nil {
|
|
|
|
@ -345,8 +346,8 @@ func (t *Tester) testCreateIgnoresContextNamespace(valid runtime.Object) {
|
|
|
|
|
}
|
|
|
|
|
defer t.delete(ctx, created)
|
|
|
|
|
createdObjectMeta := t.getObjectMetaOrFail(created)
|
|
|
|
|
if createdObjectMeta.Namespace != metav1.NamespaceNone {
|
|
|
|
|
t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.Namespace)
|
|
|
|
|
if createdObjectMeta.GetNamespace() != metav1.NamespaceNone {
|
|
|
|
|
t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.GetNamespace())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -354,7 +355,7 @@ func (t *Tester) testCreateIgnoresMismatchedNamespace(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
|
|
|
|
|
// Ignore non-empty namespace in object meta
|
|
|
|
|
objectMeta.Namespace = "not-default"
|
|
|
|
|
objectMeta.SetNamespace("not-default")
|
|
|
|
|
ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "not-default2")
|
|
|
|
|
|
|
|
|
|
// Ideally, we'd get an error back here, but at least verify the namespace wasn't persisted
|
|
|
|
@ -364,8 +365,8 @@ func (t *Tester) testCreateIgnoresMismatchedNamespace(valid runtime.Object) {
|
|
|
|
|
}
|
|
|
|
|
defer t.delete(ctx, created)
|
|
|
|
|
createdObjectMeta := t.getObjectMetaOrFail(created)
|
|
|
|
|
if createdObjectMeta.Namespace != metav1.NamespaceNone {
|
|
|
|
|
t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.Namespace)
|
|
|
|
|
if createdObjectMeta.GetNamespace() != metav1.NamespaceNone {
|
|
|
|
|
t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.GetNamespace())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -373,7 +374,7 @@ func (t *Tester) testCreateValidatesNames(valid runtime.Object) {
|
|
|
|
|
for _, invalidName := range path.NameMayNotBe {
|
|
|
|
|
objCopy := copyOrDie(valid, t.scheme)
|
|
|
|
|
objCopyMeta := t.getObjectMetaOrFail(objCopy)
|
|
|
|
|
objCopyMeta.Name = invalidName
|
|
|
|
|
objCopyMeta.SetName(invalidName)
|
|
|
|
|
|
|
|
|
|
ctx := t.TestContext()
|
|
|
|
|
_, err := t.storage.(rest.Creater).Create(ctx, objCopy)
|
|
|
|
@ -385,7 +386,7 @@ func (t *Tester) testCreateValidatesNames(valid runtime.Object) {
|
|
|
|
|
for _, invalidSuffix := range path.NameMayNotContain {
|
|
|
|
|
objCopy := copyOrDie(valid, t.scheme)
|
|
|
|
|
objCopyMeta := t.getObjectMetaOrFail(objCopy)
|
|
|
|
|
objCopyMeta.Name += invalidSuffix
|
|
|
|
|
objCopyMeta.SetName(objCopyMeta.GetName() + invalidSuffix)
|
|
|
|
|
|
|
|
|
|
ctx := t.TestContext()
|
|
|
|
|
_, err := t.storage.(rest.Creater).Create(ctx, objCopy)
|
|
|
|
@ -407,7 +408,7 @@ func (t *Tester) testCreateInvokesValidation(invalid ...runtime.Object) {
|
|
|
|
|
|
|
|
|
|
func (t *Tester) testCreateRejectsMismatchedNamespace(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
objectMeta.Namespace = "not-default"
|
|
|
|
|
objectMeta.SetNamespace("not-default")
|
|
|
|
|
|
|
|
|
|
_, err := t.storage.(rest.Creater).Create(t.TestContext(), valid)
|
|
|
|
|
if err == nil {
|
|
|
|
@ -420,8 +421,8 @@ func (t *Tester) testCreateRejectsMismatchedNamespace(valid runtime.Object) {
|
|
|
|
|
func (t *Tester) testCreateResetsUserData(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
now := metav1.Now()
|
|
|
|
|
objectMeta.UID = "bad-uid"
|
|
|
|
|
objectMeta.CreationTimestamp = now
|
|
|
|
|
objectMeta.SetUID("bad-uid")
|
|
|
|
|
objectMeta.SetCreationTimestamp(now)
|
|
|
|
|
|
|
|
|
|
obj, err := t.storage.(rest.Creater).Create(t.TestContext(), valid)
|
|
|
|
|
if err != nil {
|
|
|
|
@ -431,15 +432,15 @@ func (t *Tester) testCreateResetsUserData(valid runtime.Object) {
|
|
|
|
|
t.Fatalf("Unexpected object from result: %#v", obj)
|
|
|
|
|
}
|
|
|
|
|
defer t.delete(t.TestContext(), obj)
|
|
|
|
|
if objectMeta.UID == "bad-uid" || objectMeta.CreationTimestamp == now {
|
|
|
|
|
if objectMeta.GetUID() == "bad-uid" || objectMeta.GetCreationTimestamp() == now {
|
|
|
|
|
t.Errorf("ObjectMeta did not reset basic fields: %#v", objectMeta)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (t *Tester) testCreateIgnoreClusterName(valid runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(valid)
|
|
|
|
|
objectMeta.Name = t.namer(3)
|
|
|
|
|
objectMeta.ClusterName = "clustername-to-ignore"
|
|
|
|
|
objectMeta.SetName(t.namer(3))
|
|
|
|
|
objectMeta.SetClusterName("clustername-to-ignore")
|
|
|
|
|
|
|
|
|
|
obj, err := t.storage.(rest.Creater).Create(t.TestContext(), copyOrDie(valid, t.scheme))
|
|
|
|
|
if err != nil {
|
|
|
|
@ -447,8 +448,8 @@ func (t *Tester) testCreateIgnoreClusterName(valid runtime.Object) {
|
|
|
|
|
}
|
|
|
|
|
defer t.delete(t.TestContext(), obj)
|
|
|
|
|
createdObjectMeta := t.getObjectMetaOrFail(obj)
|
|
|
|
|
if len(createdObjectMeta.ClusterName) != 0 {
|
|
|
|
|
t.Errorf("Expected empty clusterName on created object, got '%v'", createdObjectMeta.ClusterName)
|
|
|
|
|
if len(createdObjectMeta.GetClusterName()) != 0 {
|
|
|
|
|
t.Errorf("Expected empty clusterName on created object, got '%v'", createdObjectMeta.GetClusterName())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -470,7 +471,7 @@ func (t *Tester) testUpdateEquals(obj runtime.Object, createFn CreateFunc, getFn
|
|
|
|
|
}
|
|
|
|
|
toUpdate = updateFn(toUpdate)
|
|
|
|
|
toUpdateMeta := t.getObjectMetaOrFail(toUpdate)
|
|
|
|
|
updated, created, err := t.storage.(rest.Updater).Update(ctx, toUpdateMeta.Name, rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme))
|
|
|
|
|
updated, created, err := t.storage.(rest.Updater).Update(ctx, toUpdateMeta.GetName(), rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
@ -484,7 +485,7 @@ func (t *Tester) testUpdateEquals(obj runtime.Object, createFn CreateFunc, getFn
|
|
|
|
|
// Set resource version which might be unset in created object.
|
|
|
|
|
updatedMeta := t.getObjectMetaOrFail(updated)
|
|
|
|
|
gotMeta := t.getObjectMetaOrFail(got)
|
|
|
|
|
updatedMeta.ResourceVersion = gotMeta.ResourceVersion
|
|
|
|
|
updatedMeta.SetResourceVersion(gotMeta.GetResourceVersion())
|
|
|
|
|
|
|
|
|
|
if e, a := updated, got; !apiequality.Semantic.DeepEqual(e, a) {
|
|
|
|
|
t.Errorf("unexpected obj: %#v, expected %#v", e, a)
|
|
|
|
@ -508,9 +509,9 @@ func (t *Tester) testUpdateFailsOnVersionTooOld(obj runtime.Object, createFn Cre
|
|
|
|
|
|
|
|
|
|
older := copyOrDie(storedFoo, t.scheme)
|
|
|
|
|
olderMeta := t.getObjectMetaOrFail(older)
|
|
|
|
|
olderMeta.ResourceVersion = "1"
|
|
|
|
|
olderMeta.SetResourceVersion("1")
|
|
|
|
|
|
|
|
|
|
_, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, t.scheme))
|
|
|
|
|
_, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.GetName(), rest.DefaultUpdatedObjectInfo(older, t.scheme))
|
|
|
|
|
if err == nil {
|
|
|
|
|
t.Errorf("Expected an error, but we didn't get one")
|
|
|
|
|
} else if !errors.IsConflict(err) {
|
|
|
|
@ -530,7 +531,7 @@ func (t *Tester) testUpdateInvokesValidation(obj runtime.Object, createFn Create
|
|
|
|
|
for _, update := range invalidUpdateFn {
|
|
|
|
|
toUpdate := update(copyOrDie(foo, t.scheme))
|
|
|
|
|
toUpdateMeta := t.getObjectMetaOrFail(toUpdate)
|
|
|
|
|
got, created, err := t.storage.(rest.Updater).Update(t.TestContext(), toUpdateMeta.Name, rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme))
|
|
|
|
|
got, created, err := t.storage.(rest.Updater).Update(t.TestContext(), toUpdateMeta.GetName(), rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme))
|
|
|
|
|
if got != nil || created {
|
|
|
|
|
t.Errorf("expected nil object and no creation for object: %v", toUpdate)
|
|
|
|
|
}
|
|
|
|
@ -545,13 +546,13 @@ func (t *Tester) testUpdateWithWrongUID(obj runtime.Object, createFn CreateFunc,
|
|
|
|
|
foo := copyOrDie(obj, t.scheme)
|
|
|
|
|
t.setObjectMeta(foo, t.namer(5))
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
objectMeta.UID = types.UID("UID0000")
|
|
|
|
|
objectMeta.SetUID(types.UID("UID0000"))
|
|
|
|
|
if err := createFn(ctx, foo); err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta.UID = types.UID("UID1111")
|
|
|
|
|
objectMeta.SetUID(types.UID("UID1111"))
|
|
|
|
|
|
|
|
|
|
obj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.Name, rest.DefaultUpdatedObjectInfo(foo, t.scheme))
|
|
|
|
|
obj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.GetName(), rest.DefaultUpdatedObjectInfo(foo, t.scheme))
|
|
|
|
|
if created || obj != nil {
|
|
|
|
|
t.Errorf("expected nil object and no creation for object: %v", foo)
|
|
|
|
|
}
|
|
|
|
@ -565,7 +566,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat
|
|
|
|
|
foo := copyOrDie(obj, t.scheme)
|
|
|
|
|
t.setObjectMeta(foo, t.namer(6))
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
objectMeta.Annotations = map[string]string{"A": "1"}
|
|
|
|
|
objectMeta.SetAnnotations(map[string]string{"A": "1"})
|
|
|
|
|
if err := createFn(ctx, foo); err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
return
|
|
|
|
@ -579,7 +580,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat
|
|
|
|
|
|
|
|
|
|
storedFooWithUpdates := copyOrDie(storedFoo, t.scheme)
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(storedFooWithUpdates)
|
|
|
|
|
objectMeta.Annotations = map[string]string{"A": "2"}
|
|
|
|
|
objectMeta.SetAnnotations(map[string]string{"A": "2"})
|
|
|
|
|
|
|
|
|
|
// Make sure a custom transform is called, and sees the expected updatedObject and oldObject
|
|
|
|
|
// This tests the mechanism used to pass the old and new object to admission
|
|
|
|
@ -595,7 +596,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat
|
|
|
|
|
return updatedObject, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updatedObj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.Name, rest.DefaultUpdatedObjectInfo(storedFooWithUpdates, t.scheme, noopTransform))
|
|
|
|
|
updatedObj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.GetName(), rest.DefaultUpdatedObjectInfo(storedFooWithUpdates, t.scheme, noopTransform))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
return
|
|
|
|
@ -654,9 +655,9 @@ func (t *Tester) testUpdateIgnoreGenerationUpdates(obj runtime.Object, createFn
|
|
|
|
|
|
|
|
|
|
older := copyOrDie(storedFoo, t.scheme)
|
|
|
|
|
olderMeta := t.getObjectMetaOrFail(older)
|
|
|
|
|
olderMeta.Generation = 2
|
|
|
|
|
olderMeta.SetGeneration(2)
|
|
|
|
|
|
|
|
|
|
_, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, t.scheme))
|
|
|
|
|
_, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.GetName(), rest.DefaultUpdatedObjectInfo(older, t.scheme))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("Unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
@ -665,7 +666,7 @@ func (t *Tester) testUpdateIgnoreGenerationUpdates(obj runtime.Object, createFn
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if exp, got := int64(1), t.getObjectMetaOrFail(updatedFoo).Generation; exp != got {
|
|
|
|
|
if exp, got := int64(1), t.getObjectMetaOrFail(updatedFoo).GetGeneration(); exp != got {
|
|
|
|
|
t.Errorf("Unexpected generation update: expected %d, got %d", exp, got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -704,8 +705,8 @@ func (t *Tester) testUpdateRejectsMismatchedNamespace(obj runtime.Object, create
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(storedFoo)
|
|
|
|
|
objectMeta.Name = t.namer(1)
|
|
|
|
|
objectMeta.Namespace = "not-default"
|
|
|
|
|
objectMeta.SetName(t.namer(1))
|
|
|
|
|
objectMeta.SetNamespace("not-default")
|
|
|
|
|
|
|
|
|
|
obj, updated, err := t.storage.(rest.Updater).Update(t.TestContext(), "foo1", rest.DefaultUpdatedObjectInfo(storedFoo, t.scheme))
|
|
|
|
|
if obj != nil || updated {
|
|
|
|
@ -736,9 +737,9 @@ func (t *Tester) testUpdateIgnoreClusterName(obj runtime.Object, createFn Create
|
|
|
|
|
|
|
|
|
|
older := copyOrDie(storedFoo, t.scheme)
|
|
|
|
|
olderMeta := t.getObjectMetaOrFail(older)
|
|
|
|
|
olderMeta.ClusterName = "clustername-to-ignore"
|
|
|
|
|
olderMeta.SetClusterName("clustername-to-ignore")
|
|
|
|
|
|
|
|
|
|
_, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, t.scheme))
|
|
|
|
|
_, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.GetName(), rest.DefaultUpdatedObjectInfo(older, t.scheme))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("Unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
@ -747,7 +748,7 @@ func (t *Tester) testUpdateIgnoreClusterName(obj runtime.Object, createFn Create
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if clusterName := t.getObjectMetaOrFail(updatedFoo).ClusterName; len(clusterName) != 0 {
|
|
|
|
|
if clusterName := t.getObjectMetaOrFail(updatedFoo).GetClusterName(); len(clusterName) != 0 {
|
|
|
|
|
t.Errorf("Unexpected clusterName update: expected empty, got %v", clusterName)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -765,12 +766,12 @@ func (t *Tester) testDeleteNoGraceful(obj runtime.Object, createFn CreateFunc, g
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
obj, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(10))
|
|
|
|
|
obj, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(10))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if !wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if !t.returnDeletedObject {
|
|
|
|
|
if status, ok := obj.(*metav1.Status); !ok {
|
|
|
|
@ -789,7 +790,7 @@ func (t *Tester) testDeleteNoGraceful(obj runtime.Object, createFn CreateFunc, g
|
|
|
|
|
func (t *Tester) testDeleteNonExist(obj runtime.Object) {
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(obj)
|
|
|
|
|
|
|
|
|
|
_, _, err := t.storage.(rest.GracefulDeleter).Delete(t.TestContext(), objectMeta.Name, nil)
|
|
|
|
|
_, _, err := t.storage.(rest.GracefulDeleter).Delete(t.TestContext(), objectMeta.GetName(), nil)
|
|
|
|
|
if err == nil || !errors.IsNotFound(err) {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
@ -804,16 +805,16 @@ func (t *Tester) testDeleteWithUID(obj runtime.Object, createFn CreateFunc, getF
|
|
|
|
|
foo := copyOrDie(obj, t.scheme)
|
|
|
|
|
t.setObjectMeta(foo, t.namer(1))
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
objectMeta.UID = types.UID("UID0000")
|
|
|
|
|
objectMeta.SetUID(types.UID("UID0000"))
|
|
|
|
|
if err := createFn(ctx, foo); err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
obj, _, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewPreconditionDeleteOptions("UID1111"))
|
|
|
|
|
obj, _, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewPreconditionDeleteOptions("UID1111"))
|
|
|
|
|
if err == nil || !errors.IsConflict(err) {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj, _, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewPreconditionDeleteOptions("UID0000"))
|
|
|
|
|
obj, _, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewPreconditionDeleteOptions("UID0000"))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
@ -844,27 +845,27 @@ func (t *Tester) testDeleteGracefulHasDefault(obj runtime.Object, createFn Creat
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
generation := objectMeta.Generation
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, &metav1.DeleteOptions{})
|
|
|
|
|
generation := objectMeta.GetGeneration()
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), &metav1.DeleteOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if _, err := getFn(ctx, foo); err != nil {
|
|
|
|
|
t.Fatalf("did not gracefully delete resource: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("unexpected error, object should exist: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(object)
|
|
|
|
|
if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != expectedGrace {
|
|
|
|
|
if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace {
|
|
|
|
|
t.Errorf("unexpected deleted meta: %#v", objectMeta)
|
|
|
|
|
}
|
|
|
|
|
if generation >= objectMeta.Generation {
|
|
|
|
|
if generation >= objectMeta.GetGeneration() {
|
|
|
|
|
t.Error("Generation wasn't bumped when deletion timestamp was set")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -878,27 +879,27 @@ func (t *Tester) testDeleteGracefulWithValue(obj runtime.Object, createFn Create
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
generation := objectMeta.Generation
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace+2))
|
|
|
|
|
generation := objectMeta.GetGeneration()
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace+2))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if _, err := getFn(ctx, foo); err != nil {
|
|
|
|
|
t.Fatalf("did not gracefully delete resource: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error, object should exist: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(object)
|
|
|
|
|
if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != expectedGrace+2 {
|
|
|
|
|
if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace+2 {
|
|
|
|
|
t.Errorf("unexpected deleted meta: %#v", objectMeta)
|
|
|
|
|
}
|
|
|
|
|
if generation >= objectMeta.Generation {
|
|
|
|
|
if generation >= objectMeta.GetGeneration() {
|
|
|
|
|
t.Error("Generation wasn't bumped when deletion timestamp was set")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -912,35 +913,35 @@ func (t *Tester) testDeleteGracefulExtend(obj runtime.Object, createFn CreateFun
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
generation := objectMeta.Generation
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace))
|
|
|
|
|
generation := objectMeta.GetGeneration()
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if _, err := getFn(ctx, foo); err != nil {
|
|
|
|
|
t.Fatalf("did not gracefully delete resource: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// second delete duration is ignored
|
|
|
|
|
_, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace+2))
|
|
|
|
|
_, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace+2))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error, object should exist: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(object)
|
|
|
|
|
if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != expectedGrace {
|
|
|
|
|
if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace {
|
|
|
|
|
t.Errorf("unexpected deleted meta: %#v", objectMeta)
|
|
|
|
|
}
|
|
|
|
|
if generation >= objectMeta.Generation {
|
|
|
|
|
if generation >= objectMeta.GetGeneration() {
|
|
|
|
|
t.Error("Generation wasn't bumped when deletion timestamp was set")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -954,36 +955,36 @@ func (t *Tester) testDeleteGracefulImmediate(obj runtime.Object, createFn Create
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
generation := objectMeta.Generation
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace))
|
|
|
|
|
generation := objectMeta.GetGeneration()
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if _, err := getFn(ctx, foo); err != nil {
|
|
|
|
|
t.Fatalf("did not gracefully delete resource: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// second delete is immediate, resource is deleted
|
|
|
|
|
out, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(0))
|
|
|
|
|
out, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(0))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted != true {
|
|
|
|
|
t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
_, err = t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
_, err = t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if !errors.IsNotFound(err) {
|
|
|
|
|
t.Errorf("unexpected error, object should be deleted immediately: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(out)
|
|
|
|
|
// the second delete shouldn't update the object, so the objectMeta.DeletionGracePeriodSeconds should eqaul to the value set in the first delete.
|
|
|
|
|
if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != 0 {
|
|
|
|
|
// the second delete shouldn't update the object, so the objectMeta.GetDeletionGracePeriodSeconds() should eqaul to the value set in the first delete.
|
|
|
|
|
if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != 0 {
|
|
|
|
|
t.Errorf("unexpected deleted meta: %#v", objectMeta)
|
|
|
|
|
}
|
|
|
|
|
if generation >= objectMeta.Generation {
|
|
|
|
|
if generation >= objectMeta.GetGeneration() {
|
|
|
|
|
t.Error("Generation wasn't bumped when deletion timestamp was set")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -997,14 +998,14 @@ func (t *Tester) testDeleteGracefulUsesZeroOnNil(obj runtime.Object, createFn Cr
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, nil)
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), nil)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if !wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if _, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}); !errors.IsNotFound(err) {
|
|
|
|
|
if _, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}); !errors.IsNotFound(err) {
|
|
|
|
|
t.Errorf("unexpected error, object should not exist: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1023,35 +1024,35 @@ func (t *Tester) testDeleteGracefulShorten(obj runtime.Object, createFn CreateFu
|
|
|
|
|
bigGrace = 2 * expectedGrace
|
|
|
|
|
}
|
|
|
|
|
objectMeta := t.getObjectMetaOrFail(foo)
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(bigGrace))
|
|
|
|
|
_, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(bigGrace))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
object, err := getFn(ctx, foo)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("did not gracefully delete resource: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(object)
|
|
|
|
|
deletionTimestamp := *objectMeta.DeletionTimestamp
|
|
|
|
|
deletionTimestamp := *objectMeta.GetDeletionTimestamp()
|
|
|
|
|
|
|
|
|
|
// second delete duration is ignored
|
|
|
|
|
_, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace))
|
|
|
|
|
_, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
if wasDeleted {
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name)
|
|
|
|
|
t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
object, err = t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
object, err = t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error, object should exist: %v", err)
|
|
|
|
|
}
|
|
|
|
|
objectMeta = t.getObjectMetaOrFail(object)
|
|
|
|
|
if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil ||
|
|
|
|
|
*objectMeta.DeletionGracePeriodSeconds != expectedGrace || !objectMeta.DeletionTimestamp.Before(deletionTimestamp) {
|
|
|
|
|
if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil ||
|
|
|
|
|
*objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace || !objectMeta.GetDeletionTimestamp().Before(deletionTimestamp) {
|
|
|
|
|
t.Errorf("unexpected deleted meta: %#v", objectMeta)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1066,43 +1067,43 @@ func (t *Tester) testGetDifferentNamespace(obj runtime.Object) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
objMeta := t.getObjectMetaOrFail(obj)
|
|
|
|
|
objMeta.Name = t.namer(5)
|
|
|
|
|
objMeta.SetName(t.namer(5))
|
|
|
|
|
|
|
|
|
|
ctx1 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar3")
|
|
|
|
|
objMeta.Namespace = genericapirequest.NamespaceValue(ctx1)
|
|
|
|
|
objMeta.SetNamespace(genericapirequest.NamespaceValue(ctx1))
|
|
|
|
|
_, err := t.storage.(rest.Creater).Create(ctx1, obj)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ctx2 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar4")
|
|
|
|
|
objMeta.Namespace = genericapirequest.NamespaceValue(ctx2)
|
|
|
|
|
objMeta.SetNamespace(genericapirequest.NamespaceValue(ctx2))
|
|
|
|
|
_, err = t.storage.(rest.Creater).Create(ctx2, obj)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
got1, err := t.storage.(rest.Getter).Get(ctx1, objMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
got1, err := t.storage.(rest.Getter).Get(ctx1, objMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
got1Meta := t.getObjectMetaOrFail(got1)
|
|
|
|
|
if got1Meta.Name != objMeta.Name {
|
|
|
|
|
t.Errorf("unexpected name of object: %#v, expected: %s", got1, objMeta.Name)
|
|
|
|
|
if got1Meta.GetName() != objMeta.GetName() {
|
|
|
|
|
t.Errorf("unexpected name of object: %#v, expected: %s", got1, objMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if got1Meta.Namespace != genericapirequest.NamespaceValue(ctx1) {
|
|
|
|
|
if got1Meta.GetNamespace() != genericapirequest.NamespaceValue(ctx1) {
|
|
|
|
|
t.Errorf("unexpected namespace of object: %#v, expected: %s", got1, genericapirequest.NamespaceValue(ctx1))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
got2, err := t.storage.(rest.Getter).Get(ctx2, objMeta.Name, &metav1.GetOptions{})
|
|
|
|
|
got2, err := t.storage.(rest.Getter).Get(ctx2, objMeta.GetName(), &metav1.GetOptions{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
got2Meta := t.getObjectMetaOrFail(got2)
|
|
|
|
|
if got2Meta.Name != objMeta.Name {
|
|
|
|
|
t.Errorf("unexpected name of object: %#v, expected: %s", got2, objMeta.Name)
|
|
|
|
|
if got2Meta.GetName() != objMeta.GetName() {
|
|
|
|
|
t.Errorf("unexpected name of object: %#v, expected: %s", got2, objMeta.GetName())
|
|
|
|
|
}
|
|
|
|
|
if got2Meta.Namespace != genericapirequest.NamespaceValue(ctx2) {
|
|
|
|
|
if got2Meta.GetNamespace() != genericapirequest.NamespaceValue(ctx2) {
|
|
|
|
|
t.Errorf("unexpected namespace of object: %#v, expected: %s", got2, genericapirequest.NamespaceValue(ctx2))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1122,7 +1123,7 @@ func (t *Tester) testGetFound(obj runtime.Object) {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
gotMeta := t.getObjectMetaOrFail(got)
|
|
|
|
|
gotMeta.ResourceVersion = existingMeta.ResourceVersion
|
|
|
|
|
gotMeta.SetResourceVersion(existingMeta.GetResourceVersion())
|
|
|
|
|
if e, a := existing, got; !apiequality.Semantic.DeepEqual(e, a) {
|
|
|
|
|
t.Errorf("unexpected obj: %#v, expected %#v", e, a)
|
|
|
|
|
}
|
|
|
|
@ -1132,8 +1133,8 @@ func (t *Tester) testGetMimatchedNamespace(obj runtime.Object) {
|
|
|
|
|
ctx1 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar1")
|
|
|
|
|
ctx2 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar2")
|
|
|
|
|
objMeta := t.getObjectMetaOrFail(obj)
|
|
|
|
|
objMeta.Name = t.namer(4)
|
|
|
|
|
objMeta.Namespace = genericapirequest.NamespaceValue(ctx1)
|
|
|
|
|
objMeta.SetName(t.namer(4))
|
|
|
|
|
objMeta.SetNamespace(genericapirequest.NamespaceValue(ctx1))
|
|
|
|
|
_, err := t.storage.(rest.Creater).Create(ctx1, obj)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
@ -1219,9 +1220,9 @@ func (t *Tester) testListMatchLabels(obj runtime.Object, assignFn AssignFunc) {
|
|
|
|
|
t.setObjectMeta(foo3, "foo3")
|
|
|
|
|
foo4 := copyOrDie(obj, t.scheme)
|
|
|
|
|
foo4Meta := t.getObjectMetaOrFail(foo4)
|
|
|
|
|
foo4Meta.Name = "foo4"
|
|
|
|
|
foo4Meta.Namespace = genericapirequest.NamespaceValue(ctx)
|
|
|
|
|
foo4Meta.Labels = testLabels
|
|
|
|
|
foo4Meta.SetName("foo4")
|
|
|
|
|
foo4Meta.SetNamespace(genericapirequest.NamespaceValue(ctx))
|
|
|
|
|
foo4Meta.SetLabels(testLabels)
|
|
|
|
|
|
|
|
|
|
objs := ([]runtime.Object{foo3, foo4})
|
|
|
|
|
|
|
|
|
|