Skip to content

Commit bccc467

Browse files
committed
Use mock metrics service in all relevant tests
1 parent 4b8fbb1 commit bccc467

20 files changed

+885
-250
lines changed

internal/data/accounts_test.go

+19-12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/stellar/wallet-backend/internal/db/dbtest"
1111
"github.com/stellar/wallet-backend/internal/metrics"
1212
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/mock"
1314
"github.com/stretchr/testify/require"
1415
)
1516

@@ -20,13 +21,15 @@ func TestAccountModelInsert(t *testing.T) {
2021
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
2122
require.NoError(t, err)
2223
defer dbConnectionPool.Close()
23-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
24-
require.NoError(t, err)
25-
metricsService := metrics.NewMetricsService(sqlxDB)
24+
25+
mockMetricsService := metrics.NewMockMetricsService()
26+
mockMetricsService.On("ObserveDBQueryDuration", "INSERT", "accounts", mock.Anything).Return()
27+
mockMetricsService.On("IncDBQuery", "INSERT", "accounts").Return()
28+
defer mockMetricsService.AssertExpectations(t)
2629

2730
m := &AccountModel{
2831
DB: dbConnectionPool,
29-
MetricsService: metricsService,
32+
MetricsService: mockMetricsService,
3033
}
3134

3235
ctx := context.Background()
@@ -49,13 +52,15 @@ func TestAccountModelDelete(t *testing.T) {
4952
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
5053
require.NoError(t, err)
5154
defer dbConnectionPool.Close()
52-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
53-
require.NoError(t, err)
54-
metricsService := metrics.NewMetricsService(sqlxDB)
55+
56+
mockMetricsService := metrics.NewMockMetricsService()
57+
mockMetricsService.On("ObserveDBQueryDuration", "DELETE", "accounts", mock.Anything).Return()
58+
mockMetricsService.On("IncDBQuery", "DELETE", "accounts").Return()
59+
defer mockMetricsService.AssertExpectations(t)
5560

5661
m := &AccountModel{
5762
DB: dbConnectionPool,
58-
MetricsService: metricsService,
63+
MetricsService: mockMetricsService,
5964
}
6065

6166
ctx := context.Background()
@@ -81,13 +86,15 @@ func TestAccountModelIsAccountFeeBumpEligible(t *testing.T) {
8186
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
8287
require.NoError(t, err)
8388
defer dbConnectionPool.Close()
84-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
85-
require.NoError(t, err)
86-
metricsService := metrics.NewMetricsService(sqlxDB)
89+
90+
mockMetricsService := metrics.NewMockMetricsService()
91+
mockMetricsService.On("IncDBQuery", "SELECT", "accounts").Return()
92+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "accounts", mock.Anything).Return()
93+
defer mockMetricsService.AssertExpectations(t)
8794

8895
m := &AccountModel{
8996
DB: dbConnectionPool,
90-
MetricsService: metricsService,
97+
MetricsService: mockMetricsService,
9198
}
9299

93100
ctx := context.Background()

internal/data/payments.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func (m *PaymentModel) GetLatestLedgerSynced(ctx context.Context, cursorName str
4242
err := m.DB.GetContext(ctx, &lastSyncedLedger, `SELECT value FROM ingest_store WHERE key = $1`, cursorName)
4343
duration := time.Since(start).Seconds()
4444
m.MetricsService.ObserveDBQueryDuration("SELECT", "ingest_store", duration)
45+
m.MetricsService.IncDBQuery("SELECT", "ingest_store")
4546
// First run, key does not exist yet
4647
if err == sql.ErrNoRows {
4748
return 0, nil
@@ -161,12 +162,12 @@ func (m *PaymentModel) GetPaymentsPaginated(ctx context.Context, address string,
161162
if err != nil {
162163
return nil, false, false, fmt.Errorf("fetching payments: %w", err)
163164
}
165+
m.MetricsService.IncDBQuery("SELECT", "ingest_payments")
164166

165167
prevExists, nextExists, err := m.existsPrevNext(ctx, filteredSetCTE, address, sort, payments)
166168
if err != nil {
167169
return nil, false, false, fmt.Errorf("checking prev and next pages: %w", err)
168170
}
169-
m.MetricsService.IncDBQuery("SELECT", "ingest_payments")
170171
return payments, prevExists, nextExists, nil
171172
}
172173

internal/data/payments_test.go

+96-19
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/stellar/wallet-backend/internal/metrics"
1313
"github.com/stellar/wallet-backend/internal/utils"
1414
"github.com/stretchr/testify/assert"
15+
"github.com/stretchr/testify/mock"
1516
"github.com/stretchr/testify/require"
1617
)
1718

@@ -22,13 +23,15 @@ func TestPaymentModelAddPayment(t *testing.T) {
2223
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
2324
require.NoError(t, err)
2425
defer dbConnectionPool.Close()
25-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
26-
require.NoError(t, err)
27-
metricsService := metrics.NewMetricsService(sqlxDB)
26+
27+
mockMetricsService := metrics.NewMockMetricsService()
28+
mockMetricsService.On("ObserveDBQueryDuration", "INSERT", "ingest_payments", mock.Anything).Return()
29+
mockMetricsService.On("IncDBQuery", "INSERT", "ingest_payments").Return()
30+
defer mockMetricsService.AssertExpectations(t)
2831

2932
m := &PaymentModel{
3033
DB: dbConnectionPool,
31-
MetricsService: metricsService,
34+
MetricsService: mockMetricsService,
3235
}
3336
ctx := context.Background()
3437

@@ -150,14 +153,16 @@ func TestPaymentModelGetLatestLedgerSynced(t *testing.T) {
150153
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
151154
require.NoError(t, err)
152155
defer dbConnectionPool.Close()
153-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
154-
require.NoError(t, err)
155-
metricsService := metrics.NewMetricsService(sqlxDB)
156+
157+
mockMetricsService := metrics.NewMockMetricsService()
158+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_store", mock.Anything).Return().Times(2)
159+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_store").Return().Times(2)
160+
defer mockMetricsService.AssertExpectations(t)
156161

157162
ctx := context.Background()
158163
m := &PaymentModel{
159164
DB: dbConnectionPool,
160-
MetricsService: metricsService,
165+
MetricsService: mockMetricsService,
161166
}
162167

163168
const key = "ingest_store_key"
@@ -179,14 +184,16 @@ func TestPaymentModelUpdateLatestLedgerSynced(t *testing.T) {
179184
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
180185
require.NoError(t, err)
181186
defer dbConnectionPool.Close()
182-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
183-
require.NoError(t, err)
184-
metricsService := metrics.NewMetricsService(sqlxDB)
187+
188+
mockMetricsService := metrics.NewMockMetricsService()
189+
mockMetricsService.On("ObserveDBQueryDuration", "INSERT", "ingest_store", mock.Anything).Return().Times(1)
190+
mockMetricsService.On("IncDBQuery", "INSERT", "ingest_store").Return().Times(1)
191+
defer mockMetricsService.AssertExpectations(t)
185192

186193
ctx := context.Background()
187194
m := &PaymentModel{
188195
DB: dbConnectionPool,
189-
MetricsService: metricsService,
196+
MetricsService: mockMetricsService,
190197
}
191198

192199
const key = "ingest_store_key"
@@ -205,15 +212,8 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
205212
dbConnectionPool, err := db.OpenDBConnectionPool(dbt.DSN)
206213
require.NoError(t, err)
207214
defer dbConnectionPool.Close()
208-
sqlxDB, err := dbConnectionPool.SqlxDB(context.Background())
209-
require.NoError(t, err)
210-
metricsService := metrics.NewMetricsService(sqlxDB)
211215

212216
ctx := context.Background()
213-
m := &PaymentModel{
214-
DB: dbConnectionPool,
215-
MetricsService: metricsService,
216-
}
217217

218218
dbPayments := []Payment{
219219
{OperationID: "1", OperationType: xdr.OperationTypePayment.String(), TransactionID: "11", TransactionHash: "c370ff20144e4c96b17432b8d14664c1", FromAddress: "GAZ37ZO4TU3H", ToAddress: "GDD2HQO6IOFT", SrcAssetCode: "XLM", SrcAssetIssuer: "", SrcAssetType: xdr.AssetTypeAssetTypeNative.String(), SrcAmount: 10, DestAssetCode: "XLM", DestAssetIssuer: "", DestAssetType: xdr.AssetTypeAssetTypeNative.String(), DestAmount: 10, CreatedAt: time.Date(2024, 6, 21, 0, 0, 0, 0, time.UTC), Memo: nil, MemoType: xdr.MemoTypeMemoNone.String()},
@@ -225,6 +225,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
225225
InsertTestPayments(t, ctx, dbPayments, dbConnectionPool)
226226

227227
t.Run("no_filter_desc", func(t *testing.T) {
228+
mockMetricsService := metrics.NewMockMetricsService()
229+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
230+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
231+
defer mockMetricsService.AssertExpectations(t)
232+
233+
m := &PaymentModel{
234+
DB: dbConnectionPool,
235+
MetricsService: mockMetricsService,
236+
}
237+
228238
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, "", "", "", DESC, 2)
229239
require.NoError(t, err)
230240

@@ -238,6 +248,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
238248
})
239249

240250
t.Run("no_filter_asc", func(t *testing.T) {
251+
mockMetricsService := metrics.NewMockMetricsService()
252+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
253+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
254+
defer mockMetricsService.AssertExpectations(t)
255+
256+
m := &PaymentModel{
257+
DB: dbConnectionPool,
258+
MetricsService: mockMetricsService,
259+
}
260+
241261
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, "", "", "", ASC, 2)
242262
require.NoError(t, err)
243263

@@ -251,6 +271,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
251271
})
252272

253273
t.Run("filter_address", func(t *testing.T) {
274+
mockMetricsService := metrics.NewMockMetricsService()
275+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
276+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
277+
defer mockMetricsService.AssertExpectations(t)
278+
279+
m := &PaymentModel{
280+
DB: dbConnectionPool,
281+
MetricsService: mockMetricsService,
282+
}
283+
254284
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, dbPayments[1].FromAddress, "", "", DESC, 2)
255285
require.NoError(t, err)
256286

@@ -263,6 +293,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
263293
})
264294

265295
t.Run("filter_after_id_desc", func(t *testing.T) {
296+
mockMetricsService := metrics.NewMockMetricsService()
297+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
298+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
299+
defer mockMetricsService.AssertExpectations(t)
300+
301+
m := &PaymentModel{
302+
DB: dbConnectionPool,
303+
MetricsService: mockMetricsService,
304+
}
305+
266306
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, "", "", dbPayments[3].OperationID, DESC, 2)
267307
require.NoError(t, err)
268308

@@ -276,6 +316,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
276316
})
277317

278318
t.Run("filter_after_id_asc", func(t *testing.T) {
319+
mockMetricsService := metrics.NewMockMetricsService()
320+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
321+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
322+
defer mockMetricsService.AssertExpectations(t)
323+
324+
m := &PaymentModel{
325+
DB: dbConnectionPool,
326+
MetricsService: mockMetricsService,
327+
}
328+
279329
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, "", "", dbPayments[3].OperationID, ASC, 2)
280330
require.NoError(t, err)
281331

@@ -288,6 +338,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
288338
})
289339

290340
t.Run("filter_before_id_desc", func(t *testing.T) {
341+
mockMetricsService := metrics.NewMockMetricsService()
342+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
343+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
344+
defer mockMetricsService.AssertExpectations(t)
345+
346+
m := &PaymentModel{
347+
DB: dbConnectionPool,
348+
MetricsService: mockMetricsService,
349+
}
350+
291351
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, "", dbPayments[2].OperationID, "", DESC, 2)
292352
require.NoError(t, err)
293353

@@ -301,6 +361,16 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
301361
})
302362

303363
t.Run("filter_before_id_asc", func(t *testing.T) {
364+
mockMetricsService := metrics.NewMockMetricsService()
365+
mockMetricsService.On("ObserveDBQueryDuration", "SELECT", "ingest_payments", mock.Anything).Return().Times(2)
366+
mockMetricsService.On("IncDBQuery", "SELECT", "ingest_payments").Return().Times(2)
367+
defer mockMetricsService.AssertExpectations(t)
368+
369+
m := &PaymentModel{
370+
DB: dbConnectionPool,
371+
MetricsService: mockMetricsService,
372+
}
373+
304374
payments, prevExists, nextExists, err := m.GetPaymentsPaginated(ctx, "", dbPayments[2].OperationID, "", ASC, 2)
305375
require.NoError(t, err)
306376

@@ -314,6 +384,13 @@ func TestPaymentModelGetPaymentsPaginated(t *testing.T) {
314384
})
315385

316386
t.Run("filter_before_id_after_id_asc", func(t *testing.T) {
387+
mockMetricsService := metrics.NewMockMetricsService()
388+
389+
m := &PaymentModel{
390+
DB: dbConnectionPool,
391+
MetricsService: mockMetricsService,
392+
}
393+
317394
_, _, _, err := m.GetPaymentsPaginated(ctx, "", dbPayments[4].OperationID, dbPayments[2].OperationID, ASC, 2)
318395
assert.ErrorContains(t, err, "at most one cursor may be provided, got afterId and beforeId")
319396
})

0 commit comments

Comments
 (0)