From 740aa93838f34c3d4a22add6da360f3da8279743 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Fri, 3 Feb 2017 12:16:13 -0800 Subject: [PATCH] Fix deployment unit test by adding a dummy update reactor --- .../deployment/deploymentcontroller.go | 6 ++++-- .../deployment/deploymentcontroller_test.go | 3 +++ .../federation-controller/util/test/test_helper.go | 12 ++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/federation/pkg/federation-controller/deployment/deploymentcontroller.go b/federation/pkg/federation-controller/deployment/deploymentcontroller.go index bfa4d918d5d..7a6d23c0168 100644 --- a/federation/pkg/federation-controller/deployment/deploymentcontroller.go +++ b/federation/pkg/federation-controller/deployment/deploymentcontroller.go @@ -420,8 +420,10 @@ func (fdc *DeploymentController) schedule(fd *extensionsv1.Deployment, clusters if fdPref != nil { // create a new planner if user specified a preference plannerToBeUsed = planner.NewPlanner(fdPref) } - - replicas := int64(*fd.Spec.Replicas) + replicas := int64(0) + if fd.Spec.Replicas != nil { + replicas = int64(*fd.Spec.Replicas) + } var clusterNames []string for _, cluster := range clusters { clusterNames = append(clusterNames, cluster.Name) diff --git a/federation/pkg/federation-controller/deployment/deploymentcontroller_test.go b/federation/pkg/federation-controller/deployment/deploymentcontroller_test.go index 2fd6d92d8e5..7a857fde9aa 100644 --- a/federation/pkg/federation-controller/deployment/deploymentcontroller_test.go +++ b/federation/pkg/federation-controller/deployment/deploymentcontroller_test.go @@ -85,6 +85,9 @@ func TestDeploymentController(t *testing.T) { cluster2 := NewCluster("cluster2", apiv1.ConditionTrue) fakeClient := &fakefedclientset.Clientset{} + // Add an update reactor on fake client to return the desired updated object. + // This is a hack to workaround https://github.com/kubernetes/kubernetes/issues/40939. + AddFakeUpdateReactor("deployments", &fakeClient.Fake) RegisterFakeList("clusters", &fakeClient.Fake, &fedv1.ClusterList{Items: []fedv1.Cluster{*cluster1}}) deploymentsWatch := RegisterFakeWatch("deployments", &fakeClient.Fake) clusterWatch := RegisterFakeWatch("clusters", &fakeClient.Fake) diff --git a/federation/pkg/federation-controller/util/test/test_helper.go b/federation/pkg/federation-controller/util/test/test_helper.go index 409903f6b56..4a9020725e5 100644 --- a/federation/pkg/federation-controller/util/test/test_helper.go +++ b/federation/pkg/federation-controller/util/test/test_helper.go @@ -226,6 +226,18 @@ func RegisterFakeCopyOnUpdate(resource string, client *core.Fake, watcher *Watch return objChan } +// Adds an update reactor to the given fake client. +// The reactor just returns the object passed to update action. +// This is used as a hack to workaround https://github.com/kubernetes/kubernetes/issues/40939. +// Without this, all update actions using fake client return empty objects. +func AddFakeUpdateReactor(resource string, client *core.Fake) { + client.AddReactor("update", resource, func(action core.Action) (bool, runtime.Object, error) { + updateAction := action.(core.UpdateAction) + originalObj := updateAction.GetObject() + return true, originalObj, nil + }) +} + // GetObjectFromChan tries to get an api object from the given channel // within a reasonable time. func GetObjectFromChan(c chan runtime.Object) runtime.Object {