mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
126 lines
3.7 KiB
Go
126 lines
3.7 KiB
Go
|
package influxql_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/davecgh/go-spew/spew"
|
||
|
"github.com/influxdata/influxdb/influxql"
|
||
|
"github.com/influxdata/influxdb/models"
|
||
|
"github.com/influxdata/influxdb/pkg/deep"
|
||
|
)
|
||
|
|
||
|
// Ensure the emitter can group iterators together into rows.
|
||
|
func TestEmitter_Emit(t *testing.T) {
|
||
|
// Build an emitter that pulls from two iterators.
|
||
|
e := influxql.NewEmitter([]influxql.Iterator{
|
||
|
&FloatIterator{Points: []influxql.FloatPoint{
|
||
|
{Name: "cpu", Tags: ParseTags("region=west"), Time: 0, Value: 1},
|
||
|
{Name: "cpu", Tags: ParseTags("region=west"), Time: 1, Value: 2},
|
||
|
}},
|
||
|
&FloatIterator{Points: []influxql.FloatPoint{
|
||
|
{Name: "cpu", Tags: ParseTags("region=west"), Time: 1, Value: 4},
|
||
|
{Name: "cpu", Tags: ParseTags("region=north"), Time: 0, Value: 4},
|
||
|
{Name: "mem", Time: 4, Value: 5},
|
||
|
}},
|
||
|
}, true, 0)
|
||
|
e.Columns = []string{"col1", "col2"}
|
||
|
|
||
|
// Verify the cpu region=west is emitted first.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(0): %s", err)
|
||
|
} else if !deep.Equal(row, &models.Row{
|
||
|
Name: "cpu",
|
||
|
Tags: map[string]string{"region": "west"},
|
||
|
Columns: []string{"col1", "col2"},
|
||
|
Values: [][]interface{}{
|
||
|
{time.Unix(0, 0).UTC(), float64(1), nil},
|
||
|
{time.Unix(0, 1).UTC(), float64(2), float64(4)},
|
||
|
},
|
||
|
}) {
|
||
|
t.Fatalf("unexpected row(0): %s", spew.Sdump(row))
|
||
|
}
|
||
|
|
||
|
// Verify the cpu region=north is emitted next.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(1): %s", err)
|
||
|
} else if !deep.Equal(row, &models.Row{
|
||
|
Name: "cpu",
|
||
|
Tags: map[string]string{"region": "north"},
|
||
|
Columns: []string{"col1", "col2"},
|
||
|
Values: [][]interface{}{
|
||
|
{time.Unix(0, 0).UTC(), nil, float64(4)},
|
||
|
},
|
||
|
}) {
|
||
|
t.Fatalf("unexpected row(1): %s", spew.Sdump(row))
|
||
|
}
|
||
|
|
||
|
// Verify the mem series is emitted last.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(2): %s", err)
|
||
|
} else if !deep.Equal(row, &models.Row{
|
||
|
Name: "mem",
|
||
|
Columns: []string{"col1", "col2"},
|
||
|
Values: [][]interface{}{
|
||
|
{time.Unix(0, 4).UTC(), nil, float64(5)},
|
||
|
},
|
||
|
}) {
|
||
|
t.Fatalf("unexpected row(2): %s", spew.Sdump(row))
|
||
|
}
|
||
|
|
||
|
// Verify EOF.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(eof): %s", err)
|
||
|
} else if row != nil {
|
||
|
t.Fatalf("unexpected eof: %s", spew.Sdump(row))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Ensure the emitter will limit the chunked output from a series.
|
||
|
func TestEmitter_ChunkSize(t *testing.T) {
|
||
|
// Build an emitter that pulls from one iterator with multiple points in the same series.
|
||
|
e := influxql.NewEmitter([]influxql.Iterator{
|
||
|
&FloatIterator{Points: []influxql.FloatPoint{
|
||
|
{Name: "cpu", Tags: ParseTags("region=west"), Time: 0, Value: 1},
|
||
|
{Name: "cpu", Tags: ParseTags("region=west"), Time: 1, Value: 2},
|
||
|
}},
|
||
|
}, true, 1)
|
||
|
e.Columns = []string{"col1"}
|
||
|
|
||
|
// Verify the cpu region=west is emitted first.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(0): %s", err)
|
||
|
} else if !deep.Equal(row, &models.Row{
|
||
|
Name: "cpu",
|
||
|
Tags: map[string]string{"region": "west"},
|
||
|
Columns: []string{"col1"},
|
||
|
Values: [][]interface{}{
|
||
|
{time.Unix(0, 0).UTC(), float64(1)},
|
||
|
},
|
||
|
Partial: true,
|
||
|
}) {
|
||
|
t.Fatalf("unexpected row(0): %s", spew.Sdump(row))
|
||
|
}
|
||
|
|
||
|
// Verify the cpu region=north is emitted next.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(1): %s", err)
|
||
|
} else if !deep.Equal(row, &models.Row{
|
||
|
Name: "cpu",
|
||
|
Tags: map[string]string{"region": "west"},
|
||
|
Columns: []string{"col1"},
|
||
|
Values: [][]interface{}{
|
||
|
{time.Unix(0, 1).UTC(), float64(2)},
|
||
|
},
|
||
|
}) {
|
||
|
t.Fatalf("unexpected row(1): %s", spew.Sdump(row))
|
||
|
}
|
||
|
|
||
|
// Verify EOF.
|
||
|
if row, _, err := e.Emit(); err != nil {
|
||
|
t.Fatalf("unexpected error(eof): %s", err)
|
||
|
} else if row != nil {
|
||
|
t.Fatalf("unexpected eof: %s", spew.Sdump(row))
|
||
|
}
|
||
|
}
|