From 5623006f984661e957e92f6f02b256169bfccfaf Mon Sep 17 00:00:00 2001 From: Pavithra Ramesh Date: Tue, 30 Jul 2019 12:36:32 -0700 Subject: [PATCH] unit test --- .../gce/gce_loadbalancer_internal_test.go | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go index f2aaf029f7e..2e56bb65d17 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go @@ -31,6 +31,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" + cloudprovider "k8s.io/cloud-provider" servicehelper "k8s.io/cloud-provider/service/helpers" ) @@ -847,3 +848,65 @@ func TestCompareHealthChecks(t *testing.T) { }) } } + +// Test creation of InternalLoadBalancer with ILB Subsets featuregate enabled. +func TestEnsureInternalLoadBalancerSubsetting(t *testing.T) { + t.Parallel() + + vals := DefaultTestClusterValues() + gce, err := fakeGCECloud(vals) + require.NoError(t, err) + gce.AlphaFeatureGate = NewAlphaFeatureGate([]string{AlphaFeatureILBSubsets}) + + nodeNames := []string{"test-node-1"} + nodes, err := createAndInsertNodes(gce, nodeNames, vals.ZoneName) + require.NoError(t, err) + + svc := fakeLoadbalancerService(string(LBTypeInternal)) + status, err := createInternalLoadBalancer(gce, svc, nil, nodeNames, vals.ClusterName, vals.ClusterID, vals.ZoneName) + assert.EqualError(t, err, cloudprovider.ImplementedElsewhere.Error()) + // No loadbalancer resources will be created due to the ILB Feature Gate + assert.Empty(t, status) + assertInternalLbResourcesDeleted(t, gce, svc, vals, true) + // Invoking delete should be a no-op + err = gce.EnsureLoadBalancerDeleted(context.Background(), vals.ClusterName, svc) + assert.NoError(t, err) + assertInternalLbResourcesDeleted(t, gce, svc, vals, true) + // Now remove the feature gate so that lb resources are created + gce.AlphaFeatureGate = NewAlphaFeatureGate([]string{}) + status, err = gce.EnsureLoadBalancer(context.Background(), vals.ClusterName, svc, nodes) + assert.NoError(t, err) + assert.NotEmpty(t, status.Ingress) + assertInternalLbResources(t, gce, svc, vals, nodeNames) +} + +func TestEnsureInternalLoadBalancerDeletedSubsetting(t *testing.T) { + t.Parallel() + + vals := DefaultTestClusterValues() + gce, err := fakeGCECloud(vals) + require.NoError(t, err) + + nodeNames := []string{"test-node-1"} + nodes, err := createAndInsertNodes(gce, nodeNames, vals.ZoneName) + require.NoError(t, err) + svc := fakeLoadbalancerService(string(LBTypeInternal)) + status, err := createInternalLoadBalancer(gce, svc, nil, nodeNames, vals.ClusterName, vals.ClusterID, vals.ZoneName) + + assert.NoError(t, err) + assert.NotEmpty(t, status.Ingress) + // Enable FeatureGatee + gce.AlphaFeatureGate = NewAlphaFeatureGate([]string{AlphaFeatureILBSubsets}) + newLBStatus := v1.LoadBalancerStatus{Ingress: []v1.LoadBalancerIngress{{IP: "1.2.3.4"}}} + // mock scenario where a different controller modifies status. + svc.Status.LoadBalancer = newLBStatus + status, err = gce.EnsureLoadBalancer(context.Background(), vals.ClusterName, svc, nodes) + assert.EqualError(t, err, cloudprovider.ImplementedElsewhere.Error()) + // ensure that the status is empty + assert.Empty(t, status) + assert.Equal(t, svc.Status.LoadBalancer, newLBStatus) + // Invoked when service is deleted. + err = gce.EnsureLoadBalancerDeleted(context.Background(), vals.ClusterName, svc) + assert.NoError(t, err) + assertInternalLbResourcesDeleted(t, gce, svc, vals, true) +}