From dc40ccde2e0e4c19301fa1e2da055e8a544103db Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Mon, 19 Sep 2022 02:19:42 +0000 Subject: [PATCH] Add more testcases for hooks Signed-off-by: Yusuke Kuoka --- pkg/app/app_apply_hooks_test.go | 221 ++++++++++++++++++ .../log | 14 ++ .../hooks_are_not_run_on_disabled_release/log | 14 ++ .../hooks_are_run_on_enabled_release/log | 24 ++ .../log | 24 ++ .../hooks_for_no-diff_release/log | 6 + pkg/exectest/helm.go | 2 +- 7 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_alreadyd_uninstalled_release/log create mode 100644 pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_disabled_release/log create mode 100644 pkg/app/testdata/testapply_hooks/hooks_are_run_on_enabled_release/log create mode 100644 pkg/app/testdata/testapply_hooks/hooks_are_run_on_to-be-uninstalled_release/log create mode 100644 pkg/app/testdata/testapply_hooks/hooks_for_no-diff_release/log diff --git a/pkg/app/app_apply_hooks_test.go b/pkg/app/app_apply_hooks_test.go index ad880715..846efdad 100644 --- a/pkg/app/app_apply_hooks_test.go +++ b/pkg/app/app_apply_hooks_test.go @@ -261,4 +261,225 @@ releases: logLevel: "info", }) }) + + t.Run("hooks for no-diff release", func(t *testing.T) { + check(t, testcase{ + files: map[string]string{ + "/path/to/helmfile.yaml": ` +releases: +- name: foo + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + # only prepare and cleanup are run + - events: ["prepare", "preapply", "presync", "cleanup"] + command: echo + showlogs: true + args: ["foo"] +`, + }, + selectors: []string{"app=test"}, + diffs: map[exectest.DiffKey]error{ + {Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode"}: nil, + }, + error: "", + // as we check for log output, set concurrency to 1 to avoid non-deterministic test result + concurrency: 1, + logLevel: "info", + }) + }) + + t.Run("hooks are run on enabled release", func(t *testing.T) { + check(t, testcase{ + files: map[string]string{ + "/path/to/helmfile.yaml": ` +values: +- bar: + enabled: true + +releases: +- name: foo + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["foo"] +- name: bar + condition: bar.enabled + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["bar"] +`, + }, + selectors: []string{"app=test"}, + upgraded: []exectest.Release{ + {Name: "foo"}, + {Name: "bar"}, + }, + diffs: map[exectest.DiffKey]error{ + {Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + {Name: "bar", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + }, + error: "", + // as we check for log output, set concurrency to 1 to avoid non-deterministic test result + concurrency: 1, + logLevel: "info", + }) + }) + + t.Run("hooks are not run on disabled release", func(t *testing.T) { + check(t, testcase{ + files: map[string]string{ + "/path/to/helmfile.yaml": ` +values: +- bar: + enabled: false + +releases: +- name: foo + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["foo"] +- name: bar + condition: bar.enabled + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["bar"] +`, + }, + selectors: []string{"app=test"}, + upgraded: []exectest.Release{ + {Name: "foo"}, + }, + diffs: map[exectest.DiffKey]error{ + {Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + }, + error: "", + // as we check for log output, set concurrency to 1 to avoid non-deterministic test result + concurrency: 1, + logLevel: "info", + }) + }) + + t.Run("hooks are run on to-be-uninstalled release", func(t *testing.T) { + check(t, testcase{ + files: map[string]string{ + "/path/to/helmfile.yaml": ` +releases: +- name: foo + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["foo"] +- name: bar + installed: false + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["bar"] +`, + }, + selectors: []string{"app=test"}, + lists: map[exectest.ListKey]string{ + {Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE +foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default +`, + {Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE +bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default +`, + }, + upgraded: []exectest.Release{ + {Name: "foo"}, + }, + diffs: map[exectest.DiffKey]error{ + {Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + }, + error: "", + // as we check for log output, set concurrency to 1 to avoid non-deterministic test result + concurrency: 1, + logLevel: "info", + }) + }) + + t.Run("hooks are not run on alreadyd uninstalled release", func(t *testing.T) { + check(t, testcase{ + files: map[string]string{ + "/path/to/helmfile.yaml": ` +releases: +- name: foo + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["foo"] +- name: bar + installed: false + chart: incubator/raw + namespace: default + labels: + app: test + hooks: + - events: ["prepare", "preapply", "presync"] + command: echo + showlogs: true + args: ["bar"] +`, + }, + selectors: []string{"app=test"}, + lists: map[exectest.ListKey]string{ + {Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE +foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default +`, + {Filter: "^bar$", Flags: helmV2ListFlags}: ``, + }, + upgraded: []exectest.Release{ + {Name: "foo"}, + }, + diffs: map[exectest.DiffKey]error{ + {Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + }, + error: "", + // as we check for log output, set concurrency to 1 to avoid non-deterministic test result + concurrency: 1, + logLevel: "info", + }) + }) } diff --git a/pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_alreadyd_uninstalled_release/log b/pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_alreadyd_uninstalled_release/log new file mode 100644 index 00000000..ac333ffe --- /dev/null +++ b/pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_alreadyd_uninstalled_release/log @@ -0,0 +1,14 @@ + +hook[prepare] logs | foo +hook[prepare] logs | + +hook[preapply] logs | foo +hook[preapply] logs | + +hook[presync] logs | foo +hook[presync] logs | + +UPDATED RELEASES: +NAME CHART VERSION +foo incubator/raw 3.1.0 + diff --git a/pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_disabled_release/log b/pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_disabled_release/log new file mode 100644 index 00000000..0c6b5308 --- /dev/null +++ b/pkg/app/testdata/testapply_hooks/hooks_are_not_run_on_disabled_release/log @@ -0,0 +1,14 @@ + +hook[prepare] logs | foo +hook[prepare] logs | + +hook[preapply] logs | foo +hook[preapply] logs | + +hook[presync] logs | foo +hook[presync] logs | + +UPDATED RELEASES: +NAME CHART VERSION +foo incubator/raw + diff --git a/pkg/app/testdata/testapply_hooks/hooks_are_run_on_enabled_release/log b/pkg/app/testdata/testapply_hooks/hooks_are_run_on_enabled_release/log new file mode 100644 index 00000000..6da2c966 --- /dev/null +++ b/pkg/app/testdata/testapply_hooks/hooks_are_run_on_enabled_release/log @@ -0,0 +1,24 @@ + +hook[prepare] logs | foo +hook[prepare] logs | + +hook[prepare] logs | bar +hook[prepare] logs | + +hook[preapply] logs | foo +hook[preapply] logs | + +hook[preapply] logs | bar +hook[preapply] logs | + +hook[presync] logs | foo +hook[presync] logs | + +hook[presync] logs | bar +hook[presync] logs | + +UPDATED RELEASES: +NAME CHART VERSION +foo incubator/raw +bar incubator/raw + diff --git a/pkg/app/testdata/testapply_hooks/hooks_are_run_on_to-be-uninstalled_release/log b/pkg/app/testdata/testapply_hooks/hooks_are_run_on_to-be-uninstalled_release/log new file mode 100644 index 00000000..c79da665 --- /dev/null +++ b/pkg/app/testdata/testapply_hooks/hooks_are_run_on_to-be-uninstalled_release/log @@ -0,0 +1,24 @@ + +hook[prepare] logs | foo +hook[prepare] logs | + +hook[preapply] logs | bar +hook[preapply] logs | + +hook[presync] logs | bar +hook[presync] logs | + +hook[preapply] logs | foo +hook[preapply] logs | + +hook[presync] logs | foo +hook[presync] logs | + +UPDATED RELEASES: +NAME CHART VERSION +foo incubator/raw 3.1.0 + + +DELETED RELEASES: +NAME +bar diff --git a/pkg/app/testdata/testapply_hooks/hooks_for_no-diff_release/log b/pkg/app/testdata/testapply_hooks/hooks_for_no-diff_release/log new file mode 100644 index 00000000..1643d0d3 --- /dev/null +++ b/pkg/app/testdata/testapply_hooks/hooks_for_no-diff_release/log @@ -0,0 +1,6 @@ + +hook[prepare] logs | foo +hook[prepare] logs | + +hook[cleanup] logs | foo +hook[cleanup] logs | diff --git a/pkg/exectest/helm.go b/pkg/exectest/helm.go index d37965c8..6c42bab2 100644 --- a/pkg/exectest/helm.go +++ b/pkg/exectest/helm.go @@ -161,7 +161,7 @@ func (helm *Helm) List(context helmexec.HelmContext, filter string, flags ...str for k := range helm.Lists { keys = append(keys, k.String()) } - return "", fmt.Errorf("unexpected list key: %v in %v", key, strings.Join(keys, ", ")) + return "", fmt.Errorf("unexpected list key: %v not found in %v", key, strings.Join(keys, ", ")) } return res, nil }