From 19b2a31bbe2fc5a49343fe0456d6149f598514a4 Mon Sep 17 00:00:00 2001 From: Jay Chen <1180092+jijiechen@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:54:45 +0800 Subject: [PATCH] feat(bootstrap): added E2E test case for pushing corefile template from cp to dp Signed-off-by: Jay Chen <1180092+jijiechen@users.noreply.github.com> --- app/kuma-dp/cmd/run.go | 13 --- .../kubernetes/bootstrap/corefile_template.go | 85 +++++++++++++++++++ .../kubernetes/kubernetes_suite_test.go | 3 + 3 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 test/e2e_env/kubernetes/bootstrap/corefile_template.go diff --git a/app/kuma-dp/cmd/run.go b/app/kuma-dp/cmd/run.go index 27cb3c25e0c8..14127515b404 100644 --- a/app/kuma-dp/cmd/run.go +++ b/app/kuma-dp/cmd/run.go @@ -340,16 +340,3 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { } return os.WriteFile(filename, data, perm) } - -func writeTempFile(dirPattern, filename string, data []byte, perm os.FileMode) (string, error) { - path, err := os.MkdirTemp("", dirPattern) - fullFileName := filepath.Join(path, filename) - if err != nil { - return "", errors.Errorf("failed to create a containing directory for %s. %v", filename, err) - } - err = os.WriteFile(fullFileName, data, perm) - if err != nil { - return "", errors.Errorf("failed to write %s to disk. %v", filename, err) - } - return fullFileName, nil -} diff --git a/test/e2e_env/kubernetes/bootstrap/corefile_template.go b/test/e2e_env/kubernetes/bootstrap/corefile_template.go new file mode 100644 index 000000000000..e1e851b55622 --- /dev/null +++ b/test/e2e_env/kubernetes/bootstrap/corefile_template.go @@ -0,0 +1,85 @@ +package bootstrap + +import ( + "fmt" + "strings" + "time" + + "github.com/gruntwork-io/terratest/modules/random" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + "github.com/kumahq/kuma/pkg/config/core" + k8s_util "github.com/kumahq/kuma/pkg/plugins/runtime/k8s/util" + . "github.com/kumahq/kuma/test/framework" + "github.com/kumahq/kuma/test/framework/deployments/democlient" +) + +func CorefileTemplate() { + var zoneCluster Cluster + appNamespace := "dns-app" + appName := "demo-dp-app" + expectedTestText := "# this dummy corefile template is loaded from control plane" + configMapName := "corefile-template" + configMap := func(ns string) string { + return fmt.Sprintf(`apiVersion: v1 +kind: ConfigMap +metadata: + namespace: %s + name: %s +data: + %s: | + .:{{ .CoreDNSPort }} { + %s + log + }`, ns, configMapName, configMapName, expectedTestText) + } + + dnsConfigDir := "/tmp/kuma-dp-config/coredns" + BeforeAll(func() { + zoneCluster = NewK8sCluster(NewTestingT(), Kuma2, Silent). + WithTimeout(6 * time.Second). + WithRetries(60) + + Expect(NewClusterSetup(). + Install(Namespace(Config.KumaNamespace)). + Install(YamlK8s(configMap(Config.KumaNamespace))). + Install(Kuma(core.Zone, + WithInstallationMode(HelmInstallationMode), + WithHelmReleaseName(fmt.Sprintf("kuma-%s", strings.ToLower(random.UniqueId()))), + WithHelmOpt("controlPlane.envVars.KUMA_BOOTSTRAP_SERVER_PARAMS_COREFILE_TEMPLATE_PATH", + dnsConfigDir+"/"+configMapName), + WithHelmOpt("controlPlane.extraConfigMaps[0].name", configMapName), + WithHelmOpt("controlPlane.extraConfigMaps[0].mountPath", dnsConfigDir), + WithHelmOpt("controlPlane.extraConfigMaps[0].readonly", "false"), + )). + Install(MeshKubernetes("default")). + Install(NamespaceWithSidecarInjection(appNamespace)). + Install(democlient.Install( + democlient.WithName(appName), + democlient.WithNamespace(appNamespace), + democlient.WithPodAnnotations(map[string]string{ + "kuma.io/sidecar-env-vars": fmt.Sprintf("KUMA_DNS_CONFIG_DIR=%s", dnsConfigDir), + }), + )). + + Setup(zoneCluster), + ).To(Succeed()) + }) + + E2EAfterAll(func() { + Expect(zoneCluster.DeleteKuma()).To(Succeed()) + Expect(zoneCluster.DismissCluster()).To(Succeed()) + }) + + It("should use Corefile template from control plane at data plane", func() { + dpPod, err := PodNameOfApp(zoneCluster, appName, appNamespace) + Expect(err).ToNot(HaveOccurred()) + + stdout, stderr, err := zoneCluster.Exec( + appNamespace, dpPod, k8s_util.KumaSidecarContainerName, "cat", dnsConfigDir+"/Corefile") + Expect(err).ToNot(HaveOccurred()) + Expect(stderr).To(BeEmpty()) + Expect(stdout).To(ContainSubstring(expectedTestText)) + }) +} diff --git a/test/e2e_env/kubernetes/kubernetes_suite_test.go b/test/e2e_env/kubernetes/kubernetes_suite_test.go index e41c486a6425..fe475584ba97 100644 --- a/test/e2e_env/kubernetes/kubernetes_suite_test.go +++ b/test/e2e_env/kubernetes/kubernetes_suite_test.go @@ -3,10 +3,12 @@ package kubernetes_test import ( "testing" + . "github.com/onsi/ginkgo/v2" "github.com/kumahq/kuma/pkg/test" "github.com/kumahq/kuma/test/e2e_env/kubernetes/api" + "github.com/kumahq/kuma/test/e2e_env/kubernetes/bootstrap" "github.com/kumahq/kuma/test/e2e_env/kubernetes/connectivity" "github.com/kumahq/kuma/test/e2e_env/kubernetes/container_patch" "github.com/kumahq/kuma/test/e2e_env/kubernetes/defaults" @@ -49,6 +51,7 @@ var _ = E2ESynchronizedBeforeSuite(kubernetes.SetupAndGetState, kubernetes.Resto var _ = SynchronizedAfterSuite(func() {}, func() {}) var ( + _ = Describe("Corefile Template", bootstrap.CorefileTemplate, Ordered) _ = Describe("Virtual Probes", healthcheck.VirtualProbes, Ordered) _ = Describe("Gateway", gateway.Gateway, Ordered) _ = Describe("Gateway - Cross-mesh", gateway.CrossMeshGatewayOnKubernetes, Ordered)