From 02a294533bbe480470cf2367a77fb94e79e9e2bc Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Mon, 13 Mar 2017 12:50:35 -0700 Subject: [PATCH] fed: Fix flakey ingress unit test The unit test for the ingress controller was previously adding a cluster twice, which resulted in a cluster being deleted and added back. The deletion was racing the controller shutdown to close informer channels. This change ensures that the informer clears its map of informers when Stop() is called to prevent a double close, and that the test no longer adds the cluster twice. --- .../ingress/ingress_controller_test.go | 6 +----- .../pkg/federation-controller/util/federated_informer.go | 4 ++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/federation/pkg/federation-controller/ingress/ingress_controller_test.go b/federation/pkg/federation-controller/ingress/ingress_controller_test.go index 1a06bbf260..7a93930a85 100644 --- a/federation/pkg/federation-controller/ingress/ingress_controller_test.go +++ b/federation/pkg/federation-controller/ingress/ingress_controller_test.go @@ -252,14 +252,10 @@ func TestIngressController(t *testing.T) { assert.True(t, reflect.DeepEqual(updatedIngress2.Spec, fedIngress.Spec), "Spec of updated ingress is not equal") assert.Equal(t, updatedIngress2.ObjectMeta.Annotations["A"], fedIngress.ObjectMeta.Annotations["A"], "Updated annotation not transferred from federated to cluster ingress.") - // Test add cluster - t.Log("Adding a second cluster") - fedIngress.Annotations[staticIPNameKeyWritable] = "foo" // Make sure that the base object has a static IP name first. fedIngressWatch.Modify(&fedIngress) - clusterWatch.Add(cluster2) - t.Log("Checking that the ingress got created in cluster 2") + t.Log("Checking that the ingress got created in cluster 2 after a global ip was assigned") createdIngress2 := GetIngressFromChan(t, cluster2IngressCreateChan) assert.NotNil(t, createdIngress2) assert.True(t, reflect.DeepEqual(fedIngress.Spec, createdIngress2.Spec), "Spec of created ingress is not equal") diff --git a/federation/pkg/federation-controller/util/federated_informer.go b/federation/pkg/federation-controller/util/federated_informer.go index 6d74647ac2..0a3ab70e80 100644 --- a/federation/pkg/federation-controller/util/federated_informer.go +++ b/federation/pkg/federation-controller/util/federated_informer.go @@ -281,6 +281,10 @@ func (f *federatedInformerImpl) Stop() { for key, informer := range f.targetInformers { glog.V(4).Infof("... Closing informer channel for %q.", key) close(informer.stopChan) + // Remove each informer after it has been stopped to prevent + // subsequent cluster deletion from attempting to double close + // an informer's stop channel. + delete(f.targetInformers, key) } }