From 178ae70f0d97c170375459bc7b0265be385b1ff7 Mon Sep 17 00:00:00 2001 From: Kazuki Suda Date: Tue, 27 Apr 2021 18:08:38 +0900 Subject: [PATCH 1/2] Extracting validation error from apply server dry run output Signed-off-by: Kazuki Suda --- controllers/utils.go | 5 ++++- controllers/utils_test.go | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/controllers/utils.go b/controllers/utils.go index 6f5f3be8..809a3037 100644 --- a/controllers/utils.go +++ b/controllers/utils.go @@ -57,10 +57,13 @@ func parseApplyError(in []byte) string { if line != "" && !strings.HasSuffix(line, "created") && !strings.HasSuffix(line, "created (dry run)") && + !strings.HasSuffix(line, "created (server dry run)") && !strings.HasSuffix(line, "configured") && !strings.HasSuffix(line, "configured (dry run)") && + !strings.HasSuffix(line, "configured (server dry run)") && !strings.HasSuffix(line, "unchanged") && - !strings.HasSuffix(line, "unchanged (dry run)") { + !strings.HasSuffix(line, "unchanged (dry run)") && + !strings.HasSuffix(line, "unchanged (server dry run)") { errors += line + "\n" } } diff --git a/controllers/utils_test.go b/controllers/utils_test.go index 685f46f2..ab5640fa 100644 --- a/controllers/utils_test.go +++ b/controllers/utils_test.go @@ -30,3 +30,16 @@ error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Cont t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines) } } + +func Test_parseApplyError_serverDryRun(t *testing.T) { + filtered := parseApplyError([]byte(` +gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged (server dry run) +ingressroute.traefik.containo.us/flux-receiver configured (server dry run) +service/notification-controller created (server dry run) +error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`)) + filtered = strings.TrimSpace(filtered) + numLines := len(strings.Split(filtered, "\n")) + if numLines != 1 { + t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines) + } +} From e91129c4f1379734c854ca78f732db55c4025e93 Mon Sep 17 00:00:00 2001 From: Kazuki Suda Date: Tue, 27 Apr 2021 19:22:27 +0900 Subject: [PATCH 2/2] Confirm the right string is returned Signed-off-by: Kazuki Suda --- controllers/utils_test.go | 65 +++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/controllers/utils_test.go b/controllers/utils_test.go index ab5640fa..39b75c77 100644 --- a/controllers/utils_test.go +++ b/controllers/utils_test.go @@ -5,41 +5,52 @@ import ( "testing" ) -func Test_parseApplyError(t *testing.T) { - filtered := parseApplyError([]byte(` +func TestParseApplyError(t *testing.T) { + tests := []struct { + name string + in []byte + filtered string + }{ + { + "apply", + []byte(` gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged ingressroute.traefik.containo.us/flux-receiver configured service/notification-controller created -The Service "webhook-receiver" is invalid: spec.clusterIP: Invalid value: "10.200.133.61": field is immutable`)) - filtered = strings.TrimSpace(filtered) - numLines := len(strings.Split(filtered, "\n")) - if numLines != 1 { - t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines) - } -} - -func Test_parseApplyError_dryRun(t *testing.T) { - filtered := parseApplyError([]byte(` +The Service "webhook-receiver" is invalid: spec.clusterIP: Invalid value: "10.200.133.61": field is immutable +`), + `The Service "webhook-receiver" is invalid: spec.clusterIP: Invalid value: "10.200.133.61": field is immutable`, + }, + { + "client dry-run", + []byte(` gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged (dry run) ingressroute.traefik.containo.us/flux-receiver configured (dry run) service/notification-controller created (dry run) -error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`)) - filtered = strings.TrimSpace(filtered) - numLines := len(strings.Split(filtered, "\n")) - if numLines != 1 { - t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines) - } -} - -func Test_parseApplyError_serverDryRun(t *testing.T) { - filtered := parseApplyError([]byte(` +error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container +`), + `error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`, + }, + { + "server dry-run", + []byte(` gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged (server dry run) ingressroute.traefik.containo.us/flux-receiver configured (server dry run) service/notification-controller created (server dry run) -error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`)) - filtered = strings.TrimSpace(filtered) - numLines := len(strings.Split(filtered, "\n")) - if numLines != 1 { - t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines) +error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container +`), + `error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + filtered := parseApplyError(tt.in) + filtered = strings.TrimSpace(filtered) + + if tt.filtered != filtered { + t.Errorf("expected %q, but actual %q", tt.filtered, filtered) + } + }) } }