Skip to content

Commit f72a113

Browse files
cfergeauanjannath
authored andcommitted
config: Add unit test for set/unset preset
This checks that CPU/memory are updated as needed when moving from one preset to another. If CPU/memory are invalid for the new preset, the config code should reset them to their default value.
1 parent ab91360 commit f72a113

File tree

2 files changed

+162
-1
lines changed

2 files changed

+162
-1
lines changed

pkg/crc/config/settings_test.go

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package config
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/crc-org/crc/pkg/crc/constants"
8+
crcpreset "github.com/crc-org/crc/pkg/crc/preset"
9+
"github.com/crc-org/crc/pkg/crc/version"
10+
11+
"github.com/spf13/cast"
12+
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/require"
14+
)
15+
16+
// override for ValidateMemory in validations.go to disable the physical memory check
17+
func validateMemoryNoPhysicalCheck(value interface{}, preset crcpreset.Preset) (bool, string) {
18+
v, err := cast.ToIntE(value)
19+
if err != nil {
20+
return false, fmt.Sprintf("requires integer value in MiB >= %d", constants.GetDefaultMemory(preset))
21+
}
22+
if v < constants.GetDefaultMemory(preset) {
23+
return false, fmt.Sprintf("requires memory in MiB >= %d", constants.GetDefaultMemory(preset))
24+
}
25+
return true, ""
26+
}
27+
28+
func newInMemoryConfig() (*Config, error) {
29+
ValidateMemory = validateMemoryNoPhysicalCheck
30+
cfg := New(NewEmptyInMemoryStorage(), NewEmptyInMemorySecretStorage())
31+
32+
RegisterSettings(cfg)
33+
34+
return cfg, nil
35+
}
36+
37+
// Check that with the default preset, we cannot set less CPUs than the defaultCPUs
38+
// but that it is allowed with a different preset with less requirements (podman)
39+
func TestCPUsValidate(t *testing.T) {
40+
cfg, err := newInMemoryConfig()
41+
require.NoError(t, err)
42+
43+
assert.Equal(t, SettingValue{
44+
Value: version.GetDefaultPreset().String(),
45+
Invalid: false,
46+
IsDefault: true,
47+
IsSecret: false,
48+
}, cfg.Get(Preset))
49+
50+
defaultCPUs := constants.GetDefaultCPUs(version.GetDefaultPreset())
51+
_, err = cfg.Set(CPUs, defaultCPUs-1)
52+
require.Error(t, err)
53+
assert.Equal(t, SettingValue{
54+
Value: defaultCPUs,
55+
Invalid: false,
56+
IsDefault: true,
57+
IsSecret: false,
58+
}, cfg.Get(CPUs))
59+
60+
_, err = cfg.Set(Preset, crcpreset.Podman)
61+
require.NoError(t, err)
62+
_, err = cfg.Set(CPUs, defaultCPUs-1)
63+
require.NoError(t, err)
64+
assert.Equal(t, SettingValue{
65+
Value: defaultCPUs - 1,
66+
Invalid: false,
67+
IsDefault: false,
68+
IsSecret: false,
69+
}, cfg.Get(CPUs))
70+
}
71+
72+
// Check that when changing preset, invalid memory values are reset to their
73+
// default value
74+
func TestSetPreset(t *testing.T) {
75+
cfg, err := newInMemoryConfig()
76+
require.NoError(t, err)
77+
78+
_, err = cfg.Set(Preset, crcpreset.Podman)
79+
require.NoError(t, err)
80+
_, err = cfg.Set(Memory, 10000)
81+
require.NoError(t, err)
82+
assert.Equal(t, SettingValue{
83+
Value: 10000,
84+
Invalid: false,
85+
IsDefault: false,
86+
IsSecret: false,
87+
}, cfg.Get(Memory))
88+
_, err = cfg.Set(CPUs, 3)
89+
require.NoError(t, err)
90+
assert.Equal(t, SettingValue{
91+
Value: 3,
92+
Invalid: false,
93+
IsDefault: false,
94+
IsSecret: false,
95+
}, cfg.Get(CPUs))
96+
97+
// Changing the preset to 'openshift' should reset the CPUs config value
98+
_, err = cfg.Set(Preset, crcpreset.OpenShift)
99+
require.NoError(t, err)
100+
assert.Equal(t, SettingValue{
101+
Value: 10000,
102+
Invalid: false,
103+
IsDefault: false,
104+
IsSecret: false,
105+
}, cfg.Get(Memory))
106+
assert.Equal(t, SettingValue{
107+
Value: 4,
108+
Invalid: false,
109+
IsDefault: true,
110+
IsSecret: false,
111+
}, cfg.Get(CPUs))
112+
}
113+
114+
// Check that when unsetting preset, invalid memory values are reset to their
115+
// default value
116+
func TestUnsetPreset(t *testing.T) {
117+
cfg, err := newInMemoryConfig()
118+
require.NoError(t, err)
119+
120+
_, err = cfg.Set(Preset, crcpreset.Podman)
121+
require.NoError(t, err)
122+
_, err = cfg.Set(Memory, 10000)
123+
require.NoError(t, err)
124+
assert.Equal(t, SettingValue{
125+
Value: 10000,
126+
Invalid: false,
127+
IsDefault: false,
128+
IsSecret: false,
129+
}, cfg.Get(Memory))
130+
_, err = cfg.Set(CPUs, 3)
131+
require.NoError(t, err)
132+
assert.Equal(t, SettingValue{
133+
Value: 3,
134+
Invalid: false,
135+
IsDefault: false,
136+
IsSecret: false,
137+
}, cfg.Get(CPUs))
138+
139+
// Unsetting the preset should reset the CPUs config value
140+
_, err = cfg.Unset(Preset)
141+
require.NoError(t, err)
142+
assert.Equal(t, SettingValue{
143+
Value: crcpreset.OpenShift.String(),
144+
Invalid: false,
145+
IsDefault: true,
146+
IsSecret: false,
147+
}, cfg.Get(Preset))
148+
assert.Equal(t, SettingValue{
149+
Value: 10000,
150+
Invalid: false,
151+
IsDefault: false,
152+
IsSecret: false,
153+
}, cfg.Get(Memory))
154+
assert.Equal(t, SettingValue{
155+
Value: 4,
156+
Invalid: false,
157+
IsDefault: true,
158+
IsSecret: false,
159+
}, cfg.Get(CPUs))
160+
}

pkg/crc/config/validations.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ func ValidateCPUs(value interface{}, preset crcpreset.Preset) (bool, string) {
5454
}
5555

5656
// ValidateMemory checks if provided memory is valid in the config
57-
func ValidateMemory(value interface{}, preset crcpreset.Preset) (bool, string) {
57+
// It's defined as a variable so that it can be overridden in tests to disable the physical memory check
58+
var ValidateMemory = func(value interface{}, preset crcpreset.Preset) (bool, string) {
5859
v, err := cast.ToIntE(value)
5960
if err != nil {
6061
return false, fmt.Sprintf("requires integer value in MiB >= %d", constants.GetDefaultMemory(preset))

0 commit comments

Comments
 (0)