github.com/splunk/dan1-qbec@v0.7.3/internal/commands/param_test.go (about) 1 /* 2 Copyright 2019 Splunk Inc. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package commands 18 19 import ( 20 "regexp" 21 "testing" 22 23 "github.com/stretchr/testify/assert" 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestParamListBasic(t *testing.T) { 28 s := newScaffold(t) 29 defer s.reset() 30 orig := maxDisplayValueLength 31 defer func() { maxDisplayValueLength = orig }() 32 maxDisplayValueLength = 10 33 err := s.executeCommand("param", "list", "dev") 34 require.Nil(t, err) 35 s.assertOutputLineMatch(regexp.MustCompile(`COMPONENT\s+NAME\s+VALUE`)) 36 s.assertOutputLineMatch(regexp.MustCompile(`service2\s+cpu\s+"50m"`)) 37 s.assertOutputLineMatch(regexp.MustCompile(`service2\s+memory\s+"8Gi"`)) 38 s.assertOutputLineMatch(regexp.MustCompile(`service2\s+longVal\s+"a real\.\.\.`)) 39 } 40 41 func TestParamListFilter(t *testing.T) { 42 s := newScaffold(t) 43 defer s.reset() 44 err := s.executeCommand("param", "list", "dev", "-C", "service2") 45 require.Nil(t, err) 46 s.assertOutputLineMatch(regexp.MustCompile(`COMPONENT\s+NAME\s+VALUE`)) 47 s.assertOutputLineNoMatch(regexp.MustCompile(`service2`)) 48 } 49 50 func TestParamListYAML(t *testing.T) { 51 s := newScaffold(t) 52 defer s.reset() 53 err := s.executeCommand("param", "list", "dev", "-o", "yaml") 54 require.Nil(t, err) 55 out, err := s.yamlOutput() 56 require.Nil(t, err) 57 assert.True(t, len(out) > 0) 58 } 59 60 func TestParamListJSON(t *testing.T) { 61 s := newScaffold(t) 62 defer s.reset() 63 err := s.executeCommand("param", "list", "dev", "-o", "json") 64 require.Nil(t, err) 65 var data interface{} 66 err = s.jsonOutput(&data) 67 require.Nil(t, err) 68 } 69 70 func TestParamDiffBasic(t *testing.T) { 71 s := newScaffold(t) 72 defer s.reset() 73 err := s.executeCommand("param", "diff", "dev") 74 require.Nil(t, err) 75 s.assertOutputLineMatch(regexp.MustCompile(`--- baseline`)) 76 s.assertOutputLineMatch(regexp.MustCompile(`\+\+\+ environment: dev`)) 77 s.assertOutputLineMatch(regexp.MustCompile(`-service2\s+cpu\s+"100m"`)) 78 s.assertOutputLineMatch(regexp.MustCompile(`\+service2\s+cpu\s+"50m"`)) 79 } 80 81 func TestParamDiff2Envs(t *testing.T) { 82 s := newScaffold(t) 83 defer s.reset() 84 err := s.executeCommand("params", "diff", "dev", "prod") 85 require.Nil(t, err) 86 s.assertOutputLineMatch(regexp.MustCompile(`--- environment: dev`)) 87 s.assertOutputLineMatch(regexp.MustCompile(`\+\+\+ environment: prod`)) 88 s.assertOutputLineMatch(regexp.MustCompile(`-service1\s+cpu\s+"10m"`)) 89 s.assertOutputLineMatch(regexp.MustCompile(`\+service1\s+cpu\s+"1"`)) 90 } 91 92 func TestParamNegative(t *testing.T) { 93 tests := []struct { 94 name string 95 args []string 96 asserter func(s *scaffold, err error) 97 }{ 98 { 99 name: "list no env", 100 args: []string{"param", "list"}, 101 asserter: func(s *scaffold, err error) { 102 a := assert.New(s.t) 103 a.True(isUsageError(err)) 104 a.Equal("exactly one environment required", err.Error()) 105 }, 106 }, 107 { 108 name: "list 2 envs", 109 args: []string{"param", "list", "dev", "prod"}, 110 asserter: func(s *scaffold, err error) { 111 a := assert.New(s.t) 112 a.True(isUsageError(err)) 113 a.Equal("exactly one environment required", err.Error()) 114 }, 115 }, 116 { 117 name: "list bad format", 118 args: []string{"param", "list", "dev", "-o", "table"}, 119 asserter: func(s *scaffold, err error) { 120 a := assert.New(s.t) 121 a.True(isUsageError(err)) 122 a.Equal(`listParams: unsupported format "table"`, err.Error()) 123 }, 124 }, 125 { 126 name: "list bad env", 127 args: []string{"param", "list", "foo"}, 128 asserter: func(s *scaffold, err error) { 129 a := assert.New(s.t) 130 a.False(isUsageError(err)) 131 a.Equal(`invalid environment "foo"`, err.Error()) 132 }, 133 }, 134 { 135 name: "diff no env", 136 args: []string{"param", "diff"}, 137 asserter: func(s *scaffold, err error) { 138 a := assert.New(s.t) 139 a.True(isUsageError(err)) 140 a.Equal(`one or two environments required`, err.Error()) 141 }, 142 }, 143 { 144 name: "diff 3 envs", 145 args: []string{"param", "diff", "dev", "prod", "_"}, 146 asserter: func(s *scaffold, err error) { 147 a := assert.New(s.t) 148 a.True(isUsageError(err)) 149 a.Equal(`one or two environments required`, err.Error()) 150 }, 151 }, 152 { 153 name: "diff bad envs", 154 args: []string{"param", "diff", "foo"}, 155 asserter: func(s *scaffold, err error) { 156 a := assert.New(s.t) 157 a.False(isUsageError(err)) 158 a.Equal(`invalid environment "foo"`, err.Error()) 159 }, 160 }, 161 { 162 name: "diff bad envs2", 163 args: []string{"param", "diff", "dev", "foo"}, 164 asserter: func(s *scaffold, err error) { 165 a := assert.New(s.t) 166 a.False(isUsageError(err)) 167 a.Equal(`invalid environment "foo"`, err.Error()) 168 }, 169 }, 170 } 171 172 for _, test := range tests { 173 t.Run(test.name, func(t *testing.T) { 174 s := newScaffold(t) 175 defer s.reset() 176 err := s.executeCommand(test.args...) 177 require.NotNil(t, err) 178 test.asserter(s, err) 179 }) 180 } 181 }