influxdb/cmd/influxd/launcher/remote_to_test.go

102 lines
3.1 KiB
Go

package launcher_test
import (
"context"
"fmt"
"testing"
"github.com/influxdata/influxdb/v2/cmd/influxd/launcher"
"github.com/stretchr/testify/require"
)
func TestRemoteTo(t *testing.T) {
t.Parallel()
ctx := context.Background()
// Boot 2 servers.
l1 := launcher.RunAndSetupNewLauncherOrFail(ctx, t)
defer l1.ShutdownOrFail(t, ctx)
l2 := launcher.RunAndSetupNewLauncherOrFail(ctx, t)
defer l2.ShutdownOrFail(t, ctx)
// Run a flux script in the 1st server, writing data to the 2nd.
q1 := fmt.Sprintf(`import "array"
option now = () => (2030-01-01T00:01:00Z)
rows = [
{_time: now(), _measurement: "test", _field: "f", _value: 1.0},
{_time: now(), _measurement: "test", _field: "v", _value: -123.0},
{_time: now(), _measurement: "test2", _field: "f", _value: 0.03}
]
array.from(rows) |> to(bucket: "%s", host: "%s", token: "%s", org: "%s")
`, l2.Bucket.Name, l2.URL().String(), l2.Auth.Token, l2.Org.Name)
_ = l1.FluxQueryOrFail(t, l1.Org, l1.Auth.Token, q1)
// Query the 2nd server and check that the points landed.
q2 := fmt.Sprintf(`from(bucket:"%s")
|> range(start: 2030-01-01T00:00:00Z, stop: 2030-01-02T00:00:00Z)
|> keep(columns: ["_measurement", "_field", "_value"])
`, l2.Bucket.Name)
exp := `,result,table,_value,_field,_measurement` + "\r\n" +
`,_result,0,1,f,test` + "\r\n" +
`,_result,1,0.03,f,test2` + "\r\n" +
`,_result,2,-123,v,test` + "\r\n\r\n"
res := l2.FluxQueryOrFail(t, l2.Org, l2.Auth.Token, q2)
require.Equal(t, exp, res)
}
func TestRemoteTo_Experimental(t *testing.T) {
t.Parallel()
ctx := context.Background()
// Boot 2 servers.
l1 := launcher.RunAndSetupNewLauncherOrFail(ctx, t)
defer l1.ShutdownOrFail(t, ctx)
l2 := launcher.RunAndSetupNewLauncherOrFail(ctx, t)
defer l2.ShutdownOrFail(t, ctx)
// Run a flux script in the 1st server, writing data to the 2nd.
q1 := fmt.Sprintf(`import "array"
import "experimental"
option now = () => (2030-01-01T00:01:00Z)
testRows = [
{_time: now(), _field: "f", _value: 1.0},
{_time: now(), _field: "v", _value: -123.0},
]
test2Rows = [
{_time: now(), _field: "f", _value: 0.03}
]
testTable = array.from(rows: testRows)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({r with _measurement: "test"}))
test2Table = array.from(rows: test2Rows)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({r with _measurement: "test2"}))
union(tables: [testTable, test2Table]) |> group(columns: ["_measurement"])
|> experimental.to(bucket: "%s", host: "%s", token: "%s", org: "%s")
`, l2.Bucket.Name, l2.URL().String(), l2.Auth.Token, l2.Org.Name)
_ = l1.FluxQueryOrFail(t, l1.Org, l1.Auth.Token, q1)
// Query the 2nd server and check that the points landed.
q2 := fmt.Sprintf(`from(bucket:"%s")
|> range(start: 2030-01-01T00:00:00Z, stop: 2030-01-02T00:00:00Z)
|> keep(columns: ["_measurement", "_field", "_value"])
`, l2.Bucket.Name)
exp := `,result,table,_value,_field,_measurement` + "\r\n" +
`,_result,0,1,f,test` + "\r\n" +
`,_result,1,0.03,f,test2` + "\r\n" +
`,_result,2,-123,v,test` + "\r\n\r\n"
res := l2.FluxQueryOrFail(t, l2.Org, l2.Auth.Token, q2)
require.Equal(t, exp, res)
}