Skip to content

Commit c996323

Browse files
author
Moritz Clasmeier
committed
New tests
1 parent 1eceb0b commit c996323

1 file changed

Lines changed: 98 additions & 0 deletions

File tree

cmd/deploy_test.go

Lines changed: 98 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,97 @@ 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 any config fields including 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+
tmpDir := t.TempDir()
272+
t.Setenv("XDG_CONFIG_HOME", tmpDir)
273+
t.Setenv("HOME", tmpDir) // For non-Unix systems.
274+
275+
if !reflect.DeepEqual(tt.user, deployer.Config{}) {
276+
configPath, err := xdg.UserConfigPath()
277+
require.NoError(t, err)
278+
require.NoError(t, os.MkdirAll(filepath.Dir(configPath), 0o755))
279+
data, err := yaml.Marshal(tt.user)
280+
require.NoError(t, err)
281+
require.NoError(t, os.WriteFile(configPath, data, 0o644))
282+
}
283+
284+
cfg := deployer.NewConfig()
285+
require.NoError(t, mergo.Merge(&cfg, &tt.config, mergo.WithOverride, mergo.WithoutDereference))
286+
require.NoError(t, tryApplyUserDefaults(log, &cfg))
287+
288+
expected := deployer.NewConfig()
289+
require.NoError(t, mergo.Merge(&expected, &tt.expected, mergo.WithOverride, mergo.WithoutDereference))
290+
291+
assert.True(t, reflect.DeepEqual(expected, cfg), "expected %+v, got %+v", expected, cfg)
292+
})
293+
}
294+
295+
t.Run("returns error on invalid yaml", func(t *testing.T) {
296+
t.Setenv("HOME", t.TempDir())
297+
configPath, err := xdg.UserConfigPath()
298+
require.NoError(t, err)
299+
require.NoError(t, os.MkdirAll(filepath.Dir(configPath), 0o755))
300+
require.NoError(t, os.WriteFile(configPath, []byte(`invalid: [yaml`), 0o644))
301+
302+
cfg := deployer.NewConfig()
303+
assert.Error(t, tryApplyUserDefaults(log, &cfg))
304+
})
305+
}

0 commit comments

Comments
 (0)