From 9c3c3d8a3a9f3708102ad382850e5868c68a4380 Mon Sep 17 00:00:00 2001 From: Andrew Sy Kim Date: Tue, 4 Jan 2022 20:32:10 -0500 Subject: [PATCH] add integration test to validate that ExternalName Services can set internalTrafficPolicy, but the field is dropped on read Signed-off-by: Andrew Sy Kim --- test/integration/service/service_test.go | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/integration/service/service_test.go b/test/integration/service/service_test.go index fea7658f346..a0a68583f19 100644 --- a/test/integration/service/service_test.go +++ b/test/integration/service/service_test.go @@ -73,3 +73,51 @@ func Test_ExternalNameServiceStopsDefaultingInternalTrafficPolicy(t *testing.T) t.Errorf("service internalTrafficPolicy should be droppped but is set: %v", service.Spec.InternalTrafficPolicy) } } + +// Test_ExternalNameServiceDropsInternalTrafficPolicy tests that Services accepts the internalTrafficPolicy field on Create, +// but drops the field on read. This test exists due to historic reasons where the internalTrafficPolicy field was being defaulted +// in older versions. New versions stop defauting the field and drop on read, but for compatibility reasons we still accept the field. +func Test_ExternalNameServiceDropsInternalTrafficPolicy(t *testing.T) { + controlPlaneConfig := framework.NewIntegrationTestControlPlaneConfig() + _, server, closeFn := framework.RunAnAPIServer(controlPlaneConfig) + defer closeFn() + + config := restclient.Config{Host: server.URL} + client, err := clientset.NewForConfig(&config) + if err != nil { + t.Fatalf("Error creating clientset: %v", err) + } + + ns := framework.CreateTestingNamespace("test-external-name-drops-internal-traffic-policy", server, t) + defer framework.DeleteTestingNamespace(ns, server, t) + + internalTrafficPolicy := corev1.ServiceInternalTrafficPolicyCluster + service := &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-123", + }, + Spec: corev1.ServiceSpec{ + Type: corev1.ServiceTypeExternalName, + ExternalName: "foo.bar.com", + InternalTrafficPolicy: &internalTrafficPolicy, + }, + } + + service, err = client.CoreV1().Services(ns.Name).Create(context.TODO(), service, metav1.CreateOptions{}) + if err != nil { + t.Fatalf("Error creating test service: %v", err) + } + + if service.Spec.InternalTrafficPolicy != nil { + t.Errorf("service internalTrafficPolicy should be droppped but is set: %v", service.Spec.InternalTrafficPolicy) + } + + service, err = client.CoreV1().Services(ns.Name).Get(context.TODO(), service.Name, metav1.GetOptions{}) + if err != nil { + t.Fatalf("error getting service: %v", err) + } + + if service.Spec.InternalTrafficPolicy != nil { + t.Errorf("service internalTrafficPolicy should be droppped but is set: %v", service.Spec.InternalTrafficPolicy) + } +}