69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
package conf
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestRateDecode(t *testing.T) {
|
|
cases := []struct {
|
|
str string
|
|
exp Rate
|
|
err string
|
|
}{
|
|
{str: "1800",
|
|
exp: Rate{Events: 1800, OverTime: time.Hour, typ: IntervalRateType}},
|
|
{str: "1800.0",
|
|
exp: Rate{Events: 1800, OverTime: time.Hour, typ: IntervalRateType}},
|
|
{str: "3600/1h",
|
|
exp: Rate{Events: 3600, OverTime: time.Hour, typ: BurstRateType}},
|
|
{str: "3600/1h0m0s",
|
|
exp: Rate{Events: 3600, OverTime: time.Hour, typ: BurstRateType}},
|
|
{str: "100/24h",
|
|
exp: Rate{Events: 100, OverTime: time.Hour * 24, typ: BurstRateType}},
|
|
{str: "", exp: Rate{},
|
|
err: `rate: value does not match`},
|
|
{str: "1h", exp: Rate{},
|
|
err: `rate: value does not match`},
|
|
{str: "/", exp: Rate{},
|
|
err: `rate: events part of rate value`},
|
|
{str: "/1h", exp: Rate{},
|
|
err: `rate: events part of rate value`},
|
|
{str: "3600.0/1h", exp: Rate{},
|
|
err: `rate: events part of rate value "3600.0/1h" failed to parse`},
|
|
{str: "100/", exp: Rate{},
|
|
err: `rate: over-time part of rate value`},
|
|
{str: "100/1", exp: Rate{},
|
|
err: `rate: over-time part of rate value`},
|
|
|
|
// zero events
|
|
{str: "0/1h",
|
|
exp: Rate{Events: 0, OverTime: time.Hour, typ: BurstRateType}},
|
|
{str: "0/24h",
|
|
exp: Rate{Events: 0, OverTime: time.Hour * 24, typ: BurstRateType}},
|
|
}
|
|
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.exp.typ, r.GetRateType())
|
|
}
|
|
|
|
// GetRateType() zero value
|
|
require.Equal(t, IntervalRateType, (&Rate{}).GetRateType())
|
|
|
|
// String()
|
|
require.Equal(t, "0.000000", (&Rate{}).String())
|
|
require.Equal(t, "100/1h0m0s", (&Rate{Events: 100, OverTime: time.Hour}).String())
|
|
}
|