Skip to content

Commit 8a12db7

Browse files
authored
Merge pull request #34 from ncode/fix/required-flag-validation
Refine required flag validation
2 parents 76befe1 + f8b61b9 commit 8a12db7

5 files changed

Lines changed: 17 additions & 23 deletions

File tree

cmd/cleanup.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ var cleanupCmd = &cobra.Command{
4444
}
4545

4646
serviceID := cmd.InheritedFlags().Lookup("service-id").Value.String()
47+
if serviceID == "" {
48+
logger.Error("Service ID is required")
49+
return fmt.Errorf("service-id is required")
50+
}
4751
tagPrefix := cmd.InheritedFlags().Lookup("tag-prefix").Value.String()
4852

4953
t := tagit.New(

cmd/cleanup_test.go

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,7 @@ func TestCleanupCmd(t *testing.T) {
2222
name: "Missing required service-id",
2323
args: []string{"cleanup"},
2424
expectError: true,
25-
errorContains: "required flag(s)",
26-
},
27-
{
28-
name: "Missing required script (even though not used for cleanup)",
29-
args: []string{"cleanup", "--service-id=test-service"},
30-
expectError: true,
31-
errorContains: "required flag(s) \"script\" not set",
25+
errorContains: "service-id is required",
3226
},
3327
}
3428

@@ -38,9 +32,7 @@ func TestCleanupCmd(t *testing.T) {
3832
cmd := &cobra.Command{Use: "tagit"}
3933
cmd.PersistentFlags().StringP("consul-addr", "c", "127.0.0.1:8500", "consul address")
4034
cmd.PersistentFlags().StringP("service-id", "s", "", "consul service id")
41-
cmd.MarkPersistentFlagRequired("service-id")
4235
cmd.PersistentFlags().StringP("script", "x", "", "path to script used to generate tags")
43-
cmd.MarkPersistentFlagRequired("script")
4436
cmd.PersistentFlags().StringP("tag-prefix", "p", "tagged", "prefix to be added to tags")
4537
cmd.PersistentFlags().StringP("interval", "i", "60s", "interval to run the script")
4638
cmd.PersistentFlags().StringP("token", "t", "", "consul token")
@@ -63,8 +55,7 @@ func TestCleanupCmd(t *testing.T) {
6355
if tt.expectError {
6456
assert.Error(t, err)
6557
if tt.errorContains != "" {
66-
output := buf.String()
67-
assert.Contains(t, output, tt.errorContains)
58+
assert.Contains(t, err.Error(), tt.errorContains)
6859
}
6960
} else {
7061
assert.NoError(t, err)
@@ -100,7 +91,6 @@ func TestCleanupCmdFlagParsing(t *testing.T) {
10091
cmd.SetArgs([]string{
10192
"cleanup",
10293
"--service-id=test-service",
103-
"--script=/tmp/test.sh", // Required by root command
10494
"--tag-prefix=test",
10595
"--consul-addr=localhost:8500",
10696
"--token=test-token",
@@ -179,7 +169,6 @@ func TestCleanupCmdExecution(t *testing.T) {
179169
cmd.SetArgs([]string{
180170
"cleanup",
181171
"--service-id=test-service",
182-
"--script=/tmp/test.sh",
183172
"--consul-addr=" + tt.consulAddr,
184173
"--tag-prefix=test",
185174
})
@@ -229,7 +218,6 @@ func TestCleanupCmdFlagRetrieval(t *testing.T) {
229218
cmd.SetArgs([]string{
230219
"cleanup",
231220
"--service-id=test-service",
232-
"--script=/tmp/test.sh",
233221
"--consul-addr=localhost:9500",
234222
"--tag-prefix=test-prefix",
235223
"--token=test-token",
@@ -285,7 +273,6 @@ func TestCleanupCmdSuccessFlow(t *testing.T) {
285273
cmd.SetArgs([]string{
286274
"cleanup",
287275
"--service-id=test-service",
288-
"--script=/tmp/test.sh",
289276
"--consul-addr=localhost:8500",
290277
"--tag-prefix=test",
291278
"--token=secret-token",

cmd/root.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ func init() {
4444
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.tagit.yaml)")
4545
rootCmd.PersistentFlags().StringP("consul-addr", "c", "127.0.0.1:8500", "consul address")
4646
rootCmd.PersistentFlags().StringP("service-id", "s", "", "consul service id")
47-
rootCmd.MarkPersistentFlagRequired("service-id")
4847
rootCmd.PersistentFlags().StringP("script", "x", "", "path to script used to generate tags")
49-
rootCmd.MarkPersistentFlagRequired("script")
5048
rootCmd.PersistentFlags().StringP("tag-prefix", "p", "tagged", "prefix to be added to tags")
5149
rootCmd.PersistentFlags().StringP("interval", "i", "60s", "interval to run the script")
5250
rootCmd.PersistentFlags().StringP("token", "t", "", "consul token")

cmd/run.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,19 @@ example: tagit run -s my-super-service -x '/tmp/tag-role.sh'
8181
logger.Error("Failed to get service-id flag", "error", err)
8282
return err
8383
}
84+
if serviceID == "" {
85+
logger.Error("Service ID is required")
86+
return fmt.Errorf("service-id is required")
87+
}
8488
script, err := cmd.InheritedFlags().GetString("script")
8589
if err != nil {
8690
logger.Error("Failed to get script flag", "error", err)
8791
return err
8892
}
93+
if script == "" {
94+
logger.Error("Script is required")
95+
return fmt.Errorf("script is required")
96+
}
8997
tagPrefix, err := cmd.InheritedFlags().GetString("tag-prefix")
9098
if err != nil {
9199
logger.Error("Failed to get tag-prefix flag", "error", err)

cmd/run_test.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ func TestRunCmd(t *testing.T) {
3030
name: "Missing required service-id",
3131
args: []string{"run", "--script=/tmp/test.sh"},
3232
expectError: true,
33-
errorContains: "required flag(s) \"service-id\" not set",
33+
errorContains: "service-id is required",
3434
},
3535
{
3636
name: "Missing required script",
3737
args: []string{"run", "--service-id=test-service"},
3838
expectError: true,
39-
errorContains: "required flag(s) \"script\" not set",
39+
errorContains: "script is required",
4040
},
4141
{
4242
name: "Invalid interval format",
@@ -64,9 +64,7 @@ func TestRunCmd(t *testing.T) {
6464
cmd := &cobra.Command{Use: "tagit"}
6565
cmd.PersistentFlags().StringP("consul-addr", "c", "127.0.0.1:8500", "consul address")
6666
cmd.PersistentFlags().StringP("service-id", "s", "", "consul service id")
67-
cmd.MarkPersistentFlagRequired("service-id")
6867
cmd.PersistentFlags().StringP("script", "x", "", "path to script used to generate tags")
69-
cmd.MarkPersistentFlagRequired("script")
7068
cmd.PersistentFlags().StringP("tag-prefix", "p", "tagged", "prefix to be added to tags")
7169
cmd.PersistentFlags().StringP("interval", "i", "60s", "interval to run the script")
7270
cmd.PersistentFlags().StringP("token", "t", "", "consul token")
@@ -98,8 +96,7 @@ func TestRunCmd(t *testing.T) {
9896
if tt.expectError {
9997
assert.Error(t, err)
10098
if tt.errorContains != "" {
101-
output := buf.String()
102-
assert.Contains(t, output, tt.errorContains)
99+
assert.Contains(t, err.Error(), tt.errorContains)
103100
}
104101
} else {
105102
assert.NoError(t, err)

0 commit comments

Comments
 (0)