Skip to content

Commit 97ae030

Browse files
author
Moritz Clasmeier
committed
New tests
1 parent 43b27e0 commit 97ae030

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

cmd/deploy_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@ import (
77
"testing"
88
"time"
99

10+
"dario.cat/mergo"
1011
"github.com/stackrox/roxie/internal/deployer"
12+
"github.com/stackrox/roxie/internal/logger"
1113
"github.com/stackrox/roxie/internal/types"
14+
"github.com/stackrox/roxie/internal/xdg"
1215
"github.com/stretchr/testify/assert"
1316
"github.com/stretchr/testify/require"
17+
"gopkg.in/yaml.v3"
1418
)
1519

1620
func TestNewDeployCmd_Flags(t *testing.T) {
@@ -205,3 +209,95 @@ central:
205209
})
206210
}
207211
}
212+
213+
func TestApplyUserDefaults(t *testing.T) {
214+
log := logger.New()
215+
216+
tests := []struct {
217+
name string
218+
config deployer.Config
219+
user deployer.Config
220+
expected deployer.Config
221+
}{
222+
{
223+
name: "no config file leaves config unchanged",
224+
},
225+
{
226+
name: "fills empty fields from user defaults",
227+
config: deployer.Config{},
228+
user: deployer.Config{
229+
Roxie: deployer.RoxieConfig{Version: "4.5.0"},
230+
Operator: deployer.OperatorConfig{DeployViaOlm: true},
231+
},
232+
expected: deployer.Config{
233+
Roxie: deployer.RoxieConfig{Version: "4.5.0"},
234+
Operator: deployer.OperatorConfig{DeployViaOlm: true},
235+
},
236+
},
237+
{
238+
name: "user config overrides config defaults",
239+
config: deployer.Config{
240+
Roxie: deployer.RoxieConfig{
241+
Version: "4.9.2",
242+
},
243+
},
244+
user: deployer.Config{
245+
Roxie: deployer.RoxieConfig{
246+
Version: "4.5.0",
247+
},
248+
Operator: deployer.OperatorConfig{
249+
DeployViaOlm: true,
250+
},
251+
Central: deployer.CentralConfig{
252+
Namespace: "custom-namespace",
253+
},
254+
},
255+
expected: deployer.Config{
256+
Roxie: deployer.RoxieConfig{
257+
Version: "4.5.0",
258+
},
259+
Operator: deployer.OperatorConfig{
260+
DeployViaOlm: true,
261+
},
262+
Central: deployer.CentralConfig{
263+
Namespace: "custom-namespace",
264+
},
265+
},
266+
},
267+
}
268+
269+
for _, tt := range tests {
270+
t.Run(tt.name, func(t *testing.T) {
271+
t.Setenv("HOME", t.TempDir())
272+
273+
if !reflect.DeepEqual(tt.user, deployer.Config{}) {
274+
configPath, err := xdg.UserConfigPath()
275+
require.NoError(t, err)
276+
require.NoError(t, os.MkdirAll(filepath.Dir(configPath), 0o755))
277+
data, err := yaml.Marshal(tt.user)
278+
require.NoError(t, err)
279+
require.NoError(t, os.WriteFile(configPath, data, 0o644))
280+
}
281+
282+
cfg := deployer.NewConfig()
283+
require.NoError(t, mergo.Merge(&cfg, &tt.config, mergo.WithOverride, mergo.WithoutDereference))
284+
require.NoError(t, tryApplyUserDefaults(log, &cfg))
285+
286+
expected := deployer.NewConfig()
287+
require.NoError(t, mergo.Merge(&expected, &tt.expected, mergo.WithOverride, mergo.WithoutDereference))
288+
289+
assert.True(t, reflect.DeepEqual(expected, cfg), "expected %+v, got %+v", expected, cfg)
290+
})
291+
}
292+
293+
t.Run("returns error on invalid yaml", func(t *testing.T) {
294+
t.Setenv("HOME", t.TempDir())
295+
configPath, err := xdg.UserConfigPath()
296+
require.NoError(t, err)
297+
require.NoError(t, os.MkdirAll(filepath.Dir(configPath), 0o755))
298+
require.NoError(t, os.WriteFile(configPath, []byte(`invalid: [yaml`), 0o644))
299+
300+
cfg := deployer.NewConfig()
301+
assert.Error(t, tryApplyUserDefaults(log, &cfg))
302+
})
303+
}

0 commit comments

Comments
 (0)