From 82077c9004933e00946efe1baf6850f714fbe071 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Wed, 25 Jan 2023 14:43:13 +0530 Subject: [PATCH] MM-49604: Fix race condition in test (#22128) The AssertExpectations was being called after the store was closed. To fix it we move it to the last line. https://mattermost.atlassian.net/browse/MM-49604 ```release-note NONE --- store/sqlstore/store_test.go | 77 ++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/store/sqlstore/store_test.go b/store/sqlstore/store_test.go index d9836c8c41..a24b984701 100644 --- a/store/sqlstore/store_test.go +++ b/store/sqlstore/store_test.go @@ -703,56 +703,57 @@ func TestVersionString(t *testing.T) { } func TestReplicaLagQuery(t *testing.T) { - t.Skip("MM-49604") testDrivers := []string{ model.DatabaseDriverPostgres, model.DatabaseDriverMysql, } for _, driver := range testDrivers { - settings := makeSqlSettings(driver) - var query string - var tableName string - // Just any random query which returns a row in (string, int) format. - switch driver { - case model.DatabaseDriverPostgres: - query = `SELECT relname, count(relname) FROM pg_class WHERE relname='posts' GROUP BY relname` - tableName = "posts" - case model.DatabaseDriverMysql: - query = `SELECT table_name, count(table_name) FROM information_schema.tables WHERE table_name='Posts' and table_schema=Database() GROUP BY table_name` - tableName = "Posts" - } + t.Run(driver, func(t *testing.T) { + settings := makeSqlSettings(driver) + var query string + var tableName string + // Just any random query which returns a row in (string, int) format. + switch driver { + case model.DatabaseDriverPostgres: + query = `SELECT relname, count(relname) FROM pg_class WHERE relname='posts' GROUP BY relname` + tableName = "posts" + case model.DatabaseDriverMysql: + query = `SELECT table_name, count(table_name) FROM information_schema.tables WHERE table_name='Posts' and table_schema=Database() GROUP BY table_name` + tableName = "Posts" + } - settings.ReplicaLagSettings = []*model.ReplicaLagSettings{{ - DataSource: model.NewString(*settings.DataSource), - QueryAbsoluteLag: model.NewString(query), - QueryTimeLag: model.NewString(query), - }} + settings.ReplicaLagSettings = []*model.ReplicaLagSettings{{ + DataSource: model.NewString(*settings.DataSource), + QueryAbsoluteLag: model.NewString(query), + QueryTimeLag: model.NewString(query), + }} - mockMetrics := &mocks.MetricsInterface{} - defer mockMetrics.AssertExpectations(t) - mockMetrics.On("SetReplicaLagAbsolute", tableName, float64(1)) - mockMetrics.On("SetReplicaLagTime", tableName, float64(1)) - mockMetrics.On("RegisterDBCollector", mock.AnythingOfType("*sql.DB"), "master") + mockMetrics := &mocks.MetricsInterface{} + mockMetrics.On("SetReplicaLagAbsolute", tableName, float64(1)) + mockMetrics.On("SetReplicaLagTime", tableName, float64(1)) + mockMetrics.On("RegisterDBCollector", mock.AnythingOfType("*sql.DB"), "master") - store := &SqlStore{ - rrCounter: 0, - srCounter: 0, - settings: settings, - metrics: mockMetrics, - } + store := &SqlStore{ + rrCounter: 0, + srCounter: 0, + settings: settings, + metrics: mockMetrics, + } - store.initConnection() - store.stores.post = newSqlPostStore(store, mockMetrics) - err := store.migrate(migrationsDirectionUp) - require.NoError(t, err) + store.initConnection() + store.stores.post = newSqlPostStore(store, mockMetrics) + err := store.migrate(migrationsDirectionUp) + require.NoError(t, err) - defer store.Close() + defer store.Close() - err = store.ReplicaLagAbs() - require.NoError(t, err) - err = store.ReplicaLagTime() - require.NoError(t, err) + err = store.ReplicaLagAbs() + require.NoError(t, err) + err = store.ReplicaLagTime() + require.NoError(t, err) + mockMetrics.AssertExpectations(t) + }) } }