diff --git a/changelog/v1.19.0-beta3/add-missing-tests.yaml b/changelog/v1.19.0-beta3/add-missing-tests.yaml new file mode 100644 index 00000000000..486ca466f6f --- /dev/null +++ b/changelog/v1.19.0-beta3/add-missing-tests.yaml @@ -0,0 +1,4 @@ +changelog: +- type: NON_USER_FACING + description: > + Add missing e2e suite test for checking gateway param eternal traffic policy diff --git a/pkg/utils/kubeutils/service.go b/pkg/utils/kubeutils/service.go new file mode 100644 index 00000000000..7367ec09d98 --- /dev/null +++ b/pkg/utils/kubeutils/service.go @@ -0,0 +1,26 @@ +package kubeutils + +import ( + "context" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + corev1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes" +) + +// GetService gets the service from the provided name/namespace +func GetService( + ctx context.Context, + kubeClient *kubernetes.Clientset, + serviceName string, + serviceNamespace string, +) (*corev1.Service, error) { + + service, err := kubeClient.CoreV1().Services(serviceNamespace).Get(ctx, serviceName, metav1.GetOptions{}) + if err != nil { + return nil, err + } + + return service, nil +} diff --git a/test/kubernetes/e2e/features/deployer/suite.go b/test/kubernetes/e2e/features/deployer/suite.go index 05d1e0130cf..a601236bef4 100644 --- a/test/kubernetes/e2e/features/deployer/suite.go +++ b/test/kubernetes/e2e/features/deployer/suite.go @@ -190,6 +190,10 @@ func (s *testingSuite) TestProvisionResourcesUpdatedWithValidParameters() { s.patchGatewayParameters(gwParamsDefault.ObjectMeta, func(parameters *v1alpha1.GatewayParameters) { parameters.Spec.Kube.Service.ExternalTrafficPolicy = ptr.To(corev1.ServiceExternalTrafficPolicyLocal) }) + + // the GatewayParameters modification should cause the deployer to re-run and update the + // service to have ExternalTrafficPolicy = Local + s.testInstallation.Assertions.EventuallyExternalTrafficPolicy(s.ctx, *proxyService, gomega.Equal(corev1.ServiceExternalTrafficPolicyLocal)) } func (s *testingSuite) TestProvisionResourcesNotUpdatedWithInvalidParameters() { diff --git a/test/kubernetes/testutils/assertions/service.go b/test/kubernetes/testutils/assertions/service.go new file mode 100644 index 00000000000..d309872fe9a --- /dev/null +++ b/test/kubernetes/testutils/assertions/service.go @@ -0,0 +1,23 @@ +package assertions + +import ( + "context" + "time" + + . "github.com/onsi/gomega" + "github.com/onsi/gomega/types" + "github.com/solo-io/gloo/pkg/utils/kubeutils" + corev1 "k8s.io/api/core/v1" +) + +func (p *Provider) EventuallyExternalTrafficPolicy(ctx context.Context, service corev1.Service, externalTrafficPolicyMatcher types.GomegaMatcher) { + p.Gomega.Eventually(func(innerG Gomega) { + service, err := kubeutils.GetService(ctx, p.clusterContext.Clientset, service.Name, service.Namespace) + innerG.Expect(err).NotTo(HaveOccurred(), "can get service") + innerG.Expect(service.Spec.ExternalTrafficPolicy).To(externalTrafficPolicyMatcher, "externalTrafficPolicy to match") + }). + WithContext(ctx). + WithTimeout(time.Second * 30). + WithPolling(time.Millisecond * 200). + Should(Succeed()) +}