Skip to content

Commit 8995fe6

Browse files
authored
Merge pull request #389 from parca-dev/queryrange-integration-test
pkg/query: Create Test_QueryRange_Ranged
2 parents 9eb6977 + 48571ee commit 8995fe6

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

pkg/query/query_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,61 @@ func Test_QueryRange_Limited(t *testing.T) {
193193
}
194194
}
195195

196+
func Test_QueryRange_Ranged(t *testing.T) {
197+
ctx := context.Background()
198+
reg := prometheus.NewRegistry()
199+
logger := log.NewNopLogger()
200+
tracer := trace.NewNoopTracerProvider().Tracer("")
201+
202+
db := storage.OpenDB(reg, tracer, nil)
203+
s, err := metastore.NewInMemorySQLiteProfileMetaStore(
204+
reg,
205+
tracer,
206+
"queryrangeranged",
207+
)
208+
t.Cleanup(func() {
209+
s.Close()
210+
})
211+
require.NoError(t, err)
212+
213+
f, err := os.Open("testdata/alloc_objects.pb.gz")
214+
require.NoError(t, err)
215+
p, err := profile.Parse(f)
216+
require.NoError(t, err)
217+
218+
lset := labels.FromStrings("__name__", "allocs")
219+
220+
app, err := db.Appender(ctx, lset)
221+
require.NoError(t, err)
222+
223+
start := time.Now()
224+
225+
for i := 0; i < 500; i++ {
226+
p.TimeNanos = start.Add(time.Duration(i) * time.Second).UnixNano()
227+
pprof, err := storage.ProfileFromPprof(ctx, logger, s, p, 0)
228+
require.NoError(t, err)
229+
err = app.Append(ctx, pprof)
230+
require.NoError(t, err)
231+
}
232+
233+
q := New(logger, tracer, db, s)
234+
235+
resp, err := q.QueryRange(ctx, &pb.QueryRangeRequest{
236+
Query: "allocs",
237+
Start: timestamppb.New(start.Add(199 * time.Second)), // only 200 will be included
238+
End: timestamppb.New(start.Add(1000 * time.Second)),
239+
})
240+
require.NoError(t, err)
241+
require.NotEmpty(t, resp.Series)
242+
require.NotEmpty(t, resp.Series[0].Samples)
243+
244+
for i, s := range resp.Series[0].Samples {
245+
expectedTime := start.Add(time.Duration(200+i) * time.Second).Unix()
246+
require.Equal(t, expectedTime, s.Timestamp.GetSeconds(), "failed to find the correct timestamp in iteration: %d", i)
247+
require.Equal(t, int64(310797348), s.Value)
248+
}
249+
}
250+
196251
func Test_QueryRange_InputValidation(t *testing.T) {
197252
ctx := context.Background()
198253
end := time.Now()

pkg/storage/series_iterator_root.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ func (rs *MemRootSeries) Iterator() ProfileSeriesIterator {
6363

6464
// Set numSamples correctly if only subset selected.
6565
if end-start < numSamples {
66-
numSamples = end - start - 1
66+
// -1 for length to index
67+
// -1 for exclusive first sample
68+
numSamples = end - start - 2
6769
}
6870

6971
return &MemRootSeriesIterator{

pkg/storage/series_iterator_root_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func TestMemRootSeries_Iterator(t *testing.T) {
6868
}
6969

7070
require.NoError(t, it.Err())
71-
require.Equal(t, int64(420), it.At().ProfileMeta().Timestamp)
71+
require.Equal(t, int64(419), it.At().ProfileMeta().Timestamp)
7272
}
7373

7474
// Query everything

0 commit comments

Comments
 (0)