Skip to content

Commit

Permalink
test(e2e): simplify localityaware tests
Browse files Browse the repository at this point in the history
- remove the complex test nesting
- write the test as table test
- use existing helper methods and objects
- rebalance some tests across jobs

Signed-off-by: Charly Molter <charly.molter@konghq.com>
  • Loading branch information
lahabana committed Oct 3, 2024
1 parent 1fcc8db commit b2e8321
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 108 deletions.
1 change: 1 addition & 0 deletions test/e2e/externalservices/e2e_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ func TestE2E(t *testing.T) {
}

var _ = Describe("Test ExternalServices on Kubernetes without Egress", Label("job-3"), externalservices.ExternalServicesOnKubernetesWithoutEgress)
var _ = Describe("Test ExternalServices on Multizone Hybrid with LocalityAwareLb", Label("job-3"), externalservices.ExternalServicesOnMultizoneHybridWithLocalityAwareLb, Ordered)
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package localityawarelb_multizone
package externalservices

import (
"fmt"
"github.com/kumahq/kuma/pkg/test/resources/samples"
"net"

. "github.com/onsi/ginkgo/v2"
Expand All @@ -12,23 +13,6 @@ import (
"github.com/kumahq/kuma/test/framework/client"
)

func meshMTLSOn(mesh string, zoneEgress string) string {
return fmt.Sprintf(`
type: Mesh
name: %s
mtls:
enabledBackend: ca-1
backends:
- name: ca-1
type: builtin
networking:
outbound:
passthrough: false
routing:
zoneEgress: %s
`, mesh, zoneEgress)
}

func zoneExternalService(mesh string, ip string, name string, zone string) string {
return fmt.Sprintf(`
type: ExternalService
Expand All @@ -50,24 +34,17 @@ var (
zone4 *UniversalCluster
)

func InstallExternalService(name string) InstallFunc {
return func(cluster Cluster) error {
return cluster.DeployApp(
WithArgs([]string{"test-server", "echo", "--port", "8080", "--instance", name}),
WithName(name),
WithoutDataplane(),
WithVerbose())
}
}

func ExternalServicesOnMultizoneHybridWithLocalityAwareLb() {
BeforeAll(func() {
// Global
global = NewUniversalCluster(NewTestingT(), Kuma5, Silent)

Expect(NewClusterSetup().
Install(Kuma(config_core.Global)).
Install(YamlUniversal(meshMTLSOn(defaultMesh, "true"))).
Install(ResourceUniversal(samples.MeshMTLSBuilder().
WithName(defaultMesh).
WithEgressRoutingEnabled().
WithoutPassthrough().Build())).
Install(MeshTrafficPermissionAllowAllUniversal(defaultMesh)).
Setup(global)).To(Succeed())

Expand Down Expand Up @@ -98,7 +75,7 @@ func ExternalServicesOnMultizoneHybridWithLocalityAwareLb() {
)).
Install(IngressUniversal(globalCP.GenerateZoneIngressToken)).
Install(EgressUniversal(globalCP.GenerateZoneEgressToken)).
Install(InstallExternalService("external-service-in-zone1")).
Install(TestServerExternalServiceUniversal("external-service-in-zone1", 8080, false)).
Setup(zone4),
).To(Succeed())

Expand All @@ -116,53 +93,30 @@ func ExternalServicesOnMultizoneHybridWithLocalityAwareLb() {
Expect(global.DismissCluster()).To(Succeed())
})

BeforeEach(func() {
Expect(global.GetKumactlOptions().
KumactlApplyFromString(meshMTLSOn(defaultMesh, "true")),
).To(Succeed())

k8sCluster := zone1.(*K8sCluster)

Expect(k8sCluster.StartZoneEgress()).To(Succeed())
Expect(k8sCluster.StartZoneIngress()).To(Succeed())
})

It("should fail request when ingress is down", func() {
// when
Eventually(func(g Gomega) {
_, err := client.CollectEchoResponse(
zone4, "zone4-demo-client", "external-service-in-zone1.mesh")
g.Expect(err).ToNot(HaveOccurred())
}, "30s", "1s").Should(Succeed())

// when ingress is down
Expect(zone1.(*K8sCluster).StopZoneIngress()).To(Succeed())

// then service is unreachable
Eventually(func(g Gomega) {
response, err := client.CollectFailure(
zone4, "zone4-demo-client", "external-service-in-zone1.mesh")
g.Expect(err).ToNot(HaveOccurred())
g.Expect(response.ResponseCode).To(Equal(503))
}, "30s").ShouldNot(HaveOccurred())
})

It("should fail request when egress is down", func() {
Eventually(func(g Gomega) {
_, err := client.CollectEchoResponse(
zone4, "zone4-demo-client", "external-service-in-zone1.mesh")
g.Expect(err).ToNot(HaveOccurred())
}, "30s", "1s").Should(Succeed())

// when egress is down
Expect(zone1.(*K8sCluster).StopZoneEgress()).To(Succeed())

// then service is unreachable
Eventually(func(g Gomega) {
response, err := client.CollectFailure(
zone4, "zone4-demo-client", "external-service-in-zone1.mesh")
g.Expect(err).ToNot(HaveOccurred())
g.Expect(response.ResponseCode).To(Equal(503))
}, "30s").ShouldNot(HaveOccurred())
})
DescribeTable("should fail request when zone proxy is down",
func(fn func(c *K8sCluster) func() error) {
k8sCluster := zone1.(*K8sCluster)
Expect(k8sCluster.StartZoneEgress()).To(Succeed())
Expect(k8sCluster.StartZoneIngress()).To(Succeed())
// when
Eventually(func(g Gomega) {
_, err := client.CollectEchoResponse(
zone4, "zone4-demo-client", "external-service-in-zone1.mesh")
g.Expect(err).ToNot(HaveOccurred())
}, "30s", "1s").Should(Succeed())

// when ingress is down
Expect(fn(k8sCluster)()).To(Succeed())

// then service is unreachable
Eventually(func(g Gomega) {
response, err := client.CollectFailure(
zone4, "zone4-demo-client", "external-service-in-zone1.mesh")
g.Expect(err).ToNot(HaveOccurred())
g.Expect(response.ResponseCode).To(Equal(503))
}, "30s").ShouldNot(HaveOccurred())
},
Entry("egress", func(c *K8sCluster) func() error { return c.StopZoneEgress }),
Entry("ingress", func(c *K8sCluster) func() error { return c.StopZoneIngress }),
)
}

This file was deleted.

4 changes: 2 additions & 2 deletions test/e2e/helm/e2e_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ var (
// Skipped as it fails with: error while running command: exit status 1; Error: INSTALLATION FAILED: rendered manifests contain a resource that already exists. Unable to continue with install: ServiceAccount "kuma-control-plane" in namespace "kuma-system" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-name" must equal "kuma-c0vo8o": current value is "kuma-8yy3uv"
// Likely something needs to be improved to be able to run this test
_ = PDescribe("Global and Zone universal mode with Helm chart", Label("job-0"), helm.GlobalAndZoneInUniversalModeWithHelmChart, Ordered)
_ = Describe("App deployment with Helm", Label("job-2"), helm.AppDeploymentWithHelmChart)
_ = Describe("Upgrade Standalone with Helm", Label("job-2"), helm.UpgradingWithHelmChartStandalone, Ordered)
_ = Describe("App deployment with Helm", Label("job-0"), helm.AppDeploymentWithHelmChart)
_ = Describe("Upgrade Standalone with Helm", Label("job-0"), helm.UpgradingWithHelmChartStandalone, Ordered)
_ = Describe("Upgrade Multizone with Helm", Label("job-2"), helm.UpgradingWithHelmChartMultizone, Ordered)
)
12 changes: 1 addition & 11 deletions test/framework/k8s_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -1034,17 +1034,7 @@ func (c *K8sCluster) CreateNamespace(namespace string) error {
}

func (c *K8sCluster) DeleteNamespace(namespace string) error {
if err := k8s.DeleteNamespaceE(c.GetTesting(), c.GetKubectlOptions(), namespace); err != nil {
if k8s_errors.IsNotFound(err) {
return nil
}
return err
}

// speed up namespace termination by terminating pods without grace period.
// Namespace is then deleted in ~6s instead of ~43s.
err := k8s.RunKubectlE(c.GetTesting(), c.GetKubectlOptions(namespace), "delete", "pods", "--all", "--grace-period=0")
if err != nil {
if err := c.TriggerDeleteNamespace(namespace); err != nil {
return err
}

Expand Down

0 comments on commit b2e8321

Please sign in to comment.