Skip to content

Commit fdb8dcb

Browse files
committed
(feat): move from exit to return and Run to RunE to make things more testable
1 parent afd6207 commit fdb8dcb

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

cmd/cleanup.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ limitations under the License.
1616
package cmd
1717

1818
import (
19+
"fmt"
1920
"log/slog"
2021
"os"
2122

@@ -28,7 +29,7 @@ import (
2829
var cleanupCmd = &cobra.Command{
2930
Use: "cleanup",
3031
Short: "cleanup removes all services with the tag prefix from a given consul service",
31-
Run: func(cmd *cobra.Command, args []string) {
32+
RunE: func(cmd *cobra.Command, args []string) error {
3233
logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
3334
Level: slog.LevelInfo,
3435
}))
@@ -40,7 +41,7 @@ var cleanupCmd = &cobra.Command{
4041
consulClient, err := api.NewClient(config)
4142
if err != nil {
4243
logger.Error("Failed to create Consul client", "error", err)
43-
os.Exit(1)
44+
return fmt.Errorf("failed to create Consul client: %w", err)
4445
}
4546

4647
serviceID := cmd.InheritedFlags().Lookup("service-id").Value.String()
@@ -61,10 +62,11 @@ var cleanupCmd = &cobra.Command{
6162
err = t.CleanupTags()
6263
if err != nil {
6364
logger.Error("Failed to clean up tags", "error", err)
64-
os.Exit(1)
65+
return fmt.Errorf("failed to clean up tags: %w", err)
6566
}
6667

6768
logger.Info("Tag cleanup completed successfully")
69+
return nil
6870
},
6971
}
7072

cmd/cleanup_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func TestCleanupCmd(t *testing.T) {
4646
testCleanupCmd := &cobra.Command{
4747
Use: "cleanup",
4848
Short: "cleanup removes all services with the tag prefix",
49-
Run: cleanupCmd.Run,
49+
RunE: cleanupCmd.RunE,
5050
}
5151
cmd.AddCommand(testCleanupCmd)
5252

@@ -124,7 +124,7 @@ func TestCleanupCmdHelp(t *testing.T) {
124124
testCleanupCmd := &cobra.Command{
125125
Use: "cleanup",
126126
Short: "cleanup removes all services with the tag prefix from a given consul service",
127-
Run: cleanupCmd.Run,
127+
RunE: cleanupCmd.RunE,
128128
}
129129
cmd.AddCommand(testCleanupCmd)
130130

cmd/run.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package cmd
1717

1818
import (
1919
"context"
20+
"fmt"
2021
"log/slog"
2122
"os"
2223
"os/signal"
@@ -36,60 +37,60 @@ var runCmd = &cobra.Command{
3637
3738
example: tagit run -s my-super-service -x '/tmp/tag-role.sh'
3839
`,
39-
Run: func(cmd *cobra.Command, args []string) {
40+
RunE: func(cmd *cobra.Command, args []string) error {
4041
logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
4142
Level: slog.LevelInfo,
4243
}))
4344

4445
interval, err := cmd.InheritedFlags().GetString("interval")
4546
if err != nil {
4647
logger.Error("Failed to get interval flag", "error", err)
47-
os.Exit(1)
48+
return err
4849
}
4950

5051
if interval == "" || interval == "0" {
5152
logger.Error("Interval is required")
52-
os.Exit(1)
53+
return fmt.Errorf("interval is required and cannot be empty or zero")
5354
}
5455

5556
validInterval, err := time.ParseDuration(interval)
5657
if err != nil {
5758
logger.Error("Invalid interval", "interval", interval, "error", err)
58-
os.Exit(1)
59+
return fmt.Errorf("invalid interval %q: %w", interval, err)
5960
}
6061

6162
config := api.DefaultConfig()
6263
config.Address, err = cmd.InheritedFlags().GetString("consul-addr")
6364
if err != nil {
6465
logger.Error("Failed to get consul-addr flag", "error", err)
65-
os.Exit(1)
66+
return err
6667
}
6768
config.Token, err = cmd.InheritedFlags().GetString("token")
6869
if err != nil {
6970
logger.Error("Failed to get token flag", "error", err)
70-
os.Exit(1)
71+
return err
7172
}
7273

7374
consulClient, err := api.NewClient(config)
7475
if err != nil {
7576
logger.Error("Failed to create Consul client", "error", err)
76-
os.Exit(1)
77+
return fmt.Errorf("failed to create Consul client: %w", err)
7778
}
7879

7980
serviceID, err := cmd.InheritedFlags().GetString("service-id")
8081
if err != nil {
8182
logger.Error("Failed to get service-id flag", "error", err)
82-
os.Exit(1)
83+
return err
8384
}
8485
script, err := cmd.InheritedFlags().GetString("script")
8586
if err != nil {
8687
logger.Error("Failed to get script flag", "error", err)
87-
os.Exit(1)
88+
return err
8889
}
8990
tagPrefix, err := cmd.InheritedFlags().GetString("tag-prefix")
9091
if err != nil {
9192
logger.Error("Failed to get tag-prefix flag", "error", err)
92-
os.Exit(1)
93+
return err
9394
}
9495

9596
t := tagit.New(
@@ -124,6 +125,7 @@ example: tagit run -s my-super-service -x '/tmp/tag-role.sh'
124125
t.Run(ctx)
125126

126127
logger.Info("Tagit has stopped")
128+
return nil
127129
},
128130
}
129131

cmd/run_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ func TestRunCmd(t *testing.T) {
3434
expectError: true,
3535
errorContains: "required flag(s) \"script\" not set",
3636
},
37+
{
38+
name: "Invalid interval format",
39+
args: []string{"run", "--service-id=test-service", "--script=/tmp/test.sh", "--interval=invalid"},
40+
expectError: true,
41+
errorContains: "invalid interval",
42+
},
3743
}
3844

3945
for _, tt := range tests {
@@ -53,7 +59,7 @@ func TestRunCmd(t *testing.T) {
5359
testRunCmd := &cobra.Command{
5460
Use: "run",
5561
Short: "Run tagit",
56-
Run: runCmd.Run,
62+
RunE: runCmd.RunE,
5763
}
5864
cmd.AddCommand(testRunCmd)
5965

0 commit comments

Comments
 (0)