From 7e5e3d78d0b59653a5f015c5b94c0453faa6cdb2 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Fri, 17 Mar 2023 17:05:30 +0100 Subject: [PATCH] [v9.4.x] SQLStore: Fix setting query retries for integration tests (#64972) SQLStore: Fix setting query tries for integration tests (#64944) * SQLStore: Pass testinfra database configuration to the test database * Add test * Bypass gocyclo check for initTestDB (cherry picked from commit f5cb8c660ee1d2f016f40a365025c96fe2c29164) Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com> --- pkg/services/sqlstore/sqlstore.go | 28 +++++++++++++++++++++++----- pkg/tests/testinfra/testinfra.go | 5 +++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/pkg/services/sqlstore/sqlstore.go b/pkg/services/sqlstore/sqlstore.go index 90e1480d2b0..26f5e6c33b3 100644 --- a/pkg/services/sqlstore/sqlstore.go +++ b/pkg/services/sqlstore/sqlstore.go @@ -84,8 +84,8 @@ func ProvideService(cfg *setting.Cfg, cacheService *localcache.CacheService, mig return s, nil } -func ProvideServiceForTests(migrations registry.DatabaseMigrator) (*SQLStore, error) { - return initTestDB(migrations, InitTestDBOpt{EnsureDefaultOrgAndUser: true}) +func ProvideServiceForTests(cfg *setting.Cfg, migrations registry.DatabaseMigrator) (*SQLStore, error) { + return initTestDB(cfg, migrations, InitTestDBOpt{EnsureDefaultOrgAndUser: true}) } func newSQLStore(cfg *setting.Cfg, cacheService *localcache.CacheService, engine *xorm.Engine, @@ -504,7 +504,7 @@ var featuresEnabledDuringTests = []string{ // InitTestDBWithMigration initializes the test DB given custom migrations. func InitTestDBWithMigration(t ITestDB, migration registry.DatabaseMigrator, opts ...InitTestDBOpt) *SQLStore { t.Helper() - store, err := initTestDB(migration, opts...) + store, err := initTestDB(setting.NewCfg(), migration, opts...) if err != nil { t.Fatalf("failed to initialize sql store: %s", err) } @@ -514,7 +514,7 @@ func InitTestDBWithMigration(t ITestDB, migration registry.DatabaseMigrator, opt // InitTestDB initializes the test DB. func InitTestDB(t ITestDB, opts ...InitTestDBOpt) *SQLStore { t.Helper() - store, err := initTestDB(&migrations.OSSMigrations{}, opts...) + store, err := initTestDB(setting.NewCfg(), &migrations.OSSMigrations{}, opts...) if err != nil { t.Fatalf("failed to initialize sql store: %s", err) } @@ -526,7 +526,8 @@ func InitTestDBWithCfg(t ITestDB, opts ...InitTestDBOpt) (*SQLStore, *setting.Cf return store, store.Cfg } -func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQLStore, error) { +//nolint:gocyclo +func initTestDB(testCfg *setting.Cfg, migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQLStore, error) { testSQLStoreMutex.Lock() defer testSQLStoreMutex.Unlock() @@ -560,10 +561,12 @@ func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQ } return false } + sec, err := cfg.Raw.NewSection("database") if err != nil { return nil, err } + if _, err := sec.NewKey("type", dbType); err != nil { return nil, err } @@ -590,6 +593,21 @@ func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQ } } + if testCfg.Raw.HasSection("database") { + testSec, err := testCfg.Raw.GetSection("database") + if err == nil { + // copy from testCfg to the Cfg keys that do not exist + for _, k := range testSec.Keys() { + if sec.HasKey(k.Name()) { + continue + } + if _, err := sec.NewKey(k.Name(), k.Value()); err != nil { + return nil, err + } + } + } + } + // need to get engine to clean db before we init engine, err := xorm.NewEngine(dbType, sec.Key("connection_string").String()) if err != nil { diff --git a/pkg/tests/testinfra/testinfra.go b/pkg/tests/testinfra/testinfra.go index 275c3ebfee2..f8e736237e2 100644 --- a/pkg/tests/testinfra/testinfra.go +++ b/pkg/tests/testinfra/testinfra.go @@ -52,6 +52,11 @@ func StartGrafanaEnv(t *testing.T, grafDir, cfgPath string) (string, *server.Tes require.NoError(t, err) require.NoError(t, env.SQLStore.Sync()) + require.NotNil(t, env.SQLStore.Cfg) + dbSec, err := env.SQLStore.Cfg.Raw.GetSection("database") + require.NoError(t, err) + assert.Greater(t, dbSec.Key("query_retries").MustInt(), 0) + go func() { // When the server runs, it will also build and initialize the service graph if err := env.Server.Run(); err != nil {