From 858e515f85dd6d8ba1cebaf82e882326dadbc118 Mon Sep 17 00:00:00 2001 From: jianhuiz Date: Thu, 18 Aug 2016 22:06:49 -0700 Subject: [PATCH] ignore clusterName on create and update --- pkg/api/rest/create.go | 3 ++ pkg/api/rest/resttest/resttest.go | 53 +++++++++++++++++++++++++++++++ pkg/api/rest/update.go | 3 ++ 3 files changed, 59 insertions(+) diff --git a/pkg/api/rest/create.go b/pkg/api/rest/create.go index 32ebfc395cb..7d99ee84ddd 100644 --- a/pkg/api/rest/create.go +++ b/pkg/api/rest/create.go @@ -71,6 +71,9 @@ func BeforeCreate(strategy RESTCreateStrategy, ctx api.Context, obj runtime.Obje api.FillObjectMetaSystemFields(ctx, objectMeta) api.GenerateName(strategy, objectMeta) + // ClusterName is ignored and should not be saved + objectMeta.ClusterName = "" + if errs := strategy.Validate(ctx, obj); len(errs) > 0 { return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs) } diff --git a/pkg/api/rest/resttest/resttest.go b/pkg/api/rest/resttest/resttest.go index e4c1bbb3922..eac563bd876 100644 --- a/pkg/api/rest/resttest/resttest.go +++ b/pkg/api/rest/resttest/resttest.go @@ -159,6 +159,7 @@ func (t *Tester) TestCreate(valid runtime.Object, createFn CreateFunc, getFn Get } t.testCreateInvokesValidation(invalid...) t.testCreateValidatesNames(copyOrDie(valid)) + t.testCreateIgnoreClusterName(copyOrDie(valid)) } // Test updating an object. @@ -174,6 +175,7 @@ func (t *Tester) TestUpdate(valid runtime.Object, createFn CreateFunc, getFn Get t.testUpdateRetrievesOldObject(copyOrDie(valid), createFn, getFn) t.testUpdatePropagatesUpdatedObjectError(copyOrDie(valid), createFn, getFn) t.testUpdateIgnoreGenerationUpdates(copyOrDie(valid), createFn, getFn) + t.testUpdateIgnoreClusterName(copyOrDie(valid), createFn, getFn) } // Test deleting an object. @@ -430,6 +432,22 @@ func (t *Tester) testCreateResetsUserData(valid runtime.Object) { } } +func (t *Tester) testCreateIgnoreClusterName(valid runtime.Object) { + objectMeta := t.getObjectMetaOrFail(valid) + objectMeta.Name = t.namer(3) + objectMeta.ClusterName = "clustername-to-ignore" + + obj, err := t.storage.(rest.Creater).Create(t.TestContext(), copyOrDie(valid)) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + 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) + } +} + // ============================================================================= // Update tests. @@ -691,6 +709,41 @@ func (t *Tester) testUpdateRejectsMismatchedNamespace(obj runtime.Object, create } } +func (t *Tester) testUpdateIgnoreClusterName(obj runtime.Object, createFn CreateFunc, getFn GetFunc) { + ctx := t.TestContext() + + foo := copyOrDie(obj) + name := t.namer(9) + t.setObjectMeta(foo, name) + + if err := createFn(ctx, foo); err != nil { + t.Errorf("unexpected error: %v", err) + } + + storedFoo, err := getFn(ctx, foo) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + older := copyOrDie(storedFoo) + olderMeta := t.getObjectMetaOrFail(older) + olderMeta.ClusterName = "clustername-to-ignore" + + _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, api.Scheme)) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + + updatedFoo, err := getFn(ctx, older) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if clusterName := t.getObjectMetaOrFail(updatedFoo).ClusterName; len(clusterName) != 0 { + t.Errorf("Unexpected clusterName update: expected empty, got %v", clusterName) + } + +} + // ============================================================================= // Deletion tests. diff --git a/pkg/api/rest/update.go b/pkg/api/rest/update.go index 8b17d9a5586..af65dbc463e 100644 --- a/pkg/api/rest/update.go +++ b/pkg/api/rest/update.go @@ -95,6 +95,9 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx api.Context, obj, old runtime strategy.PrepareForUpdate(ctx, obj, old) + // ClusterName is ignored and should not be saved + objectMeta.ClusterName = "" + // Ensure some common fields, like UID, are validated for all resources. errs, err := validateCommonFields(obj, old) if err != nil {