diff --git a/pkg/api/common_test.go b/pkg/api/common_test.go index 15b32a83a22..e732249e27f 100644 --- a/pkg/api/common_test.go +++ b/pkg/api/common_test.go @@ -231,16 +231,16 @@ func setupAccessControlScenarioContext(t *testing.T, cfg *setting.Cfg, url strin cfg.IsFeatureToggleEnabled = features.IsEnabled cfg.Quota.Enabled = false - mockStore := sqlstore.InitTestDB(t) + store := sqlstore.InitTestDB(t) hs := &HTTPServer{ Cfg: cfg, Bus: bus.GetBus(), - Live: newTestLive(t), + Live: newTestLive(t, store), Features: features, QuotaService: "a.QuotaService{Cfg: cfg}, RouteRegister: routing.NewRouteRegister(), AccessControl: accesscontrolmock.New().WithPermissions(permissions), - searchUsersService: searchusers.ProvideUsersService(mockStore, filters.ProvideOSSSearchUserFilter()), + searchUsersService: searchusers.ProvideUsersService(store, filters.ProvideOSSSearchUserFilter()), ldapGroups: ldap.ProvideGroupsService(), } @@ -352,8 +352,11 @@ func setupHTTPServerWithMockDb(t *testing.T, useFakeAccessControl bool, enableAc } func setupHTTPServerWithCfg(t *testing.T, useFakeAccessControl, enableAccessControl bool, cfg *setting.Cfg) accessControlScenarioContext { - db := sqlstore.InitTestDB(t) - db.Cfg = cfg + var featureFlags []string + if enableAccessControl { + featureFlags = append(featureFlags, featuremgmt.FlagAccesscontrol) + } + db := sqlstore.InitTestDB(t, sqlstore.InitTestDBOpt{FeatureFlags: featureFlags}) return setupHTTPServerWithCfgDb(t, useFakeAccessControl, enableAccessControl, cfg, db, db) } @@ -374,7 +377,7 @@ func setupHTTPServerWithCfgDb(t *testing.T, useFakeAccessControl, enableAccessCo Cfg: cfg, Features: features, Bus: bus.GetBus(), - Live: newTestLive(t), + Live: newTestLive(t, db), QuotaService: "a.QuotaService{Cfg: cfg}, RouteRegister: routeRegister, SQLStore: store, diff --git a/pkg/api/dashboard_test.go b/pkg/api/dashboard_test.go index aed84a37725..d33ddc3349b 100644 --- a/pkg/api/dashboard_test.go +++ b/pkg/api/dashboard_test.go @@ -85,14 +85,14 @@ func TestGetHomeDashboard(t *testing.T) { } } -func newTestLive(t *testing.T) *live.GrafanaLive { +func newTestLive(t *testing.T, store *sqlstore.SQLStore) *live.GrafanaLive { features := featuremgmt.WithFeatures() cfg := &setting.Cfg{AppURL: "http://localhost:3000/"} cfg.IsFeatureToggleEnabled = features.IsEnabled gLive, err := live.ProvideService(nil, cfg, routing.NewRouteRegister(), nil, nil, nil, - sqlstore.InitTestDB(t), + store, nil, &usagestats.UsageStatsMock{T: t}, nil, @@ -216,10 +216,11 @@ func TestDashboardAPIEndpoint(t *testing.T) { cfg := setting.NewCfg() features := featuremgmt.WithFeatures() - dashboardStore := database.ProvideDashboardStore(sqlstore.InitTestDB(t)) + sql := sqlstore.InitTestDB(t) + dashboardStore := database.ProvideDashboardStore(sql) hs := &HTTPServer{ Cfg: cfg, - Live: newTestLive(t), + Live: newTestLive(t, sql), LibraryPanelService: &mockLibraryPanelService{}, LibraryElementService: &mockLibraryElementService{}, SQLStore: mockSQLStore, @@ -1005,7 +1006,7 @@ func postDashboardScenario(t *testing.T, desc string, url string, routePattern s Bus: bus.GetBus(), Cfg: cfg, ProvisioningService: provisioning.NewProvisioningServiceMock(context.Background()), - Live: newTestLive(t), + Live: newTestLive(t, sqlstore.InitTestDB(t)), QuotaService: "a.QuotaService{ Cfg: cfg, }, @@ -1042,7 +1043,7 @@ func postDiffScenario(t *testing.T, desc string, url string, routePattern string Cfg: cfg, Bus: bus.GetBus(), ProvisioningService: provisioning.NewProvisioningServiceMock(context.Background()), - Live: newTestLive(t), + Live: newTestLive(t, sqlstore.InitTestDB(t)), QuotaService: "a.QuotaService{Cfg: cfg}, LibraryPanelService: &mockLibraryPanelService{}, LibraryElementService: &mockLibraryElementService{}, @@ -1079,7 +1080,7 @@ func restoreDashboardVersionScenario(t *testing.T, desc string, url string, rout Cfg: cfg, Bus: bus.GetBus(), ProvisioningService: provisioning.NewProvisioningServiceMock(context.Background()), - Live: newTestLive(t), + Live: newTestLive(t, sqlstore.InitTestDB(t)), QuotaService: "a.QuotaService{Cfg: cfg}, LibraryPanelService: &mockLibraryPanelService{}, LibraryElementService: &mockLibraryElementService{}, diff --git a/pkg/api/team_test.go b/pkg/api/team_test.go index d2995504d5f..bf2c5ae631f 100644 --- a/pkg/api/team_test.go +++ b/pkg/api/team_test.go @@ -217,8 +217,6 @@ func TestTeamAPIEndpoint_CreateTeam_FGAC(t *testing.T) { func TestTeamAPIEndpoint_SearchTeams_FGAC(t *testing.T) { sc := setupHTTPServer(t, true, true) - sc.db = sqlstore.InitTestDB(t) - // Seed three teams for i := 1; i <= 3; i++ { _, err := sc.db.CreateTeam(fmt.Sprintf("team%d", i), fmt.Sprintf("team%d@example.org", i), 1) diff --git a/pkg/services/sqlstore/org_users_test.go b/pkg/services/sqlstore/org_users_test.go index 141870d05e3..a018393fd47 100644 --- a/pkg/services/sqlstore/org_users_test.go +++ b/pkg/services/sqlstore/org_users_test.go @@ -61,8 +61,7 @@ func TestSQLStore_GetOrgUsers(t *testing.T) { }, } - store := InitTestDB(t) - store.Cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures(featuremgmt.FlagAccesscontrol).IsEnabled + store := InitTestDB(t, InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagAccesscontrol}}) seedOrgUsers(t, store, 10) for _, tt := range tests { @@ -127,8 +126,7 @@ func TestSQLStore_SearchOrgUsers(t *testing.T) { }, } - store := InitTestDB(t) - store.Cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures(featuremgmt.FlagAccesscontrol).IsEnabled + store := InitTestDB(t, InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagAccesscontrol}}) seedOrgUsers(t, store, 10) for _, tt := range tests { diff --git a/pkg/services/sqlstore/sqlstore.go b/pkg/services/sqlstore/sqlstore.go index e1881e8c4c3..792ce846329 100644 --- a/pkg/services/sqlstore/sqlstore.go +++ b/pkg/services/sqlstore/sqlstore.go @@ -460,6 +460,7 @@ var testSQLStoreMutex sync.Mutex type InitTestDBOpt struct { // EnsureDefaultOrgAndUser flags whether to ensure that default org and user exist. EnsureDefaultOrgAndUser bool + FeatureFlags []string } var featuresEnabledDuringTests = []string{ @@ -490,13 +491,22 @@ func InitTestDB(t ITestDB, opts ...InitTestDBOpt) *SQLStore { func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQLStore, error) { testSQLStoreMutex.Lock() defer testSQLStoreMutex.Unlock() + + if len(opts) == 0 { + opts = []InitTestDBOpt{{EnsureDefaultOrgAndUser: false, FeatureFlags: []string{}}} + } + + features := make([]string, len(featuresEnabledDuringTests)) + copy(features, featuresEnabledDuringTests) + for _, opt := range opts { + if len(opt.FeatureFlags) > 0 { + features = append(features, opt.FeatureFlags...) + } + } + if testSQLStore == nil { dbType := migrator.SQLite - if len(opts) == 0 { - opts = []InitTestDBOpt{{EnsureDefaultOrgAndUser: false}} - } - // environment variable present for test db? if db, present := os.LookupEnv("GRAFANA_TEST_DB"); present { dbType = db @@ -504,13 +514,12 @@ func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQ // set test db config cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(requestedFeature string) bool { - for _, enabledFeature := range featuresEnabledDuringTests { - if enabledFeature == requestedFeature { + cfg.IsFeatureToggleEnabled = func(key string) bool { + for _, enabledFeature := range features { + if enabledFeature == key { return true } } - return false } sec, err := cfg.Raw.NewSection("database") @@ -520,7 +529,6 @@ func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQ if _, err := sec.NewKey("type", dbType); err != nil { return nil, err } - switch dbType { case "mysql": if _, err := sec.NewKey("connection_string", sqlutil.MySQLTestDB().ConnStr); err != nil { @@ -587,6 +595,15 @@ func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQ return testSQLStore, nil } + testSQLStore.Cfg.IsFeatureToggleEnabled = func(key string) bool { + for _, enabledFeature := range features { + if enabledFeature == key { + return true + } + } + return false + } + if err := dialect.TruncateDBTables(); err != nil { return nil, err } diff --git a/pkg/services/sqlstore/team_test.go b/pkg/services/sqlstore/team_test.go index 97d41c79392..23445ccbfe4 100644 --- a/pkg/services/sqlstore/team_test.go +++ b/pkg/services/sqlstore/team_test.go @@ -396,8 +396,7 @@ func TestSQLStore_SearchTeams(t *testing.T) { }, } - store := InitTestDB(t) - store.Cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures(featuremgmt.FlagAccesscontrol).IsEnabled + store := InitTestDB(t, InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagAccesscontrol}}) // Seed 10 teams for i := 1; i <= 10; i++ { @@ -456,9 +455,7 @@ func TestSQLStore_GetTeamMembers_ACFilter(t *testing.T) { require.NoError(t, errAddMember) } - store := InitTestDB(t) - store.Cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures(featuremgmt.FlagAccesscontrol).IsEnabled - + store := InitTestDB(t, InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagAccesscontrol}}) setup(store) type getTeamMembersTestCase struct {