Svc REST: Change ETP create test to a feature test

All the same test cases and more.
This commit is contained in:
Tim Hockin 2021-08-01 17:08:05 -07:00
parent f4521aa75a
commit 7b1e43665d

View File

@ -5204,225 +5204,6 @@ func TestCreateInitNodePorts(t *testing.T) {
}
}
func TestCreateExternalTrafficPolicy(t *testing.T) {
testCases := []struct {
name string
svc *api.Service
expectError bool
expectHCNP bool
}{{
name: "ExternalName_policy:none_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy("")),
expectHCNP: false,
}, {
name: "ExternalName_policy:none_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "ExternalName_policy:Cluster_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectError: true,
}, {
name: "ExternalName_policy:Cluster_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "ExternalName_policy:Local_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectError: true,
}, {
name: "ExternalName_policy:Local_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "ClusterIP_policy:none_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy("")),
expectHCNP: false,
}, {
name: "ClusterIP_policy:none_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "ClusterIP_policy:Cluster_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectError: true,
}, {
name: "ClusterIP_policy:Cluster_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "ClusterIP_policy:Local_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectError: true,
}, {
name: "ClusterIP_policy:Local_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "NodePort_policy:none_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy("")),
expectHCNP: false,
}, {
name: "NodePort_policy:none_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "NodePort_policy:Cluster:none",
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectHCNP: false,
}, {
name: "NodePort_policy:Cluster:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "NodePort_policy:Local_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectHCNP: false,
}, {
name: "NodePort_policy:Local_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "LoadBalancer_policy:none_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy("")),
expectHCNP: false,
}, {
name: "LoadBalancer_policy:none_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "LoadBalancer_policy:Cluster_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectHCNP: false,
}, {
name: "LoadBalancer_policy:Cluster_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
}, {
name: "LoadBalancer_policy:Local_hcnp:none",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectHCNP: true,
}, {
name: "LoadBalancer_policy:Local_hcnp:specified",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectHCNP: true,
}, {
name: "LoadBalancer_policy:Local_hcnp:negative",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(-1)),
expectError: true,
}}
// Do this in the outer scope for performance.
storage, _, server := newStorage(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t)
defer storage.Store.DestroyFunc()
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
ctx := genericapirequest.NewDefaultContext()
createdObj, err := storage.Create(ctx, tc.svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if tc.expectError && err != nil {
return
}
if err != nil {
t.Fatalf("unexpected error creating service: %v", err)
}
defer storage.Delete(ctx, tc.svc.Name, rest.ValidateAllObjectFunc, &metav1.DeleteOptions{})
if tc.expectError && err == nil {
t.Fatalf("unexpected success creating service")
}
createdSvc := createdObj.(*api.Service)
if !tc.expectHCNP {
if createdSvc.Spec.HealthCheckNodePort != 0 {
t.Fatalf("expected no HealthCheckNodePort, got %d", createdSvc.Spec.HealthCheckNodePort)
}
return
}
if createdSvc.Spec.HealthCheckNodePort == 0 {
t.Fatalf("expected a HealthCheckNodePort")
}
if !portIsAllocated(t, storage.alloc.serviceNodePorts, createdSvc.Spec.HealthCheckNodePort) {
t.Errorf("expected HealthCheckNodePort to be allocated: %v", createdSvc.Spec.HealthCheckNodePort)
}
if tc.svc.Spec.HealthCheckNodePort != 0 {
if want, got := tc.svc.Spec.HealthCheckNodePort, createdSvc.Spec.HealthCheckNodePort; want != got {
t.Errorf("wrong HealthCheckNodePort value: wanted %d, got %d", want, got)
}
}
for i, p := range createdSvc.Spec.Ports {
if p.NodePort == createdSvc.Spec.HealthCheckNodePort {
t.Errorf("HealthCheckNodePort overlaps NodePort[%d]", i)
}
}
})
}
}
// Prove that create skips allocations for Headless services.
func TestCreateSkipsAllocationsForHeadless(t *testing.T) {
testCases := []struct {
@ -6993,7 +6774,327 @@ func TestFeatureType(t *testing.T) {
helpTestCreateUpdateDelete(t, testCases)
}
func TestFeatureExternalTrafficPolicy(t *testing.T) {
testCases := []cudTestCase{{
name: "ExternalName_policy:none_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "ExternalName_policy:Cluster_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectError: true,
},
}, {
name: "ExternalName_policy:Cluster_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "ExternalName_policy:Local_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectError: true,
},
}, {
name: "ExternalName_policy:Local_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeExternalName,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "ClusterIP_policy:none_hcnp:none_policy:Cluster_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy("")),
expectClusterIPs: true,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectError: true,
},
}, {
name: "ClusterIP_policy:none_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "ClusterIP_policy:Cluster_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectError: true,
},
}, {
name: "ClusterIP_policy:Cluster_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "ClusterIP_policy:Local_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectError: true,
},
}, {
name: "ClusterIP_policy:Local_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeClusterIP,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "NodePort_policy:none_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy("")),
expectError: true,
},
}, {
name: "NodePort_policy:none_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "NodePort_policy:Cluster_hcnp:none_policy:Local_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
}, {
name: "NodePort_policy:Cluster_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "NodePort_policy:Local_hcnp:none_policy:Cluster_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
}, {
name: "NodePort_policy:Local_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeNodePort,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "LoadBalancer_policy:none_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy("")),
expectError: true,
},
}, {
name: "LoadBalancer_policy:none_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(""),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "LoadBalancer_policy:Cluster_hcnp:none_policy:Local_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: true,
},
}, {
name: "LoadBalancer_policy:Cluster_hcnp:none_policy:Local_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: true,
},
}, {
name: "LoadBalancer_policy:Cluster_hcnp:specified",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster),
svctest.SetHealthCheckNodePort(30000)),
expectError: true,
},
}, {
name: "LoadBalancer_policy:Local_hcnp:none_policy:Cluster_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: true,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
}, {
name: "LoadBalancer_policy:Local_hcnp:specified_policy:Cluster_hcnp:none",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: true,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeCluster)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: false,
},
}, {
name: "LoadBalancer_policy:Local_hcnp:specified_policy:Cluster_hcnp:different",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30000)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: true,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(30001)),
expectError: true,
},
}, {
name: "LoadBalancer_policy:Local_hcnp:none_policy:Inalid",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
expectClusterIPs: true,
expectNodePorts: true,
expectHealthCheckNodePort: true,
},
update: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy("Invalid")),
expectError: true,
},
}, {
name: "LoadBalancer_policy:Local_hcnp:negative",
create: svcTestCase{
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetHealthCheckNodePort(-1)),
expectError: true,
},
}}
helpTestCreateUpdateDelete(t, testCases)
}
// FIXME: externalIPs, lbip,
// lbsourceranges, externalname, etp, hcnp, itp, PublishNotReadyAddresses,
// lbsourceranges, externalname, itp, PublishNotReadyAddresses,
// ipfamilypolicy and list,
// AllocateLoadBalancerNodePorts, LoadBalancerClass, status