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  }