github.com/grafana/pyroscope@v1.18.0/pkg/operations/time_test.go (about) 1 package operations 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestParseTime(t *testing.T) { 11 tests := []struct { 12 name string 13 args string 14 want time.Time 15 wantErr bool 16 }{ 17 {name: "relative time days", args: "now-7d", want: time.Now().Add(-24 * 7 * time.Hour)}, 18 {name: "relative time hours", args: "now-24h", want: time.Now().Add(-24 * time.Hour)}, 19 {name: "relative time minutes", args: "now-2h30m", want: time.Now().Add(-2 * time.Hour).Add(-30 * time.Minute)}, 20 {name: "relative time seconds", args: "now-2h30m45s", want: time.Now().Add(-2 * time.Hour).Add(-30 * time.Minute).Add(-45 * time.Second)}, 21 {name: "relative time wrong format", args: "24h-ago", wantErr: true}, 22 {name: "absolute time utc", args: "2006-01-02T15:04:05Z", want: time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)}, 23 {name: "absolute time utc with positive offset", args: "2006-01-02T15:04:05+04:00", want: time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC).Add(-4 * time.Hour)}, 24 {name: "absolute time utc with negative offset", args: "2006-01-02T15:04:05-04:00", want: time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC).Add(4 * time.Hour)}, 25 {name: "absolute time wrong format", args: "2006-01-02", wantErr: true}, 26 {name: "timestamp seconds", args: "1689341454", want: time.Date(2023, 7, 14, 13, 30, 54, 0, time.UTC)}, 27 {name: "timestamp milli", args: "1689341454046", want: time.Date(2023, 7, 14, 13, 30, 54, 0, time.UTC)}, 28 {name: "timestamp micro", args: "1689341454046908", want: time.Date(2023, 7, 14, 13, 30, 54, 0, time.UTC)}, 29 {name: "timestamp nano", args: "1689341454046908187", want: time.Date(2023, 7, 14, 13, 30, 54, 0, time.UTC)}, 30 {name: "timestamp wrong format", args: "16893", wantErr: true}, 31 } 32 for _, tt := range tests { 33 t.Run(tt.name, func(t *testing.T) { 34 got, err := ParseTime(tt.args) 35 if (err != nil) != tt.wantErr { 36 t.Errorf("ParseTime() error = %v, wantErr %v", err, tt.wantErr) 37 return 38 } 39 assert.WithinDuration(t, tt.want, got, 1*time.Second) 40 }) 41 } 42 }