63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package querytest
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/influxdata/flux"
|
|
platform "github.com/influxdata/influxdb"
|
|
"github.com/influxdata/influxdb/query"
|
|
)
|
|
|
|
type BucketsAccessedTestCase struct {
|
|
Name string
|
|
Raw string
|
|
WantErr bool
|
|
WantReadBuckets *[]platform.BucketFilter
|
|
WantWriteBuckets *[]platform.BucketFilter
|
|
}
|
|
|
|
func BucketsAccessedTestHelper(t *testing.T, tc BucketsAccessedTestCase) {
|
|
t.Helper()
|
|
|
|
ast, err := flux.Parse(tc.Raw)
|
|
if err != nil {
|
|
t.Fatalf("could not parse flux: %v", err)
|
|
}
|
|
|
|
var gotReadBuckets, gotWriteBuckets []platform.BucketFilter
|
|
if tc.WantReadBuckets != nil || tc.WantWriteBuckets != nil {
|
|
gotReadBuckets, gotWriteBuckets, err = query.BucketsAccessed(ast, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
if tc.WantReadBuckets != nil {
|
|
if diagnostic := verifyBuckets(*tc.WantReadBuckets, gotReadBuckets); diagnostic != "" {
|
|
t.Errorf("Could not verify read buckets: %v", diagnostic)
|
|
}
|
|
}
|
|
|
|
if tc.WantWriteBuckets != nil {
|
|
if diagnostic := verifyBuckets(*tc.WantWriteBuckets, gotWriteBuckets); diagnostic != "" {
|
|
t.Errorf("Could not verify write buckets: %v", diagnostic)
|
|
}
|
|
}
|
|
}
|
|
|
|
func verifyBuckets(wantBuckets, gotBuckets []platform.BucketFilter) string {
|
|
if len(wantBuckets) != len(gotBuckets) {
|
|
return fmt.Sprintf("Expected %v buckets but got %v", len(wantBuckets), len(gotBuckets))
|
|
}
|
|
|
|
for i, wantBucket := range wantBuckets {
|
|
if diagnostic := cmp.Diff(wantBucket, gotBuckets[i]); diagnostic != "" {
|
|
return fmt.Sprintf("Bucket mismatch: -want/+got:\n%v", diagnostic)
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|