118 lines
2.5 KiB
Go
118 lines
2.5 KiB
Go
package tsm1_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/v2/models"
|
|
"github.com/influxdata/influxdb/v2/tsdb"
|
|
"github.com/influxdata/influxdb/v2/tsdb/cursors"
|
|
)
|
|
|
|
func TestEngine_CursorIterator_Stats(t *testing.T) {
|
|
e := MustOpenEngine(t)
|
|
defer e.Close()
|
|
|
|
points := []models.Point{
|
|
models.MustNewPoint("cpu",
|
|
models.Tags{
|
|
{Key: []byte("a"), Value: []byte("b")},
|
|
},
|
|
models.Fields{"value": 4.6},
|
|
time.Now().UTC(),
|
|
),
|
|
models.MustNewPoint("cpu",
|
|
models.Tags{
|
|
{Key: []byte("a"), Value: []byte("b")},
|
|
},
|
|
models.Fields{"value": 3.2},
|
|
time.Now().UTC(),
|
|
),
|
|
models.MustNewPoint("mem",
|
|
models.Tags{
|
|
{Key: []byte("b"), Value: []byte("c")},
|
|
},
|
|
models.Fields{"value": int64(3)},
|
|
time.Now().UTC(),
|
|
),
|
|
}
|
|
|
|
// Write into the index.
|
|
collection := tsdb.NewSeriesCollection(points)
|
|
if err := e.index.CreateSeriesListIfNotExists(collection); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if err := e.WritePoints(points); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
e.MustWriteSnapshot()
|
|
|
|
ctx := context.Background()
|
|
cursorIterator, err := e.CreateCursorIterator(ctx)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
cur, err := cursorIterator.Next(ctx, &cursors.CursorRequest{
|
|
Name: []byte("cpu"),
|
|
Tags: []models.Tag{{Key: []byte("a"), Value: []byte("b")}},
|
|
Field: "value",
|
|
EndTime: time.Now().UTC().UnixNano(),
|
|
Ascending: true,
|
|
})
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if cur == nil {
|
|
t.Fatal("expected cursor to be present")
|
|
}
|
|
|
|
fc, ok := cur.(cursors.FloatArrayCursor)
|
|
if !ok {
|
|
t.Fatalf("unexpected cursor type: expected FloatArrayCursor, got %#v", cur)
|
|
}
|
|
|
|
// drain the cursor
|
|
for a := fc.Next(); a.Len() > 0; a = fc.Next() {
|
|
}
|
|
|
|
cur.Close()
|
|
|
|
cur, err = cursorIterator.Next(ctx, &cursors.CursorRequest{
|
|
Name: []byte("mem"),
|
|
Tags: []models.Tag{{Key: []byte("b"), Value: []byte("c")}},
|
|
Field: "value",
|
|
EndTime: time.Now().UTC().UnixNano(),
|
|
Ascending: true,
|
|
})
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if cur == nil {
|
|
t.Fatal("expected cursor to be present")
|
|
}
|
|
|
|
defer cur.Close()
|
|
|
|
ic, ok := cur.(cursors.IntegerArrayCursor)
|
|
if !ok {
|
|
t.Fatalf("unexpected cursor type: expected FloatArrayCursor, got %#v", cur)
|
|
}
|
|
|
|
// drain the cursor
|
|
for a := ic.Next(); a.Len() > 0; a = ic.Next() {
|
|
}
|
|
|
|
// iterator should report integer array stats
|
|
if got, exp := cursorIterator.Stats(), (cursors.CursorStats{ScannedValues: 3, ScannedBytes: 24}); exp != got {
|
|
t.Fatalf("expected %v, got %v", exp, got)
|
|
}
|
|
}
|