From edaf6ca522656a8a1c702cfa122848336e68bae8 Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 24 Feb 2022 04:26:18 +0530 Subject: [PATCH] Add test flag -update to update the golden files Test flag `-update` can be used to update all the golden files whenever the CLI output changes. Signed-off-by: Sunny --- CONTRIBUTING.md | 7 +++++++ Makefile | 2 +- cmd/flux/main_test.go | 11 +++++++++++ .../helmrelease/get_helmrelease_from_git.golden | 4 ++-- cmd/flux/testdata/image/get_image_policy_regex.golden | 4 ++-- .../testdata/image/get_image_policy_semver.golden | 4 ++-- .../kustomization/get_kustomization_from_git.golden | 4 ++-- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e60c9469..cafc531e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,6 +96,13 @@ Then you can run the end-to-end tests with: make e2e ``` +When the output of the Flux CLI changes, to automatically update the golden +files used in the test, pass `-update` flag to the test as: + +```bash +make e2e TEST_ARGS="-update" +``` + Teardown the e2e environment with: ```bash diff --git a/Makefile b/Makefile index 29ca788a..21149468 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet install-envtest KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test ./... -coverprofile cover.out --tags=unit e2e: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet - TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast + TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast $(TEST_ARGS) test-with-kind: install-envtest make setup-kind diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index c41eb3e6..5bc3f1ff 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -20,6 +20,7 @@ import ( "bufio" "bytes" "context" + "flag" "fmt" "io" "os" @@ -42,6 +43,9 @@ import ( var nextNamespaceId int64 +// update allows golden files to be updated based on the current output. +var update = flag.Bool("update", false, "update golden files") + // Return a unique namespace with the specified prefix, for tests to create // objects that won't collide with each other. func allocateNamespace(prefix string) string { @@ -298,6 +302,13 @@ func assertGoldenTemplateFile(goldenFile string, templateValues map[string]strin expectedOutput = string(goldenFileContents) } if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil { + // Update the golden files if comparision fails and the update flag is set. + if *update && output != "" { + if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { + return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) + } + return nil + } return fmt.Errorf("Mismatch from golden file '%s': %v", goldenFile, assertErr) } return nil diff --git a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden index 1cfeacc3..e802cb36 100644 --- a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE REVISION SUSPENDED -thrfg True Release reconciliation succeeded 6.0.0 False +NAME REVISION SUSPENDED READY MESSAGE +thrfg 6.0.0 False True Release reconciliation succeeded diff --git a/cmd/flux/testdata/image/get_image_policy_regex.golden b/cmd/flux/testdata/image/get_image_policy_regex.golden index 8486fb1f..b7cf40a9 100644 --- a/cmd/flux/testdata/image/get_image_policy_regex.golden +++ b/cmd/flux/testdata/image/get_image_policy_regex.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE LATEST IMAGE -podinfo-regex True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0 ghcr.io/stefanprodan/podinfo:5.0.0 +NAME LATEST IMAGE READY MESSAGE +podinfo-regex ghcr.io/stefanprodan/podinfo:5.0.0 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0 diff --git a/cmd/flux/testdata/image/get_image_policy_semver.golden b/cmd/flux/testdata/image/get_image_policy_semver.golden index 6f8a17dd..30ce52b7 100644 --- a/cmd/flux/testdata/image/get_image_policy_semver.golden +++ b/cmd/flux/testdata/image/get_image_policy_semver.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE LATEST IMAGE -podinfo-semver True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3 ghcr.io/stefanprodan/podinfo:5.0.3 +NAME LATEST IMAGE READY MESSAGE +podinfo-semver ghcr.io/stefanprodan/podinfo:5.0.3 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3 diff --git a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden index a613aa34..b4f7e31c 100644 --- a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE REVISION SUSPENDED -tkfg True Applied revision: 6.0.0/627d5c4 6.0.0/627d5c4 False +NAME REVISION SUSPENDED READY MESSAGE +tkfg 6.0.0/627d5c4 False True Applied revision: 6.0.0/627d5c4