235 lines
6.7 KiB
Go
235 lines
6.7 KiB
Go
package remotes
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/influxdata/influxdb/v2"
|
|
"github.com/influxdata/influxdb/v2/kit/platform"
|
|
"github.com/influxdata/influxdb/v2/mock"
|
|
"github.com/influxdata/influxdb/v2/sqlite"
|
|
"github.com/influxdata/influxdb/v2/sqlite/migrations"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap/zaptest"
|
|
)
|
|
|
|
var (
|
|
ctx = context.Background()
|
|
initID = platform.ID(1)
|
|
desc = "testing testing"
|
|
remoteID = platform.ID(20)
|
|
connection = influxdb.RemoteConnection{
|
|
ID: initID,
|
|
OrgID: platform.ID(10),
|
|
Name: "test",
|
|
Description: &desc,
|
|
RemoteURL: "https://influxdb.cloud",
|
|
RemoteOrgID: &remoteID,
|
|
AllowInsecureTLS: true,
|
|
}
|
|
fakeToken = "abcdefghijklmnop"
|
|
createReq = influxdb.CreateRemoteConnectionRequest{
|
|
OrgID: connection.OrgID,
|
|
Name: connection.Name,
|
|
Description: connection.Description,
|
|
RemoteURL: connection.RemoteURL,
|
|
RemoteToken: fakeToken,
|
|
RemoteOrgID: connection.RemoteOrgID,
|
|
AllowInsecureTLS: connection.AllowInsecureTLS,
|
|
}
|
|
fakeToken2 = "qrstuvwxyz"
|
|
fals = false
|
|
updateReq = influxdb.UpdateRemoteConnectionRequest{
|
|
RemoteToken: &fakeToken2,
|
|
AllowInsecureTLS: &fals,
|
|
}
|
|
updatedConnection = influxdb.RemoteConnection{
|
|
ID: connection.ID,
|
|
OrgID: connection.OrgID,
|
|
Name: connection.Name,
|
|
Description: connection.Description,
|
|
RemoteURL: connection.RemoteURL,
|
|
RemoteOrgID: connection.RemoteOrgID,
|
|
AllowInsecureTLS: *updateReq.AllowInsecureTLS,
|
|
}
|
|
)
|
|
|
|
func TestCreateAndGetConnection(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
|
|
// Getting an invalid ID should return an error.
|
|
got, err := svc.GetRemoteConnection(ctx, initID)
|
|
require.Equal(t, errRemoteNotFound, err)
|
|
require.Nil(t, got)
|
|
|
|
// Create a connection, check the results.
|
|
created, err := svc.CreateRemoteConnection(ctx, createReq)
|
|
require.NoError(t, err)
|
|
require.Equal(t, connection, *created)
|
|
|
|
// Read the created connection and assert it matches the creation response.
|
|
got, err = svc.GetRemoteConnection(ctx, initID)
|
|
require.NoError(t, err)
|
|
require.Equal(t, connection, *got)
|
|
}
|
|
|
|
func TestUpdateAndGetConnection(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
|
|
// Updating a nonexistent ID fails.
|
|
updated, err := svc.UpdateRemoteConnection(ctx, initID, updateReq)
|
|
require.Equal(t, errRemoteNotFound, err)
|
|
require.Nil(t, updated)
|
|
|
|
// Create a connection.
|
|
created, err := svc.CreateRemoteConnection(ctx, createReq)
|
|
require.NoError(t, err)
|
|
require.Equal(t, connection, *created)
|
|
|
|
// Update the connection.
|
|
updated, err = svc.UpdateRemoteConnection(ctx, initID, updateReq)
|
|
require.NoError(t, err)
|
|
require.Equal(t, updatedConnection, *updated)
|
|
|
|
// Read the updated connection and assert it matches the updated response.
|
|
got, err := svc.GetRemoteConnection(ctx, initID)
|
|
require.NoError(t, err)
|
|
require.Equal(t, updated, got)
|
|
}
|
|
|
|
func TestUpdateNoop(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
|
|
// Create a connection.
|
|
created, err := svc.CreateRemoteConnection(ctx, createReq)
|
|
require.NoError(t, err)
|
|
require.Equal(t, connection, *created)
|
|
|
|
// Send a no-op update, assert nothing changed.
|
|
updated, err := svc.UpdateRemoteConnection(ctx, initID, influxdb.UpdateRemoteConnectionRequest{})
|
|
require.NoError(t, err)
|
|
require.Equal(t, connection, *updated)
|
|
|
|
// Read the updated connection and assert it matches the updated response.
|
|
got, err := svc.GetRemoteConnection(ctx, initID)
|
|
require.NoError(t, err)
|
|
require.Equal(t, updated, got)
|
|
}
|
|
|
|
func TestDeleteConnection(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
|
|
// Deleting a nonexistent ID should return an error.
|
|
require.Equal(t, errRemoteNotFound, svc.DeleteRemoteConnection(ctx, initID))
|
|
|
|
// Create a connection, then delete it.
|
|
created, err := svc.CreateRemoteConnection(ctx, createReq)
|
|
require.NoError(t, err)
|
|
require.Equal(t, connection, *created)
|
|
require.NoError(t, svc.DeleteRemoteConnection(ctx, initID))
|
|
|
|
// Looking up the ID should again produce an error.
|
|
got, err := svc.GetRemoteConnection(ctx, initID)
|
|
require.Equal(t, errRemoteNotFound, err)
|
|
require.Nil(t, got)
|
|
}
|
|
|
|
func TestListConnections(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
createReq2, createReq3 := createReq, createReq
|
|
createReq2.Name, createReq3.Name = "test2", "test3"
|
|
altURL := "https://other.influxdb"
|
|
createReq2.RemoteURL, createReq3.RemoteURL = altURL, altURL
|
|
|
|
setup := func(t *testing.T, svc *service) []influxdb.RemoteConnection {
|
|
var allConns []influxdb.RemoteConnection
|
|
for _, req := range []influxdb.CreateRemoteConnectionRequest{createReq, createReq2, createReq3} {
|
|
created, err := svc.CreateRemoteConnection(ctx, req)
|
|
require.NoError(t, err)
|
|
allConns = append(allConns, *created)
|
|
}
|
|
return allConns
|
|
}
|
|
|
|
t.Run("list all", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
allConns := setup(t, svc)
|
|
|
|
listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{OrgID: connection.OrgID})
|
|
require.NoError(t, err)
|
|
require.Equal(t, influxdb.RemoteConnections{Remotes: allConns}, *listed)
|
|
})
|
|
|
|
t.Run("list by name", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
allConns := setup(t, svc)
|
|
|
|
listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{
|
|
OrgID: connection.OrgID,
|
|
Name: &createReq2.Name,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, influxdb.RemoteConnections{Remotes: allConns[1:2]}, *listed)
|
|
})
|
|
|
|
t.Run("list by URL", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
allConns := setup(t, svc)
|
|
|
|
listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{
|
|
OrgID: connection.OrgID,
|
|
RemoteURL: &altURL,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, influxdb.RemoteConnections{Remotes: allConns[1:]}, *listed)
|
|
})
|
|
|
|
t.Run("list by other org ID", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
svc, clean := newTestService(t)
|
|
defer clean(t)
|
|
setup(t, svc)
|
|
|
|
listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{OrgID: platform.ID(1000)})
|
|
require.NoError(t, err)
|
|
require.Equal(t, influxdb.RemoteConnections{}, *listed)
|
|
})
|
|
}
|
|
|
|
func newTestService(t *testing.T) (*service, func(t *testing.T)) {
|
|
store, clean := sqlite.NewTestStore(t)
|
|
logger := zaptest.NewLogger(t)
|
|
sqliteMigrator := sqlite.NewMigrator(store, logger)
|
|
require.NoError(t, sqliteMigrator.Up(ctx, migrations.AllUp))
|
|
|
|
svc := service{
|
|
store: store,
|
|
idGenerator: mock.NewIncrementingIDGenerator(initID),
|
|
}
|
|
|
|
return &svc, clean
|
|
}
|