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 }