core/v1: add validation and defaulting unit tests for when internalTrafficPolicy is nil and Service type is ExternalName

Signed-off-by: Andrew Sy Kim <kim.andrewsy@gmail.com>
This commit is contained in:
Andrew Sy Kim 2021-09-08 13:55:41 -04:00
parent 3a927cc6b3
commit 60b38ee180
2 changed files with 27 additions and 13 deletions

View File

@ -1840,19 +1840,19 @@ func TestSetDefaultServiceInternalTrafficPolicy(t *testing.T) {
local := v1.ServiceInternalTrafficPolicyLocal local := v1.ServiceInternalTrafficPolicyLocal
testCases := []struct { testCases := []struct {
name string name string
expectedInternalTrafficPolicy v1.ServiceInternalTrafficPolicyType expectedInternalTrafficPolicy *v1.ServiceInternalTrafficPolicyType
svc v1.Service svc v1.Service
featureGateOn bool featureGateOn bool
}{ }{
{ {
name: "must set default internalTrafficPolicy", name: "must set default internalTrafficPolicy",
expectedInternalTrafficPolicy: v1.ServiceInternalTrafficPolicyCluster, expectedInternalTrafficPolicy: &cluster,
svc: v1.Service{}, svc: v1.Service{},
featureGateOn: true, featureGateOn: true,
}, },
{ {
name: "must not set default internalTrafficPolicy when it's cluster", name: "must not set default internalTrafficPolicy when it's cluster",
expectedInternalTrafficPolicy: v1.ServiceInternalTrafficPolicyCluster, expectedInternalTrafficPolicy: &cluster,
svc: v1.Service{ svc: v1.Service{
Spec: v1.ServiceSpec{ Spec: v1.ServiceSpec{
InternalTrafficPolicy: &cluster, InternalTrafficPolicy: &cluster,
@ -1860,9 +1860,19 @@ func TestSetDefaultServiceInternalTrafficPolicy(t *testing.T) {
}, },
featureGateOn: true, featureGateOn: true,
}, },
{
name: "must not set default internalTrafficPolicy when type is ExternalName",
expectedInternalTrafficPolicy: nil,
svc: v1.Service{
Spec: v1.ServiceSpec{
Type: v1.ServiceTypeExternalName,
},
},
featureGateOn: true,
},
{ {
name: "must not set default internalTrafficPolicy when it's local", name: "must not set default internalTrafficPolicy when it's local",
expectedInternalTrafficPolicy: v1.ServiceInternalTrafficPolicyLocal, expectedInternalTrafficPolicy: &local,
svc: v1.Service{ svc: v1.Service{
Spec: v1.ServiceSpec{ Spec: v1.ServiceSpec{
InternalTrafficPolicy: &local, InternalTrafficPolicy: &local,
@ -1872,7 +1882,7 @@ func TestSetDefaultServiceInternalTrafficPolicy(t *testing.T) {
}, },
{ {
name: "must not set default internalTrafficPolicy when gate is disabled", name: "must not set default internalTrafficPolicy when gate is disabled",
expectedInternalTrafficPolicy: "", expectedInternalTrafficPolicy: nil,
svc: v1.Service{}, svc: v1.Service{},
featureGateOn: false, featureGateOn: false,
}, },
@ -1883,14 +1893,8 @@ func TestSetDefaultServiceInternalTrafficPolicy(t *testing.T) {
obj := roundTrip(t, runtime.Object(&test.svc)) obj := roundTrip(t, runtime.Object(&test.svc))
svc := obj.(*v1.Service) svc := obj.(*v1.Service)
if test.expectedInternalTrafficPolicy == "" { if !reflect.DeepEqual(svc.Spec.InternalTrafficPolicy, test.expectedInternalTrafficPolicy) {
if svc.Spec.InternalTrafficPolicy != nil { t.Errorf("expected .spec.internalTrafficPolicy: %v got %v", test.expectedInternalTrafficPolicy, svc.Spec.InternalTrafficPolicy)
t.Fatalf("expected .spec.internalTrafficPolicy: null, got %v", *svc.Spec.InternalTrafficPolicy)
}
} else {
if *svc.Spec.InternalTrafficPolicy != test.expectedInternalTrafficPolicy {
t.Fatalf("expected .spec.internalTrafficPolicy: %v got %v", test.expectedInternalTrafficPolicy, *svc.Spec.InternalTrafficPolicy)
}
} }
}) })
} }

View File

@ -12281,6 +12281,16 @@ func TestValidateServiceCreate(t *testing.T) {
featureGates: []featuregate.Feature{features.ServiceInternalTrafficPolicy}, featureGates: []featuregate.Feature{features.ServiceInternalTrafficPolicy},
numErrs: 1, numErrs: 1,
}, },
{
name: "internalTrafficPolicy field nil when type is ExternalName",
tweakSvc: func(s *core.Service) {
s.Spec.InternalTrafficPolicy = nil
s.Spec.Type = core.ServiceTypeExternalName
s.Spec.ExternalName = "foo.bar.com"
},
featureGates: []featuregate.Feature{features.ServiceInternalTrafficPolicy},
numErrs: 0,
},
{ {
name: "invalid internalTraffic field", name: "invalid internalTraffic field",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {