influxdb/http/duration_test.go

88 lines
2.4 KiB
Go

package http
import (
"fmt"
"testing"
"time"
)
// Ensure a time duration can be parsed.
func TestParseDuration(t *testing.T) {
var tests = []struct {
s string
want time.Duration
wantErr bool
}{
{s: `10n`, want: 10 * time.Nanosecond},
{s: `10ns`, want: 10 * time.Nanosecond},
{s: `10u`, want: 10 * time.Microsecond},
{s: `10µ`, want: 10 * time.Microsecond},
{s: `10us`, want: 10 * time.Microsecond},
{s: `10µs`, want: 10 * time.Microsecond},
{s: `15ms`, want: 15 * time.Millisecond},
{s: `100s`, want: 100 * time.Second},
{s: `2m`, want: 2 * time.Minute},
{s: `2mo`, want: 2 * 30 * 24 * time.Hour},
{s: `2h`, want: 2 * time.Hour},
{s: `2d`, want: 2 * 24 * time.Hour},
{s: `2w`, want: 2 * 7 * 24 * time.Hour},
{s: `2y`, want: 2 * 365 * 24 * time.Hour},
{s: `1h30m`, want: time.Hour + 30*time.Minute},
{s: `30ms3000u`, want: 30*time.Millisecond + 3000*time.Microsecond},
{s: `-5s`, want: -5 * time.Second},
{s: `-5m30s`, want: -5*time.Minute - 30*time.Second},
{s: ``, wantErr: true},
{s: `3`, wantErr: true},
{s: `3mm`, wantErr: true},
{s: `3nm`, wantErr: true},
{s: `1000`, wantErr: true},
{s: `w`, wantErr: true},
{s: `ms`, wantErr: true},
{s: `1.2w`, wantErr: true},
{s: `10x`, wantErr: true},
}
for i, tt := range tests {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
got, err := ParseDuration(tt.s)
if (err != nil) != tt.wantErr {
t.Errorf("ParseDuration() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("ParseDuration() = %v, want %v", got, tt.want)
}
})
}
}
// Ensure a time duration can be formatted.
func TestFormatDuration(t *testing.T) {
var tests = []struct {
d time.Duration
want string
}{
{d: 3 * time.Nanosecond, want: `3ns`},
{d: 3 * time.Microsecond, want: `3us`},
{d: 1001 * time.Microsecond, want: `1001us`},
{d: 15 * time.Millisecond, want: `15ms`},
{d: 100 * time.Second, want: `100s`},
{d: 2 * time.Minute, want: `2m`},
{d: 2 * time.Hour, want: `2h`},
{d: 2 * 24 * time.Hour, want: `2d`},
{d: 2 * 7 * 24 * time.Hour, want: `2w`},
{d: 2 * 30 * 24 * time.Hour, want: `2mo`},
{d: 2 * 365 * 24 * time.Hour, want: `2y`},
}
for i, tt := range tests {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
got := FormatDuration(tt.d)
if got != tt.want {
t.Errorf("FormatDuration() = %s, want %s", got, tt.want)
}
})
}
}