github.com/influxdata/influxdb/v2@v2.7.6/remotes/service_test.go (about)

     1  package remotes
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/influxdata/influxdb/v2"
     8  	"github.com/influxdata/influxdb/v2/kit/platform"
     9  	"github.com/influxdata/influxdb/v2/mock"
    10  	"github.com/influxdata/influxdb/v2/sqlite"
    11  	"github.com/influxdata/influxdb/v2/sqlite/migrations"
    12  	"github.com/stretchr/testify/require"
    13  	"go.uber.org/zap/zaptest"
    14  )
    15  
    16  var (
    17  	ctx        = context.Background()
    18  	initID     = platform.ID(1)
    19  	desc       = "testing testing"
    20  	remoteID   = platform.ID(20)
    21  	connection = influxdb.RemoteConnection{
    22  		ID:               initID,
    23  		OrgID:            platform.ID(10),
    24  		Name:             "test",
    25  		Description:      &desc,
    26  		RemoteURL:        "https://influxdb.cloud",
    27  		RemoteOrgID:      &remoteID,
    28  		AllowInsecureTLS: true,
    29  	}
    30  	fakeToken = "abcdefghijklmnop"
    31  	createReq = influxdb.CreateRemoteConnectionRequest{
    32  		OrgID:            connection.OrgID,
    33  		Name:             connection.Name,
    34  		Description:      connection.Description,
    35  		RemoteURL:        connection.RemoteURL,
    36  		RemoteToken:      fakeToken,
    37  		RemoteOrgID:      connection.RemoteOrgID,
    38  		AllowInsecureTLS: connection.AllowInsecureTLS,
    39  	}
    40  	fakeToken2 = "qrstuvwxyz"
    41  	fals       = false
    42  	updateReq  = influxdb.UpdateRemoteConnectionRequest{
    43  		RemoteToken:      &fakeToken2,
    44  		AllowInsecureTLS: &fals,
    45  	}
    46  	updatedConnection = influxdb.RemoteConnection{
    47  		ID:               connection.ID,
    48  		OrgID:            connection.OrgID,
    49  		Name:             connection.Name,
    50  		Description:      connection.Description,
    51  		RemoteURL:        connection.RemoteURL,
    52  		RemoteOrgID:      connection.RemoteOrgID,
    53  		AllowInsecureTLS: *updateReq.AllowInsecureTLS,
    54  	}
    55  )
    56  
    57  func TestCreateAndGetConnection(t *testing.T) {
    58  	t.Parallel()
    59  
    60  	svc := newTestService(t)
    61  
    62  	// Getting an invalid ID should return an error.
    63  	got, err := svc.GetRemoteConnection(ctx, initID)
    64  	require.Equal(t, errRemoteNotFound, err)
    65  	require.Nil(t, got)
    66  
    67  	// Create a connection, check the results.
    68  	created, err := svc.CreateRemoteConnection(ctx, createReq)
    69  	require.NoError(t, err)
    70  	require.Equal(t, connection, *created)
    71  
    72  	// Read the created connection and assert it matches the creation response.
    73  	got, err = svc.GetRemoteConnection(ctx, initID)
    74  	require.NoError(t, err)
    75  	require.Equal(t, connection, *got)
    76  }
    77  
    78  func TestUpdateAndGetConnection(t *testing.T) {
    79  	t.Parallel()
    80  
    81  	svc := newTestService(t)
    82  
    83  	// Updating a nonexistent ID fails.
    84  	updated, err := svc.UpdateRemoteConnection(ctx, initID, updateReq)
    85  	require.Equal(t, errRemoteNotFound, err)
    86  	require.Nil(t, updated)
    87  
    88  	// Create a connection.
    89  	created, err := svc.CreateRemoteConnection(ctx, createReq)
    90  	require.NoError(t, err)
    91  	require.Equal(t, connection, *created)
    92  
    93  	// Update the connection.
    94  	updated, err = svc.UpdateRemoteConnection(ctx, initID, updateReq)
    95  	require.NoError(t, err)
    96  	require.Equal(t, updatedConnection, *updated)
    97  
    98  	// Read the updated connection and assert it matches the updated response.
    99  	got, err := svc.GetRemoteConnection(ctx, initID)
   100  	require.NoError(t, err)
   101  	require.Equal(t, updated, got)
   102  }
   103  
   104  func TestUpdateNoop(t *testing.T) {
   105  	t.Parallel()
   106  
   107  	svc := newTestService(t)
   108  
   109  	// Create a connection.
   110  	created, err := svc.CreateRemoteConnection(ctx, createReq)
   111  	require.NoError(t, err)
   112  	require.Equal(t, connection, *created)
   113  
   114  	// Send a no-op update, assert nothing changed.
   115  	updated, err := svc.UpdateRemoteConnection(ctx, initID, influxdb.UpdateRemoteConnectionRequest{})
   116  	require.NoError(t, err)
   117  	require.Equal(t, connection, *updated)
   118  
   119  	// Read the updated connection and assert it matches the updated response.
   120  	got, err := svc.GetRemoteConnection(ctx, initID)
   121  	require.NoError(t, err)
   122  	require.Equal(t, updated, got)
   123  }
   124  
   125  func TestDeleteConnection(t *testing.T) {
   126  	t.Parallel()
   127  
   128  	svc := newTestService(t)
   129  
   130  	// Deleting a nonexistent ID should return an error.
   131  	require.Equal(t, errRemoteNotFound, svc.DeleteRemoteConnection(ctx, initID))
   132  
   133  	// Create a connection, then delete it.
   134  	created, err := svc.CreateRemoteConnection(ctx, createReq)
   135  	require.NoError(t, err)
   136  	require.Equal(t, connection, *created)
   137  	require.NoError(t, svc.DeleteRemoteConnection(ctx, initID))
   138  
   139  	// Looking up the ID should again produce an error.
   140  	got, err := svc.GetRemoteConnection(ctx, initID)
   141  	require.Equal(t, errRemoteNotFound, err)
   142  	require.Nil(t, got)
   143  }
   144  
   145  func TestListConnections(t *testing.T) {
   146  	t.Parallel()
   147  
   148  	createReq2, createReq3 := createReq, createReq
   149  	createReq2.Name, createReq3.Name = "test2", "test3"
   150  	altURL := "https://other.influxdb"
   151  	createReq2.RemoteURL, createReq3.RemoteURL = altURL, altURL
   152  
   153  	setup := func(t *testing.T, svc *service) []influxdb.RemoteConnection {
   154  		var allConns []influxdb.RemoteConnection
   155  		for _, req := range []influxdb.CreateRemoteConnectionRequest{createReq, createReq2, createReq3} {
   156  			created, err := svc.CreateRemoteConnection(ctx, req)
   157  			require.NoError(t, err)
   158  			allConns = append(allConns, *created)
   159  		}
   160  		return allConns
   161  	}
   162  
   163  	t.Run("list all", func(t *testing.T) {
   164  		t.Parallel()
   165  
   166  		svc := newTestService(t)
   167  		allConns := setup(t, svc)
   168  
   169  		listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{OrgID: connection.OrgID})
   170  		require.NoError(t, err)
   171  		require.Equal(t, influxdb.RemoteConnections{Remotes: allConns}, *listed)
   172  	})
   173  
   174  	t.Run("list by name", func(t *testing.T) {
   175  		t.Parallel()
   176  
   177  		svc := newTestService(t)
   178  		allConns := setup(t, svc)
   179  
   180  		listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{
   181  			OrgID: connection.OrgID,
   182  			Name:  &createReq2.Name,
   183  		})
   184  		require.NoError(t, err)
   185  		require.Equal(t, influxdb.RemoteConnections{Remotes: allConns[1:2]}, *listed)
   186  	})
   187  
   188  	t.Run("list by URL", func(t *testing.T) {
   189  		t.Parallel()
   190  
   191  		svc := newTestService(t)
   192  		allConns := setup(t, svc)
   193  
   194  		listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{
   195  			OrgID:     connection.OrgID,
   196  			RemoteURL: &altURL,
   197  		})
   198  		require.NoError(t, err)
   199  		require.Equal(t, influxdb.RemoteConnections{Remotes: allConns[1:]}, *listed)
   200  	})
   201  
   202  	t.Run("list by other org ID", func(t *testing.T) {
   203  		t.Parallel()
   204  
   205  		svc := newTestService(t)
   206  		setup(t, svc)
   207  
   208  		listed, err := svc.ListRemoteConnections(ctx, influxdb.RemoteConnectionListFilter{OrgID: platform.ID(1000)})
   209  		require.NoError(t, err)
   210  		require.Equal(t, influxdb.RemoteConnections{}, *listed)
   211  	})
   212  }
   213  
   214  func newTestService(t *testing.T) *service {
   215  	store := sqlite.NewTestStore(t)
   216  	logger := zaptest.NewLogger(t)
   217  	sqliteMigrator := sqlite.NewMigrator(store, logger)
   218  	require.NoError(t, sqliteMigrator.Up(ctx, migrations.AllUp))
   219  
   220  	svc := service{
   221  		store:       store,
   222  		idGenerator: mock.NewIncrementingIDGenerator(initID),
   223  	}
   224  
   225  	return &svc
   226  }