Explorar o código

test: allow offline v2 e2e reruns

Signed-off-by: Moritz Johner <beller.moritz@googlemail.com>
Moritz Johner hai 2 meses
pai
achega
da8d6ee513
Modificáronse 4 ficheiros con 111 adicións e 22 borrados
  1. 36 22
      e2e/framework/addon/chart.go
  2. 56 0
      e2e/framework/addon/chart_test.go
  3. 1 0
      e2e/run.sh
  4. 18 0
      e2e/run_test.go

+ 36 - 22
e2e/framework/addon/chart.go

@@ -19,6 +19,7 @@ package addon
 import (
 	"bytes"
 	"fmt"
+	"os"
 	"os/exec"
 	"path/filepath"
 
@@ -62,29 +63,52 @@ func (c *HelmChart) Setup(cfg *Config) error {
 
 // Install adds the chart repo and installs the helm chart.
 func (c *HelmChart) Install() error {
-	args := []string{
-		"dependency", "update", filepath.Join(AssetDir(), "deploy/charts/external-secrets"),
+	if helmDependencyUpdateEnabled() {
+		args := []string{
+			"dependency", "update", filepath.Join(AssetDir(), "deploy/charts/external-secrets"),
+		}
+		log.Logf("updating chart dependencies with args: %+q", args)
+		cmd := exec.Command("helm", args...)
+		output, err := cmd.CombinedOutput()
+		if err != nil {
+			return fmt.Errorf("unable to run update cmd: %w: %s", err, string(output))
+		}
 	}
-	log.Logf("updating chart dependencies with args: %+q", args)
-	cmd := exec.Command("helm", args...)
-	output, err := cmd.CombinedOutput()
+
+	err := c.addRepo()
 	if err != nil {
-		return fmt.Errorf("unable to run update cmd: %w: %s", err, string(output))
+		return err
 	}
 
-	err = c.addRepo()
+	args := c.installArgs()
+	log.Logf("installing chart with args: %+q", args)
+	cmd := exec.Command("helm", args...)
+	output, err := cmd.CombinedOutput()
 	if err != nil {
-		return err
+		return fmt.Errorf("unable to run cmd: %w: %s", err, string(output))
 	}
 
-	args = []string{"install", c.ReleaseName, c.Chart,
-		"--dependency-update",
+	log.Logf("finished running chart install")
+
+	return nil
+}
+
+func helmDependencyUpdateEnabled() bool {
+	return os.Getenv("E2E_SKIP_HELM_DEPENDENCY_UPDATE") != "true"
+}
+
+func (c *HelmChart) installArgs() []string {
+	args := []string{"install", c.ReleaseName, c.Chart}
+	if helmDependencyUpdateEnabled() {
+		args = append(args, "--dependency-update")
+	}
+	args = append(args,
 		"--debug",
 		"--wait",
 		"--timeout", "600s",
 		"-o", "yaml",
 		"--namespace", c.Namespace,
-	}
+	)
 
 	if c.ChartVersion != "" {
 		args = append(args, "--version", c.ChartVersion)
@@ -99,17 +123,7 @@ func (c *HelmChart) Install() error {
 	}
 
 	args = append(args, c.Args...)
-
-	log.Logf("installing chart with args: %+q", args)
-	cmd = exec.Command("helm", args...)
-	output, err = cmd.CombinedOutput()
-	if err != nil {
-		return fmt.Errorf("unable to run cmd: %w: %s", err, string(output))
-	}
-
-	log.Logf("finished running chart install")
-
-	return nil
+	return args
 }
 
 // Uninstall removes the chart aswell as the repo.

+ 56 - 0
e2e/framework/addon/chart_test.go

@@ -0,0 +1,56 @@
+package addon
+
+import "testing"
+
+func TestHelmDependencyUpdateEnabledByDefault(t *testing.T) {
+	t.Setenv("E2E_SKIP_HELM_DEPENDENCY_UPDATE", "")
+
+	if !helmDependencyUpdateEnabled() {
+		t.Fatalf("expected helm dependency update to be enabled by default")
+	}
+}
+
+func TestHelmDependencyUpdateCanBeSkipped(t *testing.T) {
+	t.Setenv("E2E_SKIP_HELM_DEPENDENCY_UPDATE", "true")
+
+	if helmDependencyUpdateEnabled() {
+		t.Fatalf("expected helm dependency update to be disabled when E2E_SKIP_HELM_DEPENDENCY_UPDATE=true")
+	}
+}
+
+func TestInstallArgsIncludeDependencyUpdateByDefault(t *testing.T) {
+	t.Setenv("E2E_SKIP_HELM_DEPENDENCY_UPDATE", "")
+
+	args := (&HelmChart{
+		ReleaseName: "eso",
+		Chart:       "/tmp/chart",
+		Namespace:   "default",
+	}).installArgs()
+
+	if !contains(args, "--dependency-update") {
+		t.Fatalf("expected install args to include --dependency-update, got %v", args)
+	}
+}
+
+func TestInstallArgsOmitDependencyUpdateWhenSkipped(t *testing.T) {
+	t.Setenv("E2E_SKIP_HELM_DEPENDENCY_UPDATE", "true")
+
+	args := (&HelmChart{
+		ReleaseName: "eso",
+		Chart:       "/tmp/chart",
+		Namespace:   "default",
+	}).installArgs()
+
+	if contains(args, "--dependency-update") {
+		t.Fatalf("expected install args to omit --dependency-update when E2E_SKIP_HELM_DEPENDENCY_UPDATE=true, got %v", args)
+	}
+}
+
+func contains(values []string, want string) bool {
+	for _, value := range values {
+		if value == want {
+			return true
+		}
+	}
+	return false
+}

+ 1 - 0
e2e/run.sh

@@ -108,6 +108,7 @@ echo -e "Starting the e2e test pod ${E2E_IMAGE_NAME}:${VERSION}"
   --env="SECRETSERVER_URL=${SECRETSERVER_URL:-}" \
   --env="GRAFANA_URL=${GRAFANA_URL:-}" \
   --env="GRAFANA_TOKEN=${GRAFANA_TOKEN:-}" \
+  --env="E2E_SKIP_HELM_DEPENDENCY_UPDATE=${E2E_SKIP_HELM_DEPENDENCY_UPDATE:-}" \
   --env="E2E_PROVIDER_MODE=${E2E_PROVIDER_MODE:-}" \
   --env="VERSION=${VERSION}" \
   --env="TEST_SUITES=${TEST_SUITES}" \

+ 18 - 0
e2e/run_test.go

@@ -0,0 +1,18 @@
+package e2e
+
+import (
+	"os"
+	"strings"
+	"testing"
+)
+
+func TestRunScriptPassesHelmDependencyUpdateSkipEnv(t *testing.T) {
+	content, err := os.ReadFile("run.sh")
+	if err != nil {
+		t.Fatalf("read run.sh: %v", err)
+	}
+
+	if !strings.Contains(string(content), `--env="E2E_SKIP_HELM_DEPENDENCY_UPDATE=${E2E_SKIP_HELM_DEPENDENCY_UPDATE:-}"`) {
+		t.Fatalf("expected run.sh to pass E2E_SKIP_HELM_DEPENDENCY_UPDATE into the e2e pod")
+	}
+}