github.com/mgoltzsche/khelm@v1.0.1/cmd/khelm/kustomize_plugin_test.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 "gopkg.in/yaml.v3" 13 ) 14 15 func TestKustomizePlugin(t *testing.T) { 16 file := filepath.Join("..", "..", "example", "include", "generator.yaml") 17 kustomizeGenCfg, err := ioutil.ReadFile(file) 18 require.NoError(t, err) 19 os.Setenv(envKustomizePluginConfig, string(kustomizeGenCfg)) 20 os.Setenv(envTrustAnyRepo, "true") 21 os.Setenv(envDebug, "true") 22 defer os.Unsetenv(envKustomizePluginConfig) 23 defer os.Unsetenv(envTrustAnyRepo) 24 defer os.Unsetenv(envDebug) 25 out := runKustomizePlugin(t, filepath.Dir(file)) 26 validateYAML(t, out, 1) 27 require.Contains(t, string(out), "\n key: b\n", "output: %s", string(out)) 28 } 29 30 func runKustomizePlugin(t *testing.T, wd string, args ...string) (out []byte) { 31 wdOrig, err := os.Getwd() 32 require.NoError(t, err) 33 os.Setenv(envKustomizePluginConfigRoot, wdOrig) 34 defer os.Unsetenv(envKustomizePluginConfigRoot) 35 err = os.Chdir(wd) 36 require.NoError(t, err) 37 defer func() { _ = os.Chdir(wdOrig) }() 38 os.Args = append([]string{"testee"}, args...) 39 var buf bytes.Buffer 40 err = Execute(nil, &buf) 41 require.NoError(t, err) 42 return buf.Bytes() 43 } 44 45 func validateYAML(t *testing.T, y []byte, objAmount int) (first map[string]interface{}) { 46 dec := yaml.NewDecoder(bytes.NewReader(y)) 47 i := 0 48 var err error 49 for err == nil { 50 o := map[string]interface{}{} 51 err = dec.Decode(o) 52 if len(o) > 0 { 53 if first == nil { 54 first = o 55 } 56 i++ 57 } 58 } 59 if err == io.EOF { 60 err = nil 61 } 62 require.NoError(t, err) 63 if objAmount >= 0 { 64 require.Equal(t, objAmount, i, "amount of resources within output") 65 } 66 return 67 }