Add test for wrong networktier resource deletion

This commit is contained in:
Ashley Gau 2018-02-12 13:14:45 -08:00 committed by Ashley Gau
parent 6235a60906
commit a39e7e4146
2 changed files with 72 additions and 0 deletions

View File

@ -28,6 +28,7 @@ import (
"fmt"
"net/http"
alpha "google.golang.org/api/compute/v0.alpha"
ga "google.golang.org/api/compute/v1"
"google.golang.org/api/googleapi"
cloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
@ -74,3 +75,21 @@ func RemoveInstanceHook(ctx context.Context, key *meta.Key, req *ga.TargetPoolsR
return nil
}
// GetAlphaFwdRuleHook mocks getting an AlphaForwardingRule. ForwardingRules
// are expected to default to Premium tier if no NetworkTier is specified.
func GetAlphaFwdRuleHook(ctx context.Context, key *meta.Key, m *cloud.MockAlphaForwardingRules) (bool, *alpha.ForwardingRule, error) {
if obj, ok := m.Objects[*key]; ok {
typedObj := obj.ToAlpha()
if typedObj.NetworkTier == "" {
typedObj.NetworkTier = "PREMIUM"
}
return true, typedObj, nil
}
err := &googleapi.Error{
Code: http.StatusNotFound,
}
return false, nil, err
}

View File

@ -27,6 +27,7 @@ import (
"k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock"
@ -296,6 +297,7 @@ func fakeGCECloud() (*GCECloud, error) {
cloud := cloud.NewMockGCE(&gceProjectRouter{gce})
cloud.MockTargetPools.AddInstanceHook = mock.AddInstanceHook
cloud.MockTargetPools.RemoveInstanceHook = mock.RemoveInstanceHook
cloud.MockAlphaForwardingRules.GetHook = mock.GetAlphaFwdRuleHook
gce.c = cloud
@ -501,3 +503,54 @@ func TestEnsureExternalLoadBalancerDeleted(t *testing.T) {
require.Error(t, err)
assert.Nil(t, fwdRule)
}
func TestLoadBalancerWrongTierResourceDeletion(t *testing.T) {
gce, err := fakeGCECloud()
require.NoError(t, err)
// Enable the NetworkTiers feature
gce.AlphaFeatureGate.features[AlphaFeatureNetworkTiers] = true
apiService.Annotations = map[string]string{NetworkTierAnnotationKey: "Premium"}
// NetworkTier defaults to Premium
desiredTier, err := gce.getServiceNetworkTier(apiService)
require.NoError(t, err)
assert.Equal(t, NetworkTierPremium, desiredTier)
lbName := cloudprovider.GetLoadBalancerName(apiService)
serviceName := types.NamespacedName{Namespace: apiService.Namespace, Name: apiService.Name}
// create ForwardingRule and Address with the wrong tier
err = createForwardingRule(
gce,
lbName,
serviceName.String(),
gceRegion,
"",
gce.targetPoolURL(lbName),
apiService.Spec.Ports,
NetworkTierStandard,
)
require.NoError(t, err)
addressObj := &computealpha.Address{
Name: lbName,
Description: serviceName.String(),
NetworkTier: NetworkTierStandard.ToGCEValue(),
}
err = gce.ReserveAlphaRegionAddress(addressObj, gceRegion)
require.NoError(t, err)
_, err = createExternalLoadBalancer(gce)
require.NoError(t, err)
// Expect forwarding rule tier to not be Standard
tier, err := gce.getNetworkTierFromForwardingRule(lbName, gceRegion)
assert.NoError(t, err)
assert.Equal(t, NetworkTierDefault.ToGCEValue(), tier)
// Expect address to be deleted
_, err = gce.GetRegionAddress(lbName, gceRegion)
assert.True(t, isNotFound(err))
}