1 // Copyright 2019 The Kubernetes Authors. 2 // SPDX-License-Identifier: Apache-2.0 3 4 package krusty_test 5 6 import ( 7 "testing" 8 9 kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" 10 "sigs.k8s.io/kustomize/api/types" 11 ) 12 13 func writeStringPrefixer(th *kusttest_test.HarnessEnhanced, path, name string) { 14 th.WriteF(path, ` 15 apiVersion: someteam.example.com/v1 16 kind: StringPrefixer 17 metadata: 18 name: `+name+` 19 `) 20 } 21 22 func TestPluginsNotEnabled(t *testing.T) { 23 th := kusttest_test.MakeEnhancedHarness(t). 24 BuildGoPlugin("someteam.example.com", "v1", "StringPrefixer") 25 defer th.Reset() 26 27 th.WriteK(".", ` 28 transformers: 29 - stringPrefixer.yaml 30 `) 31 writeStringPrefixer(th, "stringPrefixer.yaml", "apple") 32 err := th.RunWithErr(".", th.MakeOptionsPluginsDisabled()) 33 if err == nil { 34 t.Fatalf("expected error") 35 } 36 if !types.IsErrOnlyBuiltinPluginsAllowed(err) { 37 t.Fatalf("unexpected err: %v", err) 38 } 39 } 40 41 func TestSedTransformer(t *testing.T) { 42 th := kusttest_test.MakeEnhancedHarness(t). 43 PrepExecPlugin("someteam.example.com", "v1", "SedTransformer") 44 defer th.Reset() 45 46 th.WriteK(".", ` 47 resources: 48 - configmap.yaml 49 50 transformers: 51 - sed-transformer.yaml 52 53 configMapGenerator: 54 - name: test 55 literals: 56 - FOO=$FOO 57 - BAR=$BAR 58 `) 59 th.WriteF("sed-transformer.yaml", ` 60 apiVersion: someteam.example.com/v1 61 kind: SedTransformer 62 metadata: 63 name: some-random-name 64 argsFromFile: sed-input.txt 65 `) 66 th.WriteF("sed-input.txt", ` 67 s/$FOO/foo/g 68 s/$BAR/bar/g 69 `) 70 71 th.WriteF("configmap.yaml", ` 72 apiVersion: v1 73 kind: ConfigMap 74 metadata: 75 name: configmap-a 76 annotations: 77 fruit: peach 78 data: 79 foo: $FOO 80 `) 81 82 m := th.Run(".", th.MakeOptionsPluginsEnabled()) 83 th.AssertActualEqualsExpectedNoIdAnnotations(m, ` 84 apiVersion: v1 85 data: 86 foo: foo 87 kind: ConfigMap 88 metadata: 89 annotations: 90 fruit: peach 91 name: configmap-a 92 --- 93 apiVersion: v1 94 data: 95 BAR: bar 96 FOO: foo 97 kind: ConfigMap 98 metadata: 99 name: test-6bc28fff49 100 `) 101 } 102 103 /* 104 105 The tests below are disabled until the StringPrefixer and DatePrefixer 106 can be rewritten using kyaml, instead of depending on the 107 PrefixSuffixTransformerPlugin. That dependency is causing 108 failures in the test loader. 109 110 func writeDeployment(th *kusttest_test.HarnessEnhanced, path string) { 111 th.WriteF(path, ` 112 apiVersion: apps/v1 113 kind: Deployment 114 metadata: 115 name: myDeployment 116 spec: 117 template: 118 metadata: 119 labels: 120 backend: awesome 121 spec: 122 containers: 123 - name: whatever 124 image: whatever 125 `) 126 } 127 128 func writeDatePrefixer(th *kusttest_test.HarnessEnhanced, path, name string) { 129 th.WriteF(path, ` 130 apiVersion: someteam.example.com/v1 131 kind: DatePrefixer 132 metadata: 133 name: `+name+` 134 `) 135 } 136 137 func TestOrderedTransformers(t *testing.T) { 138 th := kusttest_test.MakeEnhancedHarness(t). 139 BuildGoPlugin("someteam.example.com", "v1", "StringPrefixer"). 140 BuildGoPlugin("someteam.example.com", "v1", "DatePrefixer") 141 defer th.Reset() 142 143 th.WriteK(".", ` 144 resources: 145 - deployment.yaml 146 transformers: 147 - peachPrefixer.yaml 148 - date1Prefixer.yaml 149 - applePrefixer.yaml 150 - date2Prefixer.yaml 151 `) 152 writeDeployment(th, "deployment.yaml") 153 writeStringPrefixer(th, "applePrefixer.yaml", "apple") 154 writeStringPrefixer(th, "peachPrefixer.yaml", "peach") 155 writeDatePrefixer(th, "date1Prefixer.yaml", "date1") 156 writeDatePrefixer(th, "date2Prefixer.yaml", "date2") 157 m := th.Run(".", th.MakeOptionsPluginsEnabled()) 158 th.AssertActualEqualsExpected(m, ` 159 apiVersion: apps/v1 160 kind: Deployment 161 metadata: 162 name: 2018-05-11-apple-2018-05-11-peach-myDeployment 163 spec: 164 template: 165 metadata: 166 labels: 167 backend: awesome 168 spec: 169 containers: 170 - image: whatever 171 name: whatever 172 `) 173 } 174 175 func TestTransformedTransformers(t *testing.T) { 176 th := kusttest_test.MakeEnhancedHarness(t). 177 BuildGoPlugin("someteam.example.com", "v1", "StringPrefixer"). 178 BuildGoPlugin("someteam.example.com", "v1", "DatePrefixer") 179 defer th.Reset() 180 181 th.WriteK("base", ` 182 resources: 183 - stringPrefixer.yaml 184 transformers: 185 - datePrefixer.yaml 186 `) 187 writeStringPrefixer(th, "base/stringPrefixer.yaml", "apple") 188 writeDatePrefixer(th, "base/datePrefixer.yaml", "date") 189 190 th.WriteK("overlay", ` 191 resources: 192 - deployment.yaml 193 transformers: 194 - ../base 195 `) 196 writeDeployment(th, "overlay/deployment.yaml") 197 198 m := th.Run("overlay", th.MakeOptionsPluginsEnabled()) 199 th.AssertActualEqualsExpected(m, ` 200 apiVersion: apps/v1 201 kind: Deployment 202 metadata: 203 name: 2018-05-11-apple-myDeployment 204 spec: 205 template: 206 metadata: 207 labels: 208 backend: awesome 209 spec: 210 containers: 211 - image: whatever 212 name: whatever 213 `) 214 } 215 */ 216