diff --git a/changelog/v1.18.0-beta25/migrate-e2e-tests-part1.yaml b/changelog/v1.18.0-beta25/migrate-e2e-tests-part1.yaml new file mode 100644 index 00000000000..58e06ffc269 --- /dev/null +++ b/changelog/v1.18.0-beta25/migrate-e2e-tests-part1.yaml @@ -0,0 +1,5 @@ +changelog: + - type: NON_USER_FACING + issueLink: + description: >- + Remove tests that do not run in CI. \ No newline at end of file diff --git a/test/kube2e/argocd/argocd_suite_test.go b/test/kube2e/argocd/argocd_suite_test.go deleted file mode 100644 index 5b3bab8c5fe..00000000000 --- a/test/kube2e/argocd/argocd_suite_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package argocd_test - -import ( - "fmt" - "os" - "testing" - - . "github.com/onsi/ginkgo/v2" - "github.com/solo-io/gloo/test/helpers" - skhelpers "github.com/solo-io/solo-kit/test/helpers" -) - -var version string - -func TestArgoCD(t *testing.T) { - helpers.RegisterGlooDebugLogPrintHandlerAndClearLogs() - skhelpers.RegisterCommonFailHandlers() - skhelpers.SetupLog() - RunSpecs(t, "ArgoCD Suite") -} - -var _ = BeforeSuite(func() { - version = os.Getenv("VERSION") - if version == "" { - version = "1.0.0-ci1" - } - - installArgoCD() - deployHelmRepo() -}) - -var _ = AfterSuite(func() { - uninstallArgoCD() -}) - -func installArgoCD() { - fmt.Println("Installing ArgoCD") - // helm repo add argo https://argoproj.github.io/argo-helm - runAndCleanCommand("helm", "repo", "add", "argo", "https://argoproj.github.io/argo-helm") - - // helm install argocd argo/argo-cd --wait - runAndCleanCommand("helm", "install", "argocd", "argo/argo-cd", "--wait") -} - -func uninstallArgoCD() { - fmt.Println("Uninstalling ArgoCD") - uninstallGloo() - - // helm uninstall argocd --wait - runAndCleanCommand("helm", "uninstall", "argocd", "--wait") -} - -func deployHelmRepo() { - fmt.Println("Deploying helm repo") - // ./deploy-helm-server.sh - runAndCleanCommand("./deploy-helm-server.sh") -} diff --git a/test/kube2e/argocd/argocd_test.go b/test/kube2e/argocd/argocd_test.go deleted file mode 100644 index 3785c50cc60..00000000000 --- a/test/kube2e/argocd/argocd_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package argocd_test - -import ( - "context" - "fmt" - "os" - "os/exec" - "path/filepath" - "time" - - "github.com/solo-io/gloo/pkg/utils/helmutils" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "github.com/solo-io/gloo/projects/gloo/pkg/defaults" - "github.com/solo-io/gloo/test/kube2e" - "github.com/solo-io/gloo/test/kube2e/helper" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" -) - -const namespace = defaults.GlooSystem - -var _ = Describe("Kube2e: ArgoCD", func() { - - var ( - testHelper *helper.SoloTestHelper - ) - - BeforeEach(func() { - - cwd, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - - testHelper, err = helper.NewSoloTestHelper(func(defaults helper.TestConfig) helper.TestConfig { - defaults.RootDir = filepath.Join(cwd, "../../..") - defaults.HelmChartName = helmutils.ChartName - defaults.InstallNamespace = namespace - defaults.Verbose = true - return defaults - }) - Expect(err).NotTo(HaveOccurred()) - }) - - It("Tests the Lifecycle", func() { - installGloo() - checkGlooHealthy(testHelper) - - // Sync once more to simulate an upgrade - syncGloo() - checkGlooHealthy(testHelper) - - uninstallGloo() - }) -}) - -func installGloo() { - uninstallGloo() - - repo := "http://helm-repo/" - - // argocd --core app create gloo \ - // --repo http://helm-repo/ --helm-chart gloo --revision $VERSION \ - // --dest-namespace gloo-system --dest-server https://kubernetes.default.svc \ - // --sync-option CreateNamespace=true --upsert --values-literal-file helm-override.yaml - command := []string{"--core", "app", "create", "gloo", - "--repo", repo, "--helm-chart", "gloo", "--revision", version, - "--dest-namespace", "gloo-system", "--dest-server", "https://kubernetes.default.svc", - "--sync-option", "CreateNamespace=true", "--upsert", "--values-literal-file", "helm-override.yaml"} - variant := os.Getenv("IMAGE_VARIANT") - if variant != "" { - command = append(command, "--helm-set", "global.image.variant="+variant) - } - - fmt.Printf("Running argo command : %s\n", command) - runAndCleanCommand("argocd", command...) - - syncGloo() -} - -func syncGloo() { - // argocd --core app sync gloo - command := []string{"--core", "app", "sync", "gloo"} - fmt.Printf("Running argo command : %s\n", command) - runAndCleanCommand("argocd", command...) -} - -func uninstallGloo() { - // argocd --core app delete gloo -y - cmd := exec.Command("argocd", "--core", "app", "delete", "gloo", "-y") - cmd.Output() -} - -func checkRolloutJobDeleted() { - // Wait `gateway.rolloutJob.ttlSecondsAfterFinished` until the resource rollout job has been deleted - fmt.Println("Waiting for the gloo-resource-rollout job to be cleaned up") - time.Sleep(60 * time.Second) - EventuallyWithOffset(1, func() string { - cmd := exec.Command("kubectl", "-n", "gloo-system", "get", "jobs", "-A") - b, err := cmd.Output() - Expect(err).NotTo(HaveOccurred()) - return string(b) - }, "60s", "10s").ShouldNot( - ContainSubstring("gloo-resource-rollout ")) -} - -func checkGlooHealthyAndSyncedInArgo() { - // Get the state of gloo - // argocd app get gloo --hard-refresh -o json | jq '.status.health.status' - fmt.Println("Checking if gloo is healthy") - EventuallyWithOffset(1, func() string { - command := "argocd app get gloo --hard-refresh -o json | jq '.status.health.status'" - cmd := exec.Command("bash", "-c", command) - b, err := cmd.Output() - Expect(err).NotTo(HaveOccurred()) - return string(b) - }).Should( - ContainSubstring("Healthy")) - // argocd app get gloo --hard-refresh -o json | jq '.status.sync.status' - fmt.Println("Checking if gloo is synced") - EventuallyWithOffset(1, func() string { - command := "argocd app get gloo --hard-refresh -o json | jq '.status.sync.status'" - cmd := exec.Command("bash", "-c", command) - b, err := cmd.Output() - Expect(err).NotTo(HaveOccurred()) - return string(b) - }).Should( - ContainSubstring("Synced")) -} - -func runAndCleanCommand(name string, arg ...string) []byte { - ctx, _ := context.WithTimeout(context.TODO(), 300*time.Second) - cmd := exec.CommandContext(ctx, name, arg...) - b, err := cmd.Output() - // for debugging in Cloud Build - if err != nil { - if v, ok := err.(*exec.ExitError); ok { - fmt.Println("ExitError: ", v.Error()) - } - } - Expect(err).NotTo(HaveOccurred()) - cmd.Process.Kill() - cmd.Process.Release() - return b -} - -func checkGlooHealthy(testHelper *helper.SoloTestHelper) { - // Wait until the resource rollout job has been deleted to ensure that argo does not go out of sync - checkRolloutJobDeleted() - - checkGlooHealthyAndSyncedInArgo() - deploymentNames := []string{"gloo", "discovery", "gateway-proxy"} - for _, deploymentName := range deploymentNames { - runAndCleanCommand("kubectl", "rollout", "status", "deployment", "-n", testHelper.InstallNamespace, deploymentName) - } - kube2e.GlooctlCheckEventuallyHealthy(2, testHelper.InstallNamespace, "90s") -} diff --git a/test/kube2e/argocd/deploy-helm-server.sh b/test/kube2e/argocd/deploy-helm-server.sh deleted file mode 100755 index 3fda7a921e1..00000000000 --- a/test/kube2e/argocd/deploy-helm-server.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -e - -kubectl apply -f helm-repo.yaml -kubectl rollout status deployment helm-repo -POD=$(kubectl get pods --no-headers -o custom-columns=":metadata.name" | grep "helm-repo") -for file in ../../../_test/*; do - echo $file - kubectl cp $file $POD:/usr/share/nginx/html/ -done -kubectl cp helm-override.yaml $POD:/usr/share/nginx/html/ - diff --git a/test/kube2e/argocd/helm-override.yaml b/test/kube2e/argocd/helm-override.yaml deleted file mode 100644 index 502a39f5714..00000000000 --- a/test/kube2e/argocd/helm-override.yaml +++ /dev/null @@ -1,35 +0,0 @@ -gateway: - translateEmptyGateways: true - validation: - allowWarnings: true - alwaysAcceptResources: false - failurePolicy: Fail - rolloutJob: - ttlSecondsAfterFinished: 60 -gatewayProxies: - gatewayProxy: - service: - type: ClusterIP # Since the test is running in kind - gatewaySettings: - customHttpGateway: - options: - healthCheck: - path: /envoy-hc - podTemplate: - terminationGracePeriodSeconds: 7 - gracefulShutdown: - enabled: true - sleepTimeSeconds: 5 - probes: true - customReadinessProbe: - httpGet: - scheme: HTTP - port: 8080 - path: /envoy-hc - failureThreshold: 2 - initialDelaySeconds: 5 - periodSeconds: 5 -global: - podSecurityStandards: - container: - enableRestrictedContainerDefaults: true \ No newline at end of file diff --git a/test/kube2e/argocd/helm-repo.yaml b/test/kube2e/argocd/helm-repo.yaml deleted file mode 100644 index 7742a8bedf7..00000000000 --- a/test/kube2e/argocd/helm-repo.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: helm-repo - labels: - app: helm-repo -spec: - replicas: 1 - selector: - matchLabels: - app: helm-repo - template: - metadata: - labels: - app: helm-repo - spec: - containers: - - name: helm-repo - image: nginx - ports: - - containerPort: 80 - readinessProbe: - httpGet: - scheme: HTTP - path: /index.html - port: 80 - initialDelaySeconds: 10 - periodSeconds: 5 ---- -apiVersion: v1 -kind: Service -metadata: - name: helm-repo -spec: - selector: - app: helm-repo - type: ClusterIP - ports: - - protocol: TCP - port: 80 - targetPort: 80 - diff --git a/test/kube2e/ingress/ingress_suite_test.go b/test/kube2e/ingress/ingress_suite_test.go deleted file mode 100644 index 344d4bcbe69..00000000000 --- a/test/kube2e/ingress/ingress_suite_test.go +++ /dev/null @@ -1,88 +0,0 @@ -package ingress_test - -import ( - "context" - "fmt" - "os" - "testing" - "time" - - "github.com/solo-io/gloo/test/ginkgo/parallel" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/solo-io/gloo/test/kube2e" - - "github.com/solo-io/gloo/test/helpers" - - "github.com/solo-io/gloo/test/kube2e/helper" - "github.com/solo-io/go-utils/testutils" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - skhelpers "github.com/solo-io/solo-kit/test/helpers" -) - -func TestIngress(t *testing.T) { - helpers.RegisterGlooDebugLogPrintHandlerAndClearLogs() - skhelpers.RegisterCommonFailHandlers() - skhelpers.SetupLog() - RunSpecs(t, "Ingress Suite") -} - -var ( - testHelper *helper.SoloTestHelper - ctx context.Context - cancel context.CancelFunc -) - -var _ = BeforeSuite(func() { - ctx, cancel = context.WithCancel(context.Background()) - var err error - randomNumber := time.Now().Unix() % 10000 - testHelper, err = kube2e.GetTestHelper(ctx, "ingress-test-"+fmt.Sprintf("%d-%d", randomNumber, parallel.GetParallelProcessCount())) - Expect(err).NotTo(HaveOccurred()) - skhelpers.RegisterPreFailHandler(helpers.StandardGlooDumpOnFail(GinkgoWriter, metav1.ObjectMeta{Namespace: testHelper.InstallNamespace})) - testHelper.Verbose = true - - // Define helm overrides - valuesOverrideFile, cleanupFunc := getHelmValuesOverrideFile() - defer cleanupFunc() - - // Install Gloo - err = testHelper.InstallGloo(ctx, helper.INGRESS, 5*time.Minute, helper.ExtraArgs("--values", valuesOverrideFile)) - Expect(err).NotTo(HaveOccurred()) -}) - -func getHelmValuesOverrideFile() (filename string, cleanup func()) { - values, err := os.CreateTemp("", "values-*.yaml") - Expect(err).NotTo(HaveOccurred()) - - // disabling panic threshold - // https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/panic_threshold.html - _, err = values.Write([]byte(` -gatewayProxies: - gatewayProxy: - healthyPanicThreshold: 0 -`)) - Expect(err).NotTo(HaveOccurred()) - - err = values.Close() - Expect(err).NotTo(HaveOccurred()) - - return values.Name(), func() { _ = os.Remove(values.Name()) } -} - -var _ = AfterSuite(func() { - if os.Getenv("TEAR_DOWN") == "true" { - err := testHelper.UninstallGlooAll() - Expect(err).NotTo(HaveOccurred()) - - // TODO go-utils should expose `glooctl uninstall --delete-namespace` - testutils.Kubectl("delete", "namespace", testHelper.InstallNamespace) - - Eventually(func() error { - return testutils.Kubectl("get", "namespace", testHelper.InstallNamespace) - }, "60s", "1s").Should(HaveOccurred()) - cancel() - } -}) diff --git a/test/kube2e/ingress/ingress_test.go b/test/kube2e/ingress/ingress_test.go deleted file mode 100644 index e97032f1c72..00000000000 --- a/test/kube2e/ingress/ingress_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package ingress_test - -import ( - "context" - "time" - - kubetestclients "github.com/solo-io/gloo/test/kubernetes/testutils/clients" - - "github.com/solo-io/gloo/test/kube2e" - - "github.com/solo-io/gloo/test/kube2e/helper" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - networkingv1 "k8s.io/api/networking/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" -) - -var _ = Describe("Kube2e: Ingress", func() { - - var ( - ctx context.Context - cancel context.CancelFunc - ) - - BeforeEach(func() { - ctx, cancel = context.WithCancel(context.Background()) - }) - - AfterEach(func() { cancel() }) - - It("works", func() { - kube := kubetestclients.MustClientset() - kubeIngressClient := kube.NetworkingV1().Ingresses(testHelper.InstallNamespace) - - backend := &networkingv1.IngressBackend{ - Service: &networkingv1.IngressServiceBackend{ - Name: helper.TestServerName, - Port: networkingv1.ServiceBackendPort{ - Number: helper.TestServerPort, - }, - }, - } - pathType := networkingv1.PathTypeImplementationSpecific - kubeIng, err := kubeIngressClient.Create(ctx, &networkingv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "simple-ingress-route", - Namespace: testHelper.InstallNamespace, - Annotations: map[string]string{"kubernetes.io/ingress.class": "gloo"}, - }, - Spec: networkingv1.IngressSpec{ - DefaultBackend: backend, - Rules: []networkingv1.IngressRule{ - { - IngressRuleValue: networkingv1.IngressRuleValue{ - HTTP: &networkingv1.HTTPIngressRuleValue{ - Paths: []networkingv1.HTTPIngressPath{ - { - PathType: &pathType, - Backend: *backend, - }, - }, - }, - }, - }, - }, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - Expect(kubeIng).NotTo(BeNil()) - - ingressProxy := "ingress-proxy" - ingressPort := 80 - testHelper.CurlEventuallyShouldRespond(helper.CurlOpts{ - Protocol: "http", - Path: "/", - Method: "GET", - Host: ingressProxy, - Service: ingressProxy, - Port: ingressPort, - ConnectionTimeout: 1, - }, kube2e.TestServerHttpResponse(), 1, time.Minute*2, 1*time.Second) - }) -}) diff --git a/test/kube2e/ingress/resource_client_test.go b/test/kube2e/ingress/resource_client_test.go deleted file mode 100644 index 04daf5a55bc..00000000000 --- a/test/kube2e/ingress/resource_client_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package ingress_test - -import ( - "context" - - kubetestclients "github.com/solo-io/gloo/test/kubernetes/testutils/clients" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - . "github.com/solo-io/gloo/projects/ingress/pkg/api/ingress" - v1 "github.com/solo-io/gloo/projects/ingress/pkg/api/v1" - "github.com/solo-io/solo-kit/pkg/api/v1/clients" - "github.com/solo-io/solo-kit/test/helpers" - "github.com/solo-io/solo-kit/test/setup" - corev1 "k8s.io/api/core/v1" - networkingv1 "k8s.io/api/networking/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" -) - -var _ = Describe("ResourceClient", func() { - - Context("Ingress", func() { - // Copied from: https://github.com/solo-io/gloo/blob/52e15bb135c6ae51fae21f0b1187943b77981b7d/projects/ingress/pkg/api/ingress/resource_client_test.go#L25 - - var ( - namespace string - kube *kubernetes.Clientset - ctx context.Context - cancel context.CancelFunc - ) - - BeforeEach(func() { - namespace = helpers.RandString(8) - ctx, cancel = context.WithCancel(context.Background()) - var err error - kube = kubetestclients.MustClientset() - _, err = kube.CoreV1().Namespaces().Create(ctx, &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: namespace, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - }) - AfterEach(func() { - setup.TeardownKube(namespace) - cancel() - }) - - It("can CRUD on v1 ingresses", func() { - baseClient := NewResourceClient(kube, &v1.Ingress{}) - ingressClient := v1.NewIngressClientWithBase(baseClient) - kubeIngressClient := kube.NetworkingV1().Ingresses(namespace) - backend := &networkingv1.IngressBackend{ - Service: &networkingv1.IngressServiceBackend{ - Name: "foo", - Port: networkingv1.ServiceBackendPort{ - Number: 8080, - }, - }, - } - pathType := networkingv1.PathTypeImplementationSpecific - kubeIng, err := kubeIngressClient.Create(ctx, &networkingv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rusty", - Namespace: namespace, - }, - Spec: networkingv1.IngressSpec{ - DefaultBackend: backend, - TLS: []networkingv1.IngressTLS{ - { - Hosts: []string{"some.host"}, - SecretName: "doesntexistanyway", - }, - }, - Rules: []networkingv1.IngressRule{ - { - Host: "some.host", - IngressRuleValue: networkingv1.IngressRuleValue{ - HTTP: &networkingv1.HTTPIngressRuleValue{ - Paths: []networkingv1.HTTPIngressPath{ - { - PathType: &pathType, - Backend: *backend, - }, - }, - }, - }, - }, - }, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - ingressResource, err := ingressClient.Read(kubeIng.Namespace, kubeIng.Name, clients.ReadOpts{}) - Expect(err).NotTo(HaveOccurred()) - convertedIng, err := ToKube(ingressResource) - Expect(err).NotTo(HaveOccurred()) - Expect(convertedIng.Spec).To(Equal(kubeIng.Spec)) - }) - - }) - -}) diff --git a/test/kube2e/ingress/status_syncer_test.go b/test/kube2e/ingress/status_syncer_test.go deleted file mode 100644 index 5ae9df7f30a..00000000000 --- a/test/kube2e/ingress/status_syncer_test.go +++ /dev/null @@ -1,489 +0,0 @@ -package ingress_test - -import ( - "context" - "time" - - kubetestclients "github.com/solo-io/gloo/test/kubernetes/testutils/clients" - - "github.com/solo-io/gloo/projects/ingress/pkg/translator" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "github.com/solo-io/solo-kit/pkg/api/v1/clients" - "github.com/solo-io/solo-kit/test/helpers" - "github.com/solo-io/solo-kit/test/setup" - corev1 "k8s.io/api/core/v1" - networkingv1 "k8s.io/api/networking/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - - "github.com/solo-io/gloo/projects/ingress/pkg/api/ingress" - "github.com/solo-io/gloo/projects/ingress/pkg/api/service" - v1 "github.com/solo-io/gloo/projects/ingress/pkg/api/v1" - "github.com/solo-io/gloo/projects/ingress/pkg/status" -) - -var _ = Describe("StatusSyncer", func() { - - Context("ClusterIngress", func() { - // Copied from: https://github.com/solo-io/gloo/blob/52e15bb135c6ae51fae21f0b1187943b77981b7d/projects/clusteringress/pkg/status/status_syncer_test.go#L28 - - var ( - namespace string - kube *kubernetes.Clientset - ctx context.Context - cancel context.CancelFunc - ) - - BeforeEach(func() { - namespace = helpers.RandString(8) - ctx, cancel = context.WithCancel(context.Background()) - var err error - kube = kubetestclients.MustClientset() - _, err = kube.CoreV1().Namespaces().Create(ctx, &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: namespace, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - }) - AfterEach(func() { - setup.TeardownKube(namespace) - cancel() - }) - - It("updates kube ingresses with endpoints from the service", func() { - baseIngressClient := ingress.NewResourceClient(kube, &v1.Ingress{}) - ingressClient := v1.NewIngressClientWithBase(baseIngressClient) - baseKubeServiceClient := service.NewResourceClient(kube, &v1.KubeService{}) - kubeServiceClient := v1.NewKubeServiceClientWithBase(baseKubeServiceClient) - kubeServiceClient = service.NewClientWithSelector(kubeServiceClient, map[string]string{ - "gloo": "ingress-proxy", - }) - statusEmitter := v1.NewStatusEmitter(kubeServiceClient, ingressClient) - statusSync := status.NewSyncer(ingressClient) - statusEventLoop := v1.NewStatusEventLoop(statusEmitter, statusSync) - statusEventLoopErrs, err := statusEventLoop.Run([]string{namespace}, clients.WatchOpts{Ctx: context.TODO()}) - Expect(err).NotTo(HaveOccurred()) - go func() { - defer GinkgoRecover() - err := <-statusEventLoopErrs - Expect(err).NotTo(HaveOccurred()) - }() - - kubeIngressClient := kube.NetworkingV1().Ingresses(namespace) - backend := &networkingv1.IngressBackend{ - Service: &networkingv1.IngressServiceBackend{ - Name: "foo", - Port: networkingv1.ServiceBackendPort{ - Number: 8080, - }, - }, - } - pathType := networkingv1.PathTypeImplementationSpecific - kubeIng, err := kubeIngressClient.Create(ctx, &networkingv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rusty", - Namespace: namespace, - Annotations: map[string]string{ - "kubernetes.io/ingress.class": "gloo", - }, - }, - Spec: networkingv1.IngressSpec{ - DefaultBackend: backend, - TLS: []networkingv1.IngressTLS{ - { - Hosts: []string{"some.host"}, - SecretName: "doesntexistanyway", - }, - }, - Rules: []networkingv1.IngressRule{ - { - Host: "some.host", - IngressRuleValue: networkingv1.IngressRuleValue{ - HTTP: &networkingv1.HTTPIngressRuleValue{ - Paths: []networkingv1.HTTPIngressPath{ - { - PathType: &pathType, - Backend: *backend, - }, - }, - }, - }, - }, - }, - }, - }, metav1.CreateOptions{}) - - kubeSvcClient := kube.CoreV1().Services(namespace) - svc, err := kubeSvcClient.Create(ctx, &corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dusty", - Namespace: namespace, - Labels: map[string]string{ - "gloo": "ingress-proxy", - }, - }, - Spec: corev1.ServiceSpec{ - Selector: map[string]string{ - "gloo": "ingress-proxy", - }, - Ports: []corev1.ServicePort{ - { - Name: "foo", - Port: 1234, - }, - }, - Type: corev1.ServiceTypeLoadBalancer, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - - _, err = kube.CoreV1().Pods(namespace).Create(ctx, &corev1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "musty", - Namespace: namespace, - Labels: map[string]string{ - "gloo": "ingress-proxy", - }, - }, - Spec: corev1.PodSpec{ - Containers: []corev1.Container{ - { - Name: "nginx", - Image: "nginx:latest", - }, - }, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - - time.Sleep(time.Second) // give the kube service time to update lb endpoints - svc, err = kubeSvcClient.Get(ctx, svc.Name, metav1.GetOptions{}) - Expect(err).NotTo(HaveOccurred()) - - // note (ilackarms): unless running on a cloud provider that supports - // kube lb ingress, the status ips for the service and ingress will be empty - Eventually(func(g Gomega) { - ing, err := kubeIngressClient.Get(ctx, kubeIng.Name, metav1.GetOptions{}) - g.Expect(err).NotTo(HaveOccurred()) - // these can't be compared as they are differing nil types, so we check that both are nil - g.Expect(ing.Status.LoadBalancer.Ingress).To(BeNil()) - g.Expect(svc.Status.LoadBalancer.Ingress).To(BeNil()) - }, time.Second*10).Should(Succeed()) - }) - - }) - - Context("Ingress", func() { - // Copied from: https://github.com/solo-io/gloo/blob/52e15bb135c6ae51fae21f0b1187943b77981b7d/projects/ingress/pkg/status/status_syncer_test.go#L29 - - var ( - namespace string - ctx context.Context - cancel context.CancelFunc - - err error - kubeClientset *kubernetes.Clientset - ) - - BeforeEach(func() { - ctx, cancel = context.WithCancel(context.Background()) - kubeClientset = kubetestclients.MustClientset() - - // Create test namespace - namespace = helpers.RandString(8) - _, err = kubeClientset.CoreV1().Namespaces().Create(ctx, &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: namespace, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - }) - - AfterEach(func() { - _ = setup.TeardownKube(namespace) - cancel() - }) - - It("updates kube ingresses with endpoints from the service", func() { - baseIngressClient := ingress.NewResourceClient(kubeClientset, &v1.Ingress{}) - ingressClient := v1.NewIngressClientWithBase(baseIngressClient) - baseKubeServiceClient := service.NewResourceClient(kubeClientset, &v1.KubeService{}) - kubeServiceClient := v1.NewKubeServiceClientWithBase(baseKubeServiceClient) - kubeServiceClient = service.NewClientWithSelector(kubeServiceClient, map[string]string{ - "gloo": "ingress-proxy", - }) - statusEmitter := v1.NewStatusEmitter(kubeServiceClient, ingressClient) - statusSync := status.NewSyncer(ingressClient) - statusEventLoop := v1.NewStatusEventLoop(statusEmitter, statusSync) - statusEventLoopErrs, err := statusEventLoop.Run([]string{namespace}, clients.WatchOpts{Ctx: context.TODO()}) - Expect(err).NotTo(HaveOccurred()) - go func() { - defer GinkgoRecover() - err := <-statusEventLoopErrs - Expect(err).NotTo(HaveOccurred()) - }() - - kubeIngressClient := kubeClientset.NetworkingV1().Ingresses(namespace) - backend := &networkingv1.IngressBackend{ - Service: &networkingv1.IngressServiceBackend{ - Name: "foo", - Port: networkingv1.ServiceBackendPort{ - Number: 8080, - }, - }, - } - pathType := networkingv1.PathTypeImplementationSpecific - kubeIng, err := kubeIngressClient.Create(ctx, &networkingv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rusty", - Namespace: namespace, - Annotations: map[string]string{ - translator.IngressClassKey: "gloo", - }, - }, - Spec: networkingv1.IngressSpec{ - DefaultBackend: backend, - TLS: []networkingv1.IngressTLS{ - { - Hosts: []string{"some.host"}, - SecretName: "doesntexistanyway", - }, - }, - Rules: []networkingv1.IngressRule{ - { - Host: "some.host", - IngressRuleValue: networkingv1.IngressRuleValue{ - HTTP: &networkingv1.HTTPIngressRuleValue{ - Paths: []networkingv1.HTTPIngressPath{ - { - PathType: &pathType, - Backend: *backend, - }, - }, - }, - }, - }, - }, - }, - }, metav1.CreateOptions{}) - - kubeSvcClient := kubeClientset.CoreV1().Services(namespace) - svc_def := corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dusty", - Namespace: namespace, - Labels: map[string]string{ - "gloo": "ingress-proxy", - }, - }, - Spec: corev1.ServiceSpec{ - Selector: map[string]string{ - "gloo": "ingress-proxy", - }, - Ports: []corev1.ServicePort{ - { - Name: "foo", - Port: 1234, - }, - }, - Type: corev1.ServiceTypeLoadBalancer, - }, - Status: corev1.ServiceStatus{ - LoadBalancer: corev1.LoadBalancerStatus{ - Ingress: []corev1.LoadBalancerIngress{ - { - Hostname: "hostname", - }, - }, - }, - }, - } - svc, err := kubeSvcClient.Create(ctx, &svc_def, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - - _, err = kubeClientset.CoreV1().Pods(namespace).Create(ctx, &corev1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "musty", - Namespace: namespace, - Labels: map[string]string{ - "gloo": "ingress-proxy", - }, - }, - Spec: corev1.PodSpec{ - Containers: []corev1.Container{ - { - Name: "nginx", - Image: "nginx:latest", - }, - }, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - - Eventually(func() error { - svc, err = kubeSvcClient.Get(ctx, svc.Name, metav1.GetOptions{}) - return err - }, time.Second*10).ShouldNot(HaveOccurred()) - - if len(svc.Status.LoadBalancer.Ingress) == 0 { - // kubernetes does set ingress lb, set service status explicitly instead - svc, err = kubeSvcClient.UpdateStatus(ctx, &svc_def, metav1.UpdateOptions{}) - Expect(err).NotTo(HaveOccurred()) - } - - Eventually(func(g Gomega) { - ing, err := kubeIngressClient.Get(ctx, kubeIng.Name, metav1.GetOptions{}) - g.Expect(err).NotTo(HaveOccurred()) - // As of k8s 1.26+, Ingresses have a status of IngressLoadBalancerStatus, differing from the service's type. - ingIngress := ing.Status.LoadBalancer.Ingress - svcIngress := svc.Status.LoadBalancer.Ingress - g.Expect(ingIngress).ToNot(BeEmpty()) - g.Expect(ingIngress).To(HaveLen(len(svcIngress))) - g.Expect(ingIngress[0].Hostname).To(Equal(svcIngress[0].Hostname)) - g.Expect(ingIngress[0].IP).To(Equal(svcIngress[0].IP)) - // `BeEquivalentTo` did not work here even when the values matched, so checking "equality" by ensuring both are nil. - Expect(ingIngress[0].Ports).To(BeNil()) - Expect(svcIngress[0].Ports).To(BeNil()) - }, time.Second*10).Should(Succeed()) - }) - - It("errors when kube service ExternalName = localhost", func() { - baseIngressClient := ingress.NewResourceClient(kubeClientset, &v1.Ingress{}) - ingressClient := v1.NewIngressClientWithBase(baseIngressClient) - baseKubeServiceClient := service.NewResourceClient(kubeClientset, &v1.KubeService{}) - kubeServiceClient := v1.NewKubeServiceClientWithBase(baseKubeServiceClient) - kubeServiceClient = service.NewClientWithSelector(kubeServiceClient, map[string]string{ - "gloo": "ingress-proxy", - }) - statusEmitter := v1.NewStatusEmitter(kubeServiceClient, ingressClient) - statusSync := status.NewSyncer(ingressClient) - statusEventLoop := v1.NewStatusEventLoop(statusEmitter, statusSync) - statusEventLoopErrs, err := statusEventLoop.Run([]string{namespace}, clients.WatchOpts{Ctx: context.TODO()}) - Expect(err).NotTo(HaveOccurred()) - go func() { - defer GinkgoRecover() - err := <-statusEventLoopErrs - // Expect an error to have occurred during the statusEventLoop - Expect(err).Should(MatchError(ContainSubstring("Invalid attempt to use localhost name"))) - }() - - backend := &networkingv1.IngressBackend{ - Service: &networkingv1.IngressServiceBackend{ - Name: "foo", - Port: networkingv1.ServiceBackendPort{ - Number: 8080, - }, - }, - } - - kubeIngressClient := kubeClientset.NetworkingV1().Ingresses(namespace) - pathType := networkingv1.PathTypeImplementationSpecific - kubeIngress, err := kubeIngressClient.Create(ctx, &networkingv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rusty", - Namespace: namespace, - Annotations: map[string]string{ - translator.IngressClassKey: "gloo", - }, - }, - Spec: networkingv1.IngressSpec{ - DefaultBackend: backend, - TLS: []networkingv1.IngressTLS{ - { - Hosts: []string{"some.host"}, - SecretName: "doesntexistanyway", - }, - }, - Rules: []networkingv1.IngressRule{ - { - Host: "some.host", - IngressRuleValue: networkingv1.IngressRuleValue{ - HTTP: &networkingv1.HTTPIngressRuleValue{ - Paths: []networkingv1.HTTPIngressPath{ - { - PathType: &pathType, - Backend: *backend, - }, - }, - }, - }, - }, - }, - }, - }, metav1.CreateOptions{}) - - kubeSvcClient := kubeClientset.CoreV1().Services(namespace) - kubeSvcDefinition := corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dusty", - Namespace: namespace, - Labels: map[string]string{ - "gloo": "ingress-proxy", - }, - }, - Spec: corev1.ServiceSpec{ - Selector: map[string]string{ - "gloo": "ingress-proxy", - }, - Type: corev1.ServiceTypeExternalName, - ExternalName: "localhost", // this should not be allowed - }, - Status: corev1.ServiceStatus{ - LoadBalancer: corev1.LoadBalancerStatus{ - Ingress: []corev1.LoadBalancerIngress{ - { - Hostname: "hostname", - }, - }, - }, - }, - } - kubeSvc, err := kubeSvcClient.Create(ctx, &kubeSvcDefinition, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - - _, err = kubeClientset.CoreV1().Pods(namespace).Create(ctx, &corev1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "musty", - Namespace: namespace, - Labels: map[string]string{ - "gloo": "ingress-proxy", - }, - }, - Spec: corev1.PodSpec{ - Containers: []corev1.Container{ - { - Name: "nginx", - Image: "nginx:latest", - }, - }, - }, - }, metav1.CreateOptions{}) - Expect(err).NotTo(HaveOccurred()) - - Eventually(func() error { - kubeSvc, err = kubeSvcClient.Get(ctx, kubeSvc.Name, metav1.GetOptions{}) - return err - }, time.Second*10).ShouldNot(HaveOccurred()) - - if len(kubeSvc.Status.LoadBalancer.Ingress) == 0 { - // kubernetes does set ingress lb, set service status explicitly instead - kubeSvc, err = kubeSvcClient.UpdateStatus(ctx, &kubeSvcDefinition, metav1.UpdateOptions{}) - Expect(err).NotTo(HaveOccurred()) - } - - // The only service that we have configured should be rejected - Eventually(func() ([]networkingv1.IngressLoadBalancerIngress, error) { - ing, err := kubeIngressClient.Get(ctx, kubeIngress.Name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - return ing.Status.LoadBalancer.Ingress, nil - }, time.Second*10).Should(BeEmpty()) - }) - }) - -}) diff --git a/test/kube2e/knative/artifacts/knative-hello-service-tls.yaml b/test/kube2e/knative/artifacts/knative-hello-service-tls.yaml deleted file mode 100644 index 9d63595e925..00000000000 --- a/test/kube2e/knative/artifacts/knative-hello-service-tls.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: serving.knative.dev/v1alpha1 -kind: Service -metadata: - name: helloworld-go - namespace: default - annotations: - gloo.networking.knative.dev/ssl.sni_domains: helloworld-go.default.example.com - gloo.networking.knative.dev/ssl.secret_name: my-knative-tls-secret -spec: - template: - spec: - containers: - - image: gcr.io/knative-samples/helloworld-go - env: - - name: TARGET - value: Go Sample v1 - diff --git a/test/kube2e/knative/artifacts/knative-hello-service.yaml b/test/kube2e/knative/artifacts/knative-hello-service.yaml deleted file mode 100644 index 7359f50f114..00000000000 --- a/test/kube2e/knative/artifacts/knative-hello-service.yaml +++ /dev/null @@ -1,16 +0,0 @@ - -apiVersion: serving.knative.dev/v1alpha1 -kind: Service -metadata: - name: helloworld-go - namespace: default -spec: - runLatest: - configuration: - revisionTemplate: - spec: - container: - image: docker.io/ilackarms/helloworld-go - env: - - name: TARGET - value: "Go Sample v1" diff --git a/test/kube2e/knative/knative_manual_tls_test.go b/test/kube2e/knative/knative_manual_tls_test.go deleted file mode 100644 index 7fb5c4ac6bc..00000000000 --- a/test/kube2e/knative/knative_manual_tls_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package knative_test - -import ( - "context" - "path/filepath" - "strings" - "time" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - corev1 "k8s.io/api/core/v1" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - - "github.com/solo-io/gloo/jobs/pkg/certgen" - "github.com/solo-io/gloo/jobs/pkg/kube" - "github.com/solo-io/gloo/jobs/pkg/run" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/helpers" - "github.com/solo-io/gloo/projects/gloo/pkg/defaults" - "github.com/solo-io/gloo/test/kube2e/helper" - "github.com/solo-io/go-utils/log" - "github.com/solo-io/go-utils/testutils/exec" -) - -var _ = Describe("Kube2e: Knative-Ingress with manual TLS enabled", func() { - - AfterEach(func() { - if err := deleteTLSSecret(); err != nil { - log.Warnf("teardown failed, knative tls secret may still be present %v", err) - } - if err := deleteKnativeTestService(knativeTLSTestServiceFile()); err != nil { - log.Warnf("teardown failed, knative test service may still be present %v", err) - } - }) - - It("works", func() { - addTLSSecret() - deployKnativeTestService(knativeTLSTestServiceFile()) - - clusterIP := getClusterIP() - ingressPort := 443 - testHelper.CurlEventuallyShouldRespond(helper.CurlOpts{ - Protocol: "https", - Path: "/", - Method: "GET", - Host: "helloworld-go.default.example.com", - Service: clusterIP, - Port: ingressPort, - ConnectionTimeout: 1, - Verbose: true, - SelfSigned: true, - Sni: "helloworld-go.default.example.com", - }, "Hello Go Sample corev1!", 1, time.Minute*2, 1*time.Second) - }) - - It("works when the secret is added after the service which points to it", func() { - - deployKnativeTestService(knativeTLSTestServiceFile()) - // Allow the service a few seconds to be created - time.Sleep(3 * time.Second) - addTLSSecret() - - clusterIP := getClusterIP() - ingressPort := 443 - testHelper.CurlEventuallyShouldRespond(helper.CurlOpts{ - Protocol: "https", - Path: "/", - Method: "GET", - Host: "helloworld-go.default.example.com", - Service: clusterIP, - Port: ingressPort, - ConnectionTimeout: 1, - Verbose: true, - SelfSigned: true, - Sni: "helloworld-go.default.example.com", - }, "Hello Go Sample corev1!", 1, time.Minute*2, 1*time.Second) - }) - -}) - -func addTLSSecret() { - opts := run.Options{ - SecretName: "my-knative-tls-secret", - SecretNamespace: defaults.DefaultValue, - SvcName: "knative-external-proxy", - SvcNamespace: testHelper.InstallNamespace, - ServerKeySecretFileName: corev1.TLSPrivateKeyKey, - ServerCertSecretFileName: corev1.TLSCertKey, - ServerCertAuthorityFileName: corev1.ServiceAccountRootCAKey, - } - certs, err := certgen.GenCerts(opts.SvcName, opts.SvcNamespace) - Expect(err).NotTo(HaveOccurred(), "it should generate the cert") - kubeClient := helpers.MustKubeClient() - - caCert := append(certs.ServerCertificate, certs.CaCertificate...) - secretConfig := kube.TlsSecret{ - SecretName: opts.SecretName, - SecretNamespace: opts.SecretNamespace, - PrivateKeyFileName: opts.ServerKeySecretFileName, - CertFileName: opts.ServerCertSecretFileName, - CaBundleFileName: opts.ServerCertAuthorityFileName, - Cert: caCert, - PrivateKey: certs.ServerCertKey, - - // We intentionally do not provide a CaBundle here. Due to the way Gloo works, if we provide a CaBundle, - // we assume that we need to verify the identity of the client, and expect a client certificate to be - // passed in the request. By not including the CaBundle we are testing TLS and ensuring that only - // the client verifies the identity of the server. - // CaBundle: certs.CaCertificate, - } - - _, err = kube.CreateTlsSecret(context.Background(), kubeClient, secretConfig) - Expect(err).NotTo(HaveOccurred(), "it should create the tls secret") -} - -func deleteTLSSecret() error { - kubectlArgs := strings.Split("kubectl delete secret my-knative-tls-secret", " ") - err := exec.RunCommandInput("", testHelper.RootDir, true, kubectlArgs...) - if err != nil { - return err - } - return nil -} - -func getClusterIP() string { - kubectlArgs := strings.Split("kubectl get services -n "+testHelper.InstallNamespace+" knative-external-proxy -o jsonpath='{.spec.clusterIP}'", " ") - clusterIP, err := exec.RunCommandInputOutput("", testHelper.RootDir, true, kubectlArgs...) - Expect(err).NotTo(HaveOccurred()) - return strings.ReplaceAll(clusterIP, "'", "") -} - -func knativeTLSTestServiceFile() string { - return filepath.Join(testHelper.RootDir, "test", "kube2e", "knative", "artifacts", "knative-hello-service-tls.yaml") -} diff --git a/test/kube2e/knative/knative_suite_test.go b/test/kube2e/knative/knative_suite_test.go deleted file mode 100644 index 35b3fa213a4..00000000000 --- a/test/kube2e/knative/knative_suite_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package knative_test - -import ( - "context" - "fmt" - "os" - "path/filepath" - "testing" - "time" - - "github.com/solo-io/gloo/test/ginkgo/parallel" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/solo-io/gloo/test/helpers" - "github.com/solo-io/gloo/test/kube2e/helper" - "github.com/solo-io/go-utils/log" - "github.com/solo-io/go-utils/testutils" - "github.com/solo-io/go-utils/testutils/exec" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - skhelpers "github.com/solo-io/solo-kit/test/helpers" -) - -func TestKnative(t *testing.T) { - // Knative support has been deprecated in Gloo Edge 1.10 (https://github.com/solo-io/gloo/issues/5707) - // and will be removed in Gloo Edge 1.11. - // These tests are not run during CI. - if true { - log.Warnf("Knative is deprecated and this test is disabled.") - return - } - - helpers.RegisterGlooDebugLogPrintHandlerAndClearLogs() - skhelpers.RegisterCommonFailHandlers() - skhelpers.SetupLog() - RunSpecs(t, "Knative Suite") -} - -var ( - testHelper *helper.SoloTestHelper - ctx context.Context - cancel context.CancelFunc -) - -var _ = BeforeSuite(func() { - cwd, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - ctx, cancel = context.WithCancel(context.Background()) - - randomNumber := time.Now().Unix() % 10000 - testHelper, err = helper.NewSoloTestHelper(func(defaults helper.TestConfig) helper.TestConfig { - defaults.RootDir = filepath.Join(cwd, "../../..") - defaults.HelmChartName = "gloo" - defaults.InstallNamespace = "knative-test-" + fmt.Sprintf("%d-%d", randomNumber, parallel.GetParallelProcessCount()) - return defaults - }) - Expect(err).NotTo(HaveOccurred()) - - skhelpers.RegisterPreFailHandler(helpers.StandardGlooDumpOnFail(GinkgoWriter, - metav1.ObjectMeta{Namespace: "knative-serving"}, - metav1.ObjectMeta{Namespace: testHelper.InstallNamespace})) - testHelper.Verbose = true - - // Define helm overrides - valuesOverrideFile, cleanupFunc := getHelmValuesOverrideFile() - defer cleanupFunc() - - // Install Gloo - err = testHelper.InstallGloo(ctx, helper.KNATIVE, 5*time.Minute, helper.ExtraArgs("--values", valuesOverrideFile)) - Expect(err).NotTo(HaveOccurred()) -}) - -var _ = AfterSuite(func() { - if os.Getenv("TEAR_DOWN") == "true" { - err := testHelper.UninstallGlooAll() - Expect(err).NotTo(HaveOccurred()) - - // TODO go-utils should expose `glooctl uninstall --delete-namespace` - testutils.Kubectl("delete", "namespace", testHelper.InstallNamespace) - - Eventually(func() error { - return testutils.Kubectl("get", "namespace", testHelper.InstallNamespace) - }, "60s", "1s").Should(HaveOccurred()) - cancel() - } -}) - -func getHelmValuesOverrideFile() (filename string, cleanup func()) { - values, err := os.CreateTemp("", "values-*.yaml") - Expect(err).NotTo(HaveOccurred()) - - // disabling panic threshold - // https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/panic_threshold.html - _, err = values.Write([]byte(` -gatewayProxies: - gatewayProxy: - healthyPanicThreshold: 0 -`)) - Expect(err).NotTo(HaveOccurred()) - - err = values.Close() - Expect(err).NotTo(HaveOccurred()) - - return values.Name(), func() { _ = os.Remove(values.Name()) } -} - -func deployKnativeTestService(filePath string) { - b, err := os.ReadFile(filePath) - ExpectWithOffset(1, err).NotTo(HaveOccurred()) - - // The webhook may take a bit of time to initially be responsive - // See: https://github.com/istio/istio/pull/7743/files - EventuallyWithOffset(1, func() error { - return exec.RunCommandInput(string(b), testHelper.RootDir, true, "kubectl", "apply", "-f", "-") - }, "30s", "5s").Should(BeNil()) -} - -func deleteKnativeTestService(filePath string) error { - b, err := os.ReadFile(filePath) - if err != nil { - return err - } - err = exec.RunCommandInput(string(b), testHelper.RootDir, true, "kubectl", "delete", "-f", "-") - if err != nil { - return err - } - return nil -} diff --git a/test/kube2e/knative/knative_test.go b/test/kube2e/knative/knative_test.go deleted file mode 100644 index e76507af3b7..00000000000 --- a/test/kube2e/knative/knative_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package knative_test - -import ( - "path/filepath" - "time" - - "github.com/solo-io/gloo/test/kube2e/helper" - "github.com/solo-io/go-utils/log" - - . "github.com/onsi/ginkgo/v2" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" -) - -var _ = Describe("Kube2e: Knative-Ingress", func() { - - BeforeEach(func() { - deployKnativeTestService(knativeTestServiceFile()) - }) - - AfterEach(func() { - if err := deleteKnativeTestService(knativeTestServiceFile()); err != nil { - log.Warnf("teardown failed %v", err) - } - }) - - It("works", func() { - ingressProxy := "knative-external-proxy" - ingressPort := 80 - testHelper.CurlEventuallyShouldRespond(helper.CurlOpts{ - Protocol: "http", - Path: "/", - Method: "GET", - Host: "helloworld-go.default.example.com", - Service: ingressProxy, - Port: ingressPort, - ConnectionTimeout: 1, - Verbose: true, - }, "Hello Go Sample v1!", 1, time.Minute*2, 1*time.Second) - }) -}) - -func knativeTestServiceFile() string { - return filepath.Join(testHelper.RootDir, "test", "kube2e", "knative", "artifacts", "knative-hello-service.yaml") -}