github.com/grafana/pyroscope@v1.18.0/pkg/operations/model_test.go (about) 1 package operations 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func Test_readQuery(t *testing.T) { 13 tests := []struct { 14 name string 15 args *http.Request 16 want *blockQuery 17 }{ 18 { 19 name: "happy path", 20 args: httptest.NewRequest("GET", "/test?queryFrom=now-2h&queryTo=now&includeDeleted=true", nil), 21 want: &blockQuery{From: "now-2h", To: "now", IncludeDeleted: true, parsedFrom: time.Now().Add(-2 * time.Hour), parsedTo: time.Now()}, 22 }, 23 { 24 name: "defaults", 25 args: httptest.NewRequest("GET", "/test", nil), 26 want: &blockQuery{From: "now-24h", To: "now", IncludeDeleted: false, parsedFrom: time.Now().Add(-24 * time.Hour), parsedTo: time.Now()}, 27 }, 28 { 29 name: "absolute time format", 30 args: httptest.NewRequest("GET", "/test?queryFrom=2006-01-02T15:04:05Z", nil), 31 want: &blockQuery{From: "2006-01-02T15:04:05Z", To: "now", IncludeDeleted: false, parsedFrom: time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC), parsedTo: time.Now()}, 32 }, 33 } 34 for _, tt := range tests { 35 t.Run(tt.name, func(t *testing.T) { 36 assertQueriesEqual(t, tt.want, readQuery(tt.args)) 37 }) 38 } 39 } 40 41 func assertQueriesEqual(t *testing.T, a, b *blockQuery) { 42 assert.Equal(t, a.From, b.From) 43 assert.Equal(t, a.To, b.To) 44 assert.Equal(t, a.IncludeDeleted, b.IncludeDeleted) 45 46 assert.WithinDuration(t, a.parsedFrom, b.parsedFrom, 1*time.Second) 47 assert.WithinDuration(t, a.parsedTo, b.parsedTo, 1*time.Second) 48 } 49 50 func Test_sortBlockGroups(t *testing.T) { 51 tests := []struct { 52 name string 53 input []*blockGroup 54 want []*blockGroup 55 }{ 56 { 57 name: "basic", 58 input: []*blockGroup{ 59 {MinTime: time.Date(2020, 1, 1, 12, 45, 0, 9, time.UTC)}, 60 {MinTime: time.Date(2020, 1, 1, 12, 45, 0, 0, time.UTC)}, 61 {MinTime: time.Date(2020, 1, 2, 13, 45, 67, 0, time.UTC)}, 62 {MinTime: time.Date(2020, 1, 2, 13, 45, 0, 0, time.UTC)}, 63 {MinTime: time.Date(2020, 1, 1, 13, 45, 0, 0, time.UTC)}, 64 }, 65 want: []*blockGroup{ 66 {MinTime: time.Date(2020, 1, 2, 13, 45, 67, 0, time.UTC)}, 67 {MinTime: time.Date(2020, 1, 2, 13, 45, 0, 0, time.UTC)}, 68 {MinTime: time.Date(2020, 1, 1, 13, 45, 0, 0, time.UTC)}, 69 {MinTime: time.Date(2020, 1, 1, 12, 45, 0, 9, time.UTC)}, 70 {MinTime: time.Date(2020, 1, 1, 12, 45, 0, 0, time.UTC)}, 71 }, 72 }, 73 } 74 for _, tt := range tests { 75 t.Run(tt.name, func(t *testing.T) { 76 sortBlockGroupsByMinTimeDec(tt.input) 77 assert.Equal(t, tt.want, tt.input) 78 }) 79 } 80 } 81 82 func Test_sortBlockDetails(t *testing.T) { 83 tests := []struct { 84 name string 85 input []*blockDetails 86 want []*blockDetails 87 }{ 88 { 89 name: "basic", 90 input: []*blockDetails{ 91 {MinTime: "2020-01-02T15:04:05Z"}, 92 {MinTime: "2020-03-02T15:04:05Z"}, 93 {MinTime: "2020-03-03T15:04:05Z"}, 94 {MinTime: "2020-01-45T15:04:05Z"}, 95 {MinTime: "2020-01-02T15:04:55Z"}, 96 }, 97 want: []*blockDetails{ 98 {MinTime: "2020-03-03T15:04:05Z"}, 99 {MinTime: "2020-03-02T15:04:05Z"}, 100 {MinTime: "2020-01-45T15:04:05Z"}, 101 {MinTime: "2020-01-02T15:04:55Z"}, 102 {MinTime: "2020-01-02T15:04:05Z"}, 103 }, 104 }, 105 } 106 for _, tt := range tests { 107 t.Run(tt.name, func(t *testing.T) { 108 sortBlockDetailsByMinTimeDec(tt.input) 109 assert.Equal(t, tt.want, tt.input) 110 }) 111 } 112 }