diff --git a/kyaml/fn/framework/framework_test.go b/kyaml/fn/framework/framework_test.go index ab50ad033f..400f1ba7fc 100644 --- a/kyaml/fn/framework/framework_test.go +++ b/kyaml/fn/framework/framework_test.go @@ -90,149 +90,3 @@ results: tags: foo: bar`, strings.TrimSpace(out.String())) } - -func TestExecute_NoErrorResult(t *testing.T) { - singleDeployment := `kind: Deployment -apiVersion: v1 -metadata: - name: tester - namespace: default -spec: - replicas: 0` - resourceListDeployment := `kind: ResourceList -apiVersion: config.kubernetes.io/v1 -items: -- kind: Deployment - apiVersion: v1 - metadata: - name: tester - namespace: default - spec: - replicas: 0` - outputResourceList := `apiVersion: config.kubernetes.io/v1 -kind: ResourceList -items: -- kind: Deployment - apiVersion: v1 - metadata: - name: tester - namespace: default - spec: - replicas: 0 -results: -- message: bad value for replicas - severity: error - resourceRef: - apiVersion: v1 - kind: Deployment - name: tester - namespace: default - field: - path: .spec.Replicas - currentValue: "0" - proposedValue: "3" - file: - path: /path/to/deployment.yaml -- message: some error - severity: error` - outputOtherWrap := strings.NewReplacer( - "kind: ResourceList", "kind: SomethingElse", - "apiVersion: config.kubernetes.io/v1", "apiVersion: fakeVersion", - ).Replace(outputResourceList) - - testCases := []struct { - desc string - noWrap bool - wrapKind string - wrapAPIVersion string - input string - want string - }{ - { - desc: "resource list", - input: resourceListDeployment, - want: outputResourceList, - }, - { - desc: "individual resources", - input: singleDeployment, - want: singleDeployment, - }, - { - desc: "wrap resource list", - wrapKind: kio.ResourceListKind, - wrapAPIVersion: kio.ResourceListAPIVersion, - input: resourceListDeployment, - want: outputResourceList, - }, - { - desc: "unwrap resource list", - noWrap: true, - input: resourceListDeployment, - want: singleDeployment, - }, - { - desc: "wrap individual resources", - wrapKind: kio.ResourceListKind, - wrapAPIVersion: kio.ResourceListAPIVersion, - input: singleDeployment, - want: outputResourceList, - }, - { - desc: "no wrap has precedence", - noWrap: true, - wrapKind: kio.ResourceListKind, - wrapAPIVersion: kio.ResourceListAPIVersion, - input: singleDeployment, - want: singleDeployment, - }, - { - desc: "honor specified wrapping kind", - wrapKind: "SomethingElse", - wrapAPIVersion: "fakeVersion", - input: resourceListDeployment, - want: outputOtherWrap, - }, - } - - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { - p := framework.ResourceListProcessorFunc(func(rl *framework.ResourceList) error { - rl.Results = framework.Results{ - { - Message: "bad value for replicas", - Severity: framework.Error, - ResourceRef: yaml.ResourceIdentifier{ - TypeMeta: yaml.TypeMeta{APIVersion: "v1", Kind: "Deployment"}, - NameMeta: yaml.NameMeta{Name: "tester", Namespace: "default"}, - }, - Field: framework.Field{ - Path: ".spec.Replicas", - CurrentValue: "0", - ProposedValue: "3", - }, - File: framework.File{ - Path: "/path/to/deployment.yaml", - Index: 0, - }, - }, - { - Message: "some error", - Severity: framework.Error, - }, - } - return nil - }) - got := new(bytes.Buffer) - source := &kio.ByteReadWriter{ - Reader: bytes.NewBufferString(tc.input), - Writer: got, - WrappingAPIVersion: tc.wrapAPIVersion, - WrappingKind: tc.wrapKind, - NoWrap: tc.noWrap, - } - assert.NoError(t, framework.Execute(p, source)) - assert.Equal(t, tc.want, strings.TrimSpace(got.String())) - }) - } -} diff --git a/kyaml/kio/byteio_readwriter_test.go b/kyaml/kio/byteio_readwriter_test.go index ce0c4e5c66..3f8d22c21a 100644 --- a/kyaml/kio/byteio_readwriter_test.go +++ b/kyaml/kio/byteio_readwriter_test.go @@ -747,3 +747,122 @@ func TestByteReadWriter_WrapBareSeqNode(t *testing.T) { }) } } + +func TestByteReadWriter_ResourceListWrapping(t *testing.T) { + singleDeployment := `kind: Deployment +apiVersion: v1 +metadata: + name: tester + namespace: default +spec: + replicas: 0` + resourceList := `apiVersion: config.kubernetes.io/v1 +kind: ResourceList +items: +- kind: Deployment + apiVersion: v1 + metadata: + name: tester + namespace: default + spec: + replicas: 0` + resourceListWithError := `apiVersion: config.kubernetes.io/v1 +kind: ResourceList +items: +- kind: Deployment + apiVersion: v1 + metadata: + name: tester + namespace: default + spec: + replicas: 0 +results: +- message: some error + severity: error` + resourceListDifferentWrapper := strings.NewReplacer( + "kind: ResourceList", "kind: SomethingElse", + "apiVersion: config.kubernetes.io/v1", "apiVersion: fakeVersion", + ).Replace(resourceList) + + testCases := []struct { + desc string + noWrap bool + wrapKind string + wrapAPIVersion string + input string + want string + }{ + { + desc: "resource list", + input: resourceList, + want: resourceList, + }, + { + desc: "individual resources", + input: singleDeployment, + want: singleDeployment, + }, + { + desc: "no nested wrapping", + wrapKind: kio.ResourceListKind, + wrapAPIVersion: kio.ResourceListAPIVersion, + input: resourceList, + want: resourceList, + }, + { + desc: "unwrap resource list", + noWrap: true, + input: resourceList, + want: singleDeployment, + }, + { + desc: "wrap individual resources", + wrapKind: kio.ResourceListKind, + wrapAPIVersion: kio.ResourceListAPIVersion, + input: singleDeployment, + want: resourceList, + }, + { + desc: "NoWrap has precedence", + noWrap: true, + wrapKind: kio.ResourceListKind, + wrapAPIVersion: kio.ResourceListAPIVersion, + input: singleDeployment, + want: singleDeployment, + }, + { + desc: "honor specified wrapping kind", + wrapKind: "SomethingElse", + wrapAPIVersion: "fakeVersion", + input: resourceList, + want: resourceListDifferentWrapper, + }, + { + desc: "passthrough results", + input: resourceListWithError, + want: resourceListWithError, + }, + } + + for i := range testCases { + tc := testCases[i] + t.Run(tc.desc, func(t *testing.T) { + var got bytes.Buffer + rw := kio.ByteReadWriter{ + Reader: strings.NewReader(tc.input), + Writer: &got, + NoWrap: tc.noWrap, + WrappingAPIVersion: tc.wrapAPIVersion, + WrappingKind: tc.wrapKind, + } + + rnodes, err := rw.Read() + assert.NoError(t, err) + + err = rw.Write(rnodes) + assert.NoError(t, err) + + assert.Equal(t, tc.want, strings.TrimSpace(got.String())) + }) + } +}