File: fsslice_test.go

package info (click to toggle)
golang-k8s-sigs-kustomize-api 0.20.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,768 kB
  • sloc: makefile: 206; sh: 67
file content (121 lines) | stat: -rw-r--r-- 2,071 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0

package fsslice_test

import (
	"bytes"
	"strings"
	"testing"

	"github.com/stretchr/testify/assert"
	"sigs.k8s.io/kustomize/api/filters/filtersutil"
	. "sigs.k8s.io/kustomize/api/filters/fsslice"
	"sigs.k8s.io/kustomize/kyaml/kio"
	"sigs.k8s.io/kustomize/kyaml/yaml"
)

type TestCase struct {
	input    string
	expected string
	filter   Filter
	fsSlice  string
	error    string
}

var tests = map[string]TestCase{
	"empty": {
		fsSlice: `
`,
		input: `
apiVersion: foo/v1
kind: Bar
`,
		expected: `
apiVersion: foo/v1
kind: Bar
`,
		filter: Filter{
			SetValue:   filtersutil.SetScalar("e"),
			CreateKind: yaml.ScalarNode,
		},
	},
	"two": {
		fsSlice: `
- path: a/b
  group: foo
  version: v1
  create: true
  kind: Bar
- path: q/r[]/s/t
  group: foo
  version: v1
  create: true
  kind: Bar
`,
		input: `
apiVersion: foo/v1
kind: Bar
q:
  r:
  - s: {}
`,
		expected: `
apiVersion: foo/v1
kind: Bar
q:
  r:
  - s: {t: e}
a:
  b: e
`,
		filter: Filter{
			SetValue:   filtersutil.SetScalar("e"),
			CreateKind: yaml.ScalarNode,
		},
	},
}

func TestFilter(t *testing.T) {
	for name := range tests {
		test := tests[name]
		t.Run(name, func(t *testing.T) {
			err := yaml.Unmarshal([]byte(test.fsSlice), &test.filter.FsSlice)
			if !assert.NoError(t, err) {
				t.FailNow()
			}

			out := &bytes.Buffer{}
			rw := &kio.ByteReadWriter{
				Reader:                bytes.NewBufferString(test.input),
				Writer:                out,
				OmitReaderAnnotations: true,
			}

			// run the filter
			err = kio.Pipeline{
				Inputs:  []kio.Reader{rw},
				Filters: []kio.Filter{kio.FilterAll(test.filter)},
				Outputs: []kio.Writer{rw},
			}.Execute()
			if test.error != "" {
				if !assert.EqualError(t, err, test.error) {
					t.FailNow()
				}
				// stop rest of test
				return
			}

			if !assert.NoError(t, err) {
				t.FailNow()
			}

			// check results
			if !assert.Equal(t,
				strings.TrimSpace(test.expected),
				strings.TrimSpace(out.String())) {
				t.FailNow()
			}
		})
	}
}