Skip to content

Commit 207b853

Browse files
committed
Make cli parsing testable
1 parent c95f6ca commit 207b853

3 files changed

Lines changed: 23 additions & 5 deletions

File tree

cmd/pi/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"fmt"
5+
"os"
56
"time"
67

78
"github.com/tygern/pi/internal/cli"
@@ -10,7 +11,7 @@ import (
1011
)
1112

1213
func main() {
13-
duration, numberOfWorkers := cli.ParseCommandLineArgs()
14+
duration, numberOfWorkers := cli.ParseCommandLineArgs(os.Args[1:])
1415

1516
ctx, cancel := cli.SigtermTimeoutContext(time.Duration(duration) * time.Second)
1617
defer cancel()

internal/cli/support.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ func SigtermTimeoutContext(timeout time.Duration) (context.Context, context.Canc
3232
return ctx, cancel
3333
}
3434

35-
func ParseCommandLineArgs() (duration, numberOfWorkers int) {
36-
flag.IntVar(&duration, "d", 20, "execution duration in seconds")
37-
flag.IntVar(&numberOfWorkers, "n", runtime.NumCPU(), "number of workers")
38-
flag.Parse()
35+
func ParseCommandLineArgs(arguments []string) (duration, numberOfWorkers int) {
36+
flagSet := flag.FlagSet{}
37+
flagSet.IntVar(&duration, "d", 20, "execution duration in seconds")
38+
flagSet.IntVar(&numberOfWorkers, "n", runtime.NumCPU(), "number of workers")
39+
flagSet.Parse(arguments)
40+
3941
fmt.Printf("Running for %d seconds with %d workers\n", duration, numberOfWorkers)
4042
return duration, numberOfWorkers
4143
}

internal/cli/support_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,23 @@ import (
77
"github.com/tygern/pi/internal/cli"
88
)
99

10+
func TestParseCommandLineArgs(t *testing.T) {
11+
duration, numberOfWorkers := cli.ParseCommandLineArgs([]string{"-d", "30", "-n", "15"})
12+
assert.Equal(t, 30, duration)
13+
assert.Equal(t, 15, numberOfWorkers)
14+
15+
defaultDuration, defaultNumberOfWorkers := cli.ParseCommandLineArgs([]string{})
16+
assert.Equal(t, 20, defaultDuration)
17+
assert.GreaterThanOrEqualTo(t, defaultNumberOfWorkers, 1)
18+
}
19+
1020
func TestPrettyPrint(t *testing.T) {
1121
assert.Equal(t, "2,300", cli.PrettyPrint(2300))
1222
assert.Equal(t, "22,300", cli.PrettyPrint(22300))
1323
assert.Equal(t, "222,300", cli.PrettyPrint(222300))
1424
}
25+
26+
func TestReport(t *testing.T) {
27+
assert.Equal(t, "π ≈ 3.141592600000 (10,000,000 iterations)", cli.Report(3.1415926, 10_000_000))
28+
assert.Equal(t, "π ≈ 3.000000000000 (4 iterations)", cli.Report(3, 4))
29+
}

0 commit comments

Comments
 (0)