Skip to content

Commit 8d63286

Browse files
refactor(rabbitmq): refactor enum flag to use existing utils
1 parent a388f44 commit 8d63286

6 files changed

Lines changed: 35 additions & 168 deletions

File tree

internal/cmd/rabbitmq/instance/create/create.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,19 @@ const (
3232
metricsFrequencyFlag = "metrics-frequency"
3333
metricsPrefixFlag = "metrics-prefix"
3434
monitoringInstanceIdFlag = "monitoring-instance-id"
35-
pluginFlag = "plugin"
3635
sgwAclFlag = "acl"
3736
syslogFlag = "syslog"
3837
planIdFlag = "plan-id"
3938
planNameFlag = "plan-name"
4039
versionFlag = "version"
4140
)
4241

42+
var flagPlugins = flags.StringEnumSliceFlag(
43+
"plugin",
44+
rabbitmq.AllowedInstanceParametersPluginsInnerEnumValues,
45+
"plugins",
46+
)
47+
4348
type inputModel struct {
4449
*globalflags.GlobalFlagModel
4550
PlanName string
@@ -139,7 +144,7 @@ func configureFlags(cmd *cobra.Command) {
139144
cmd.Flags().Int32(metricsFrequencyFlag, 0, "Metrics frequency")
140145
cmd.Flags().String(metricsPrefixFlag, "", "Metrics prefix")
141146
cmd.Flags().Var(flags.UUIDFlag(), monitoringInstanceIdFlag, "Monitoring instance ID")
142-
cmd.Flags().StringSlice(pluginFlag, []string{}, "Plugin")
147+
flagPlugins.Register(cmd)
143148
cmd.Flags().Var(flags.CIDRSliceFlag(), sgwAclFlag, "List of IP networks in CIDR notation which are allowed to access this instance")
144149
cmd.Flags().StringSlice(syslogFlag, []string{}, "Syslog")
145150
cmd.Flags().Var(flags.UUIDFlag(), planIdFlag, "Plan ID")
@@ -179,7 +184,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
179184
Graphite: flags.FlagToStringPointer(p, cmd, graphiteFlag),
180185
MetricsFrequency: flags.FlagToInt32Pointer(p, cmd, metricsFrequencyFlag),
181186
MetricsPrefix: flags.FlagToStringPointer(p, cmd, metricsPrefixFlag),
182-
Plugin: flags.FlagToInstanceParametersPluginsInnerSliceValue(p, cmd, pluginFlag),
187+
Plugin: flagPlugins.Get(),
183188
SgwAcl: flags.FlagToStringSlicePointer(p, cmd, sgwAclFlag),
184189
Syslog: flags.FlagToStringSliceValue(p, cmd, syslogFlag),
185190
PlanId: planId,

internal/cmd/rabbitmq/instance/create/create_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]st
5555
metricsFrequencyFlag: "100",
5656
metricsPrefixFlag: "example-prefix",
5757
monitoringInstanceIdFlag: testMonitoringInstanceId,
58-
pluginFlag: "example-plugin",
58+
flagPlugins.Name(): string(rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT),
5959
sgwAclFlag: "198.51.100.14/24",
6060
syslogFlag: "example-syslog",
6161
planIdFlag: testPlanId,
@@ -79,7 +79,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
7979
MetricsFrequency: utils.Ptr(int32(100)),
8080
MetricsPrefix: utils.Ptr("example-prefix"),
8181
MonitoringInstanceId: utils.Ptr(testMonitoringInstanceId),
82-
Plugin: []rabbitmq.InstanceParametersPluginsInner{"example-plugin"},
82+
Plugin: []rabbitmq.InstanceParametersPluginsInner{rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT},
8383
SgwAcl: utils.Ptr([]string{"198.51.100.14/24"}),
8484
Syslog: []string{"example-syslog"},
8585
PlanId: utils.Ptr(testPlanId),
@@ -100,7 +100,7 @@ func fixtureRequest(mods ...func(request *rabbitmq.ApiCreateInstanceRequest)) ra
100100
MetricsFrequency: utils.Ptr(int32(100)),
101101
MetricsPrefix: utils.Ptr("example-prefix"),
102102
MonitoringInstanceId: utils.Ptr(testMonitoringInstanceId),
103-
Plugins: []rabbitmq.InstanceParametersPluginsInner{"example-plugin"},
103+
Plugins: []rabbitmq.InstanceParametersPluginsInner{rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT},
104104
SgwAcl: utils.Ptr("198.51.100.14/24"),
105105
Syslog: []string{"example-syslog"},
106106
},
@@ -259,11 +259,11 @@ func TestParseInput(t *testing.T) {
259259
{
260260
description: "repeated plugin flags",
261261
flagValues: fixtureFlagValues(),
262-
pluginValues: []string{"example-plugin-1", "example-plugin-2"},
262+
pluginValues: []string{string(rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT), string(rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_CONSISTENT_HASH_EXCHANGE)},
263263
isValid: true,
264264
expectedModel: fixtureInputModel(func(model *inputModel) {
265265
model.Plugin =
266-
append(model.Plugin, "example-plugin-1", "example-plugin-2")
266+
append(model.Plugin, rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT, rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_CONSISTENT_HASH_EXCHANGE)
267267
}),
268268
},
269269
{
@@ -281,9 +281,9 @@ func TestParseInput(t *testing.T) {
281281
for _, tt := range tests {
282282
t.Run(tt.description, func(t *testing.T) {
283283
testutils.TestParseInputWithAdditionalFlags(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, map[string][]string{
284-
sgwAclFlag: tt.sgwAclValues,
285-
syslogFlag: tt.syslogValues,
286-
pluginFlag: tt.pluginValues,
284+
sgwAclFlag: tt.sgwAclValues,
285+
syslogFlag: tt.syslogValues,
286+
flagPlugins.Name(): tt.pluginValues,
287287
}, tt.isValid)
288288
})
289289
}

internal/cmd/rabbitmq/instance/update/update.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,19 @@ const (
3333
metricsFrequencyFlag = "metrics-frequency"
3434
metricsPrefixFlag = "metrics-prefix"
3535
monitoringInstanceIdFlag = "monitoring-instance-id"
36-
pluginFlag = "plugin"
3736
sgwAclFlag = "acl"
3837
syslogFlag = "syslog"
3938
planIdFlag = "plan-id"
4039
planNameFlag = "plan-name"
4140
versionFlag = "version"
4241
)
4342

43+
var flagPlugins = flags.StringEnumSliceFlag(
44+
"plugin",
45+
rabbitmq.AllowedInstanceParametersPluginsInnerEnumValues,
46+
"plugins",
47+
)
48+
4449
type inputModel struct {
4550
*globalflags.GlobalFlagModel
4651
InstanceId string
@@ -141,7 +146,7 @@ func configureFlags(cmd *cobra.Command) {
141146
cmd.Flags().Int32(metricsFrequencyFlag, 0, "Metrics frequency")
142147
cmd.Flags().String(metricsPrefixFlag, "", "Metrics prefix")
143148
cmd.Flags().Var(flags.UUIDFlag(), monitoringInstanceIdFlag, "Monitoring instance ID")
144-
cmd.Flags().StringSlice(pluginFlag, []string{}, "Plugin")
149+
flagPlugins.Register(cmd)
145150
cmd.Flags().Var(flags.CIDRSliceFlag(), sgwAclFlag, "List of IP networks in CIDR notation which are allowed to access this instance")
146151
cmd.Flags().StringSlice(syslogFlag, []string{}, "Syslog")
147152
cmd.Flags().Var(flags.UUIDFlag(), planIdFlag, "Plan ID")
@@ -162,7 +167,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu
162167
graphite := flags.FlagToStringPointer(p, cmd, graphiteFlag)
163168
metricsFrequency := flags.FlagToInt32Pointer(p, cmd, metricsFrequencyFlag)
164169
metricsPrefix := flags.FlagToStringPointer(p, cmd, metricsPrefixFlag)
165-
plugin := flags.FlagToInstanceParametersPluginsInnerSliceValue(p, cmd, pluginFlag)
170+
plugin := flagPlugins.Get()
166171
sgwAcl := flags.FlagToStringSlicePointer(p, cmd, sgwAclFlag)
167172
syslog := flags.FlagToStringSliceValue(p, cmd, syslogFlag)
168173
planId := flags.FlagToStringPointer(p, cmd, planIdFlag)

internal/cmd/rabbitmq/instance/update/update_test.go

Lines changed: 11 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"testing"
77

88
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
9-
"github.com/stackitcloud/stackit-cli/internal/pkg/testparams"
9+
"github.com/stackitcloud/stackit-cli/internal/pkg/testutils"
1010
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1111

1212
"github.com/google/go-cmp/cmp"
@@ -63,7 +63,7 @@ func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]st
6363
metricsFrequencyFlag: "100",
6464
metricsPrefixFlag: "example-prefix",
6565
monitoringInstanceIdFlag: testMonitoringInstanceId,
66-
pluginFlag: "example-plugin",
66+
flagPlugins.Name(): string(rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT),
6767
sgwAclFlag: "198.51.100.14/24",
6868
syslogFlag: "example-syslog",
6969
planIdFlag: testPlanId,
@@ -87,7 +87,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
8787
MetricsFrequency: utils.Ptr(int32(100)),
8888
MetricsPrefix: utils.Ptr("example-prefix"),
8989
MonitoringInstanceId: utils.Ptr(testMonitoringInstanceId),
90-
Plugin: []rabbitmq.InstanceParametersPluginsInner{"example-plugin"},
90+
Plugin: []rabbitmq.InstanceParametersPluginsInner{rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT},
9191
SgwAcl: utils.Ptr([]string{"198.51.100.14/24"}),
9292
Syslog: []string{"example-syslog"},
9393
PlanId: utils.Ptr(testPlanId),
@@ -107,7 +107,7 @@ func fixtureRequest(mods ...func(request *rabbitmq.ApiPartialUpdateInstanceReque
107107
MetricsFrequency: utils.Ptr(int32(100)),
108108
MetricsPrefix: utils.Ptr("example-prefix"),
109109
MonitoringInstanceId: utils.Ptr(testMonitoringInstanceId),
110-
Plugins: []rabbitmq.InstanceParametersPluginsInner{"example-plugin"},
110+
Plugins: []rabbitmq.InstanceParametersPluginsInner{rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT},
111111
SgwAcl: utils.Ptr("198.51.100.14/24"),
112112
Syslog: []string{"example-syslog"},
113113
},
@@ -270,11 +270,11 @@ func TestParseInput(t *testing.T) {
270270
description: "repeated plugin flags",
271271
argValues: fixtureArgValues(),
272272
flagValues: fixtureFlagValues(),
273-
pluginValues: []string{"example-plugin-1", "example-plugin-2"},
273+
pluginValues: []string{string(rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT), string(rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_CONSISTENT_HASH_EXCHANGE)},
274274
isValid: true,
275275
expectedModel: fixtureInputModel(func(model *inputModel) {
276276
model.Plugin =
277-
append(model.Plugin, "example-plugin-1", "example-plugin-2")
277+
append(model.Plugin, rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_MQTT, rabbitmq.INSTANCEPARAMETERSPLUGINSINNER_RABBITMQ_CONSISTENT_HASH_EXCHANGE)
278278
}),
279279
},
280280
{
@@ -292,84 +292,11 @@ func TestParseInput(t *testing.T) {
292292

293293
for _, tt := range tests {
294294
t.Run(tt.description, func(t *testing.T) {
295-
params := testparams.NewTestParams()
296-
cmd := NewCmd(params.CmdParams)
297-
err := globalflags.Configure(cmd.Flags())
298-
if err != nil {
299-
t.Fatalf("configure global flags: %v", err)
300-
}
301-
302-
for flag, value := range tt.flagValues {
303-
err := cmd.Flags().Set(flag, value)
304-
if err != nil {
305-
if !tt.isValid {
306-
return
307-
}
308-
t.Fatalf("setting flag --%s=%s: %v", flag, value, err)
309-
}
310-
}
311-
312-
for _, value := range tt.sgwAclValues {
313-
err := cmd.Flags().Set(sgwAclFlag, value)
314-
if err != nil {
315-
if !tt.isValid {
316-
return
317-
}
318-
t.Fatalf("setting flag --%s=%s: %v", sgwAclFlag, value, err)
319-
}
320-
}
321-
322-
for _, value := range tt.pluginValues {
323-
err := cmd.Flags().Set(pluginFlag, value)
324-
if err != nil {
325-
if !tt.isValid {
326-
return
327-
}
328-
t.Fatalf("setting flag --%s=%s: %v", pluginFlag, value, err)
329-
}
330-
}
331-
332-
for _, value := range tt.syslogValues {
333-
err := cmd.Flags().Set(syslogFlag, value)
334-
if err != nil {
335-
if !tt.isValid {
336-
return
337-
}
338-
t.Fatalf("setting flag --%s=%s: %v", syslogFlag, value, err)
339-
}
340-
}
341-
342-
err = cmd.ValidateArgs(tt.argValues)
343-
if err != nil {
344-
if !tt.isValid {
345-
return
346-
}
347-
t.Fatalf("error validating args: %v", err)
348-
}
349-
350-
err = cmd.ValidateRequiredFlags()
351-
if err != nil {
352-
if !tt.isValid {
353-
return
354-
}
355-
t.Fatalf("error validating flags: %v", err)
356-
}
357-
358-
model, err := parseInput(params.Printer, cmd, tt.argValues)
359-
if err != nil {
360-
if !tt.isValid {
361-
return
362-
}
363-
t.Fatalf("error parsing flags: %v", err)
364-
}
365-
366-
if !tt.isValid {
367-
t.Fatalf("did not fail on invalid input")
368-
}
369-
diff := cmp.Diff(model, tt.expectedModel)
370-
if diff != "" {
371-
t.Fatalf("Data does not match: %s", diff)
372-
}
295+
testutils.TestParseInputWithAdditionalFlags(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, map[string][]string{
296+
sgwAclFlag: tt.sgwAclValues,
297+
syslogFlag: tt.syslogValues,
298+
flagPlugins.Name(): tt.pluginValues,
299+
}, tt.isValid)
373300
})
374301
}
375302
}

internal/pkg/flags/flag_to_value.go

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"time"
66

77
"github.com/spf13/cobra"
8-
rabbitmq "github.com/stackitcloud/stackit-sdk-go/services/rabbitmq/v2api"
98

109
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
1110
)
@@ -49,24 +48,6 @@ func FlagToStringSliceValue(p *print.Printer, cmd *cobra.Command, flag string) [
4948
return nil
5049
}
5150

52-
// Returns the flag's value as a []rabbitmq.InstanceParametersPluginsInner.
53-
// Returns nil if the flag is not set, if its value can not be converted to []rabbitmq.InstanceParametersPluginsInner, or if the flag does not exist.
54-
func FlagToInstanceParametersPluginsInnerSliceValue(p *print.Printer, cmd *cobra.Command, flag string) []rabbitmq.InstanceParametersPluginsInner {
55-
stringSlice, err := cmd.Flags().GetStringSlice(flag)
56-
if err != nil {
57-
p.Debug(print.ErrorLevel, "convert flag to string slice value: %v", err)
58-
return nil
59-
}
60-
value := make([]rabbitmq.InstanceParametersPluginsInner, len(stringSlice))
61-
for i, v := range stringSlice {
62-
value[i] = rabbitmq.InstanceParametersPluginsInner(v)
63-
}
64-
if cmd.Flag(flag).Changed {
65-
return value
66-
}
67-
return nil
68-
}
69-
7051
// Returns the flag's value as a []string.
7152
// Returns nil if flag is not set, if its value can not be converted to []string, or if the flag does not exist.
7253
func FlagToStringArrayValue(p *print.Printer, cmd *cobra.Command, flag string) []string {

internal/pkg/flags/flag_to_value_test.go

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77

88
"github.com/spf13/cobra"
99

10-
rabbitmq "github.com/stackitcloud/stackit-sdk-go/services/rabbitmq/v2api"
11-
1210
"github.com/stackitcloud/stackit-cli/internal/pkg/testparams"
1311
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1412
)
@@ -187,52 +185,3 @@ func TestFlagToInt32Pointer(t *testing.T) {
187185
})
188186
}
189187
}
190-
191-
func TestFlagToInstanceParametersPluginsInnerSliceValue(t *testing.T) {
192-
const flagName = "temp"
193-
tests := []struct {
194-
name string
195-
flagValues []string
196-
want []rabbitmq.InstanceParametersPluginsInner
197-
}{
198-
{
199-
name: "flag unset",
200-
flagValues: nil,
201-
want: nil,
202-
},
203-
{
204-
name: "flag value",
205-
flagValues: []string{"val1", "val2"},
206-
want: []rabbitmq.InstanceParametersPluginsInner{"val1", "val2"},
207-
},
208-
}
209-
for _, tt := range tests {
210-
t.Run(tt.name, func(t *testing.T) {
211-
params := testparams.NewTestParams()
212-
cmd := func() *cobra.Command {
213-
cmd := &cobra.Command{
214-
Use: "greet",
215-
Short: "A simple greeting command",
216-
Long: "A simple greeting command",
217-
Run: func(_ *cobra.Command, _ []string) {
218-
fmt.Println("Hello world")
219-
},
220-
}
221-
cmd.Flags().StringSlice(flagName, []string{}, "Plugin")
222-
return cmd
223-
}()
224-
// set the flag value if a value use given, else consider the flag unset
225-
if tt.flagValues != nil {
226-
for _, val := range tt.flagValues {
227-
err := cmd.Flags().Set(flagName, val)
228-
if err != nil {
229-
t.Error(err)
230-
}
231-
}
232-
}
233-
if got := FlagToInstanceParametersPluginsInnerSliceValue(params.Printer, cmd, flagName); !reflect.DeepEqual(got, tt.want) {
234-
t.Errorf("FlagToInstanceParametersPluginsInnerSliceValue() = %v, want %v", got, tt.want)
235-
}
236-
})
237-
}
238-
}

0 commit comments

Comments
 (0)