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  }