Skip to content

Commit

Permalink
fix: match the previous behavior and write some unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Stockton committed Sep 25, 2024
1 parent 481d387 commit a02b4aa
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 22 deletions.
2 changes: 1 addition & 1 deletion internal/conf/rate.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func (r *Rate) EventsPerSecond() float64 {
func (r *Rate) Decode(value string) error {
if f, err := strconv.ParseFloat(value, 64); err == nil {
r.Events = f
// r.OverTime remains 0 in this case
r.OverTime = time.Second
return nil
}
parts := strings.Split(value, "/")
Expand Down
63 changes: 42 additions & 21 deletions internal/conf/rate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,46 @@ import (
)

func TestRateDecode(t *testing.T) {
r := Rate{}

r = Rate{}
require.NoError(t, r.Decode("123.0"))
require.Equal(t, r, Rate{Events: 123.0, OverTime: 0})

r = Rate{}
require.NoError(t, r.Decode("123/24h"))
require.Equal(t, r, Rate{Events: 123.0, OverTime: 24 * time.Hour})

r = Rate{}
require.Error(t, r.Decode("not a number"))

r = Rate{}
require.Error(t, r.Decode("123.0/24h")) // events are integers only

r = Rate{}
require.Error(t, r.Decode("123/456/789"))

r = Rate{}
require.Error(t, r.Decode("123/text"))
cases := []struct {
str string
eps float64
exp Rate
err string
}{
{str: "100", eps: 100, exp: Rate{Events: 100, OverTime: time.Second}},
{str: "100.0", eps: 100, exp: Rate{Events: 100, OverTime: time.Second}},
{str: "3600/1h", eps: 1, exp: Rate{Events: 3600, OverTime: time.Hour}},
{str: "100/24h",
eps: 0.0011574074074074073,
exp: Rate{Events: 100, OverTime: time.Hour * 24}},

{str: "", eps: 1, exp: Rate{},
err: `rate: value does not match`},
{str: "1h", eps: 1, exp: Rate{},
err: `rate: value does not match`},
{str: "/", eps: 1, exp: Rate{},
err: `rate: events part of rate value`},
{str: "/1h", eps: 1, exp: Rate{},
err: `rate: events part of rate value`},
{str: "3600.0/1h", eps: 1, exp: Rate{},
err: `rate: events part of rate value "3600.0/1h" failed to parse`},
{str: "100/", eps: 1, exp: Rate{},
err: `rate: over-time part of rate value`},
{str: "100/1", eps: 1, exp: Rate{},
err: `rate: over-time part of rate value`},
}
for idx, tc := range cases {
var r Rate
err := r.Decode(tc.str)
require.Equal(t, tc.exp, r) // verify don't mutate r on errr
t.Logf("tc #%v - duration str %v", idx, tc.str)
if tc.err != "" {
require.Error(t, err)
require.Contains(t, err.Error(), tc.err)
continue
}
require.NoError(t, err)
require.Equal(t, tc.exp, r)
require.Equal(t, tc.eps, r.EventsPerSecond())
}
}

0 comments on commit a02b4aa

Please sign in to comment.