Skip to content

Commit 774da2d

Browse files
authored
Merge pull request #333 from superbrothers/server-dry-run
Extracting validation error from apply server dry run output
2 parents b15052a + e91129c commit 774da2d

File tree

2 files changed

+45
-18
lines changed

2 files changed

+45
-18
lines changed

controllers/utils.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,13 @@ func parseApplyError(in []byte) string {
5757
if line != "" &&
5858
!strings.HasSuffix(line, "created") &&
5959
!strings.HasSuffix(line, "created (dry run)") &&
60+
!strings.HasSuffix(line, "created (server dry run)") &&
6061
!strings.HasSuffix(line, "configured") &&
6162
!strings.HasSuffix(line, "configured (dry run)") &&
63+
!strings.HasSuffix(line, "configured (server dry run)") &&
6264
!strings.HasSuffix(line, "unchanged") &&
63-
!strings.HasSuffix(line, "unchanged (dry run)") {
65+
!strings.HasSuffix(line, "unchanged (dry run)") &&
66+
!strings.HasSuffix(line, "unchanged (server dry run)") {
6467
errors += line + "\n"
6568
}
6669
}

controllers/utils_test.go

+41-17
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,52 @@ import (
55
"testing"
66
)
77

8-
func Test_parseApplyError(t *testing.T) {
9-
filtered := parseApplyError([]byte(`
8+
func TestParseApplyError(t *testing.T) {
9+
tests := []struct {
10+
name string
11+
in []byte
12+
filtered string
13+
}{
14+
{
15+
"apply",
16+
[]byte(`
1017
gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged
1118
ingressroute.traefik.containo.us/flux-receiver configured
1219
service/notification-controller created
13-
The Service "webhook-receiver" is invalid: spec.clusterIP: Invalid value: "10.200.133.61": field is immutable`))
14-
filtered = strings.TrimSpace(filtered)
15-
numLines := len(strings.Split(filtered, "\n"))
16-
if numLines != 1 {
17-
t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines)
18-
}
19-
}
20-
21-
func Test_parseApplyError_dryRun(t *testing.T) {
22-
filtered := parseApplyError([]byte(`
20+
The Service "webhook-receiver" is invalid: spec.clusterIP: Invalid value: "10.200.133.61": field is immutable
21+
`),
22+
`The Service "webhook-receiver" is invalid: spec.clusterIP: Invalid value: "10.200.133.61": field is immutable`,
23+
},
24+
{
25+
"client dry-run",
26+
[]byte(`
2327
gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged (dry run)
2428
ingressroute.traefik.containo.us/flux-receiver configured (dry run)
2529
service/notification-controller created (dry run)
26-
error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`))
27-
filtered = strings.TrimSpace(filtered)
28-
numLines := len(strings.Split(filtered, "\n"))
29-
if numLines != 1 {
30-
t.Errorf("Should filter out all but one line from the error output, but got %d lines", numLines)
30+
error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container
31+
`),
32+
`error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`,
33+
},
34+
{
35+
"server dry-run",
36+
[]byte(`
37+
gitrepository.source.toolkit.fluxcd.io/flux-workspaces unchanged (server dry run)
38+
ingressroute.traefik.containo.us/flux-receiver configured (server dry run)
39+
service/notification-controller created (server dry run)
40+
error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container
41+
`),
42+
`error: error validating data: unknown field "ima ge" in io.k8s.api.core.v1.Container`,
43+
},
44+
}
45+
46+
for _, tt := range tests {
47+
t.Run(tt.name, func(t *testing.T) {
48+
filtered := parseApplyError(tt.in)
49+
filtered = strings.TrimSpace(filtered)
50+
51+
if tt.filtered != filtered {
52+
t.Errorf("expected %q, but actual %q", tt.filtered, filtered)
53+
}
54+
})
3155
}
3256
}

0 commit comments

Comments
 (0)