mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
InfluxDB: Update SQL language url specification (#79408)
* accept urls with or without port * remove redundant comment * remove redundant function
This commit is contained in:
parent
46192d676d
commit
03da1a3f3f
@ -11,76 +11,94 @@ import (
|
||||
"github.com/apache/arrow/go/v13/arrow/flight/flightsql/example"
|
||||
"github.com/apache/arrow/go/v13/arrow/memory"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/grafana/grafana/pkg/tsdb/influxdb/models"
|
||||
)
|
||||
|
||||
func TestIntegration_QueryData(t *testing.T) {
|
||||
type FSQLTestSuite struct {
|
||||
suite.Suite
|
||||
db *sql.DB
|
||||
server flight.Server
|
||||
}
|
||||
|
||||
func (suite *FSQLTestSuite) SetupTest() {
|
||||
db, err := example.CreateDB()
|
||||
require.NoError(t, err)
|
||||
defer func(db *sql.DB) {
|
||||
err := db.Close()
|
||||
assert.NoError(t, err)
|
||||
}(db)
|
||||
require.NoError(suite.T(), err)
|
||||
|
||||
sqliteServer, err := example.NewSQLiteFlightSQLServer(db)
|
||||
require.NoError(t, err)
|
||||
require.NoError(suite.T(), err)
|
||||
sqliteServer.Alloc = memory.NewCheckedAllocator(memory.DefaultAllocator)
|
||||
server := flight.NewServerWithMiddleware(nil)
|
||||
server.RegisterFlightService(flightsql.NewFlightServer(sqliteServer))
|
||||
err = server.Init("localhost:12345")
|
||||
require.NoError(t, err)
|
||||
require.NoError(suite.T(), err)
|
||||
go func() {
|
||||
err := server.Serve()
|
||||
assert.NoError(t, err)
|
||||
require.NoError(suite.T(), err)
|
||||
}()
|
||||
defer server.Shutdown()
|
||||
suite.db = db
|
||||
suite.server = server
|
||||
}
|
||||
|
||||
resp, err := Query(
|
||||
context.Background(),
|
||||
&models.DatasourceInfo{
|
||||
HTTPClient: nil,
|
||||
Token: "secret",
|
||||
URL: "http://localhost:12345",
|
||||
DbName: "influxdb",
|
||||
Version: "test",
|
||||
HTTPMode: "proxy",
|
||||
Metadata: []map[string]string{
|
||||
{
|
||||
"bucket": "bucket",
|
||||
func (suite *FSQLTestSuite) AfterTest(suiteName, testName string) {
|
||||
err := suite.db.Close()
|
||||
require.NoError(suite.T(), err)
|
||||
suite.server.Shutdown()
|
||||
}
|
||||
|
||||
func TestFSQLTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(FSQLTestSuite))
|
||||
}
|
||||
|
||||
func (suite *FSQLTestSuite) TestIntegration_QueryData() {
|
||||
suite.Run("should run simple query data", func() {
|
||||
resp, err := Query(
|
||||
context.Background(),
|
||||
&models.DatasourceInfo{
|
||||
HTTPClient: nil,
|
||||
Token: "secret",
|
||||
URL: "http://localhost:12345",
|
||||
DbName: "influxdb",
|
||||
Version: "test",
|
||||
HTTPMode: "proxy",
|
||||
Metadata: []map[string]string{
|
||||
{
|
||||
"bucket": "bucket",
|
||||
},
|
||||
},
|
||||
SecureGrpc: false,
|
||||
},
|
||||
backend.QueryDataRequest{
|
||||
Queries: []backend.DataQuery{
|
||||
{
|
||||
RefID: "A",
|
||||
JSON: mustQueryJSON(suite.T(), "A", "select * from intTable"),
|
||||
},
|
||||
{
|
||||
RefID: "B",
|
||||
JSON: mustQueryJSON(suite.T(), "B", "select 1"),
|
||||
},
|
||||
},
|
||||
},
|
||||
SecureGrpc: false,
|
||||
},
|
||||
backend.QueryDataRequest{
|
||||
Queries: []backend.DataQuery{
|
||||
{
|
||||
RefID: "A",
|
||||
JSON: mustQueryJSON(t, "A", "select * from intTable"),
|
||||
},
|
||||
{
|
||||
RefID: "B",
|
||||
JSON: mustQueryJSON(t, "B", "select 1"),
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, resp.Responses, 2)
|
||||
)
|
||||
|
||||
respA := resp.Responses["A"]
|
||||
require.NoError(t, respA.Error)
|
||||
frame := respA.Frames[0]
|
||||
require.NoError(suite.T(), err)
|
||||
require.Len(suite.T(), resp.Responses, 2)
|
||||
|
||||
require.Equal(t, "id", frame.Fields[0].Name)
|
||||
require.Equal(t, "keyName", frame.Fields[1].Name)
|
||||
require.Equal(t, "value", frame.Fields[2].Name)
|
||||
require.Equal(t, "foreignId", frame.Fields[3].Name)
|
||||
for _, f := range frame.Fields {
|
||||
assert.Equal(t, 4, f.Len())
|
||||
}
|
||||
respA := resp.Responses["A"]
|
||||
require.NoError(suite.T(), respA.Error)
|
||||
frame := respA.Frames[0]
|
||||
|
||||
require.Equal(suite.T(), "id", frame.Fields[0].Name)
|
||||
require.Equal(suite.T(), "keyName", frame.Fields[1].Name)
|
||||
require.Equal(suite.T(), "value", frame.Fields[2].Name)
|
||||
require.Equal(suite.T(), "foreignId", frame.Fields[3].Name)
|
||||
for _, f := range frame.Fields {
|
||||
require.Equal(suite.T(), 4, f.Len())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func mustQueryJSON(t *testing.T, refID, sql string) []byte {
|
||||
|
@ -3,9 +3,7 @@ package fsql
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"google.golang.org/grpc/metadata"
|
||||
@ -94,11 +92,10 @@ func runnerFromDataSource(dsInfo *models.DatasourceInfo) (*runner, error) {
|
||||
return nil, fmt.Errorf("bad URL : %s", err)
|
||||
}
|
||||
|
||||
host, port, err := net.SplitHostPort(u.Host)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("bad URL : %s", err)
|
||||
addr := u.Host
|
||||
if u.Port() == "" {
|
||||
addr += ":443"
|
||||
}
|
||||
addr := strings.Join([]string{host, port}, ":")
|
||||
|
||||
md := metadata.MD{}
|
||||
for _, m := range dsInfo.Metadata {
|
||||
|
Loading…
Reference in New Issue
Block a user