diff --git a/pkg/api/api.go b/pkg/api/api.go index 43d860080d6..bd14803eb13 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -392,7 +392,7 @@ func (hs *HTTPServer) registerRoutes() { apiRoute.Any("/plugin-proxy/:pluginId/*", requestmeta.SetSLOGroup(requestmeta.SLOGroupHighSlow), authorize(ac.EvalPermission(pluginaccesscontrol.ActionAppAccess, pluginIDScope)), hs.ProxyPluginRequest) apiRoute.Any("/plugin-proxy/:pluginId", requestmeta.SetSLOGroup(requestmeta.SLOGroupHighSlow), authorize(ac.EvalPermission(pluginaccesscontrol.ActionAppAccess, pluginIDScope)), hs.ProxyPluginRequest) - if hs.Cfg.PluginAdminEnabled && (hs.Cfg.IsFeatureToggleEnabled(featuremgmt.FlagManagedPluginsInstall) || !hs.Cfg.PluginAdminExternalManageEnabled) { + if hs.Cfg.PluginAdminEnabled && (hs.Features.IsEnabled(featuremgmt.FlagManagedPluginsInstall) || !hs.Cfg.PluginAdminExternalManageEnabled) { apiRoute.Group("/plugins", func(pluginRoute routing.RouteRegister) { pluginRoute.Post("/:pluginId/install", authorize(ac.EvalPermission(pluginaccesscontrol.ActionInstall)), routing.Wrap(hs.InstallPlugin)) pluginRoute.Post("/:pluginId/uninstall", authorize(ac.EvalPermission(pluginaccesscontrol.ActionInstall)), routing.Wrap(hs.UninstallPlugin)) diff --git a/pkg/api/common_test.go b/pkg/api/common_test.go index 9f40753df17..5e186555ec7 100644 --- a/pkg/api/common_test.go +++ b/pkg/api/common_test.go @@ -227,8 +227,8 @@ func setupSimpleHTTPServer(features *featuremgmt.FeatureManager) *HTTPServer { if features == nil { features = featuremgmt.WithFeatures() } - cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = features.IsEnabled + // nolint:staticcheck + cfg := setting.NewCfgWithFeatures(features.IsEnabled) return &HTTPServer{ Cfg: cfg, diff --git a/pkg/api/dashboard_test.go b/pkg/api/dashboard_test.go index 50471218474..a19b2b519c7 100644 --- a/pkg/api/dashboard_test.go +++ b/pkg/api/dashboard_test.go @@ -121,8 +121,8 @@ func TestGetHomeDashboard(t *testing.T) { func newTestLive(t *testing.T, store db.DB) *live.GrafanaLive { features := featuremgmt.WithFeatures() - cfg := &setting.Cfg{AppURL: "http://localhost:3000/"} - cfg.IsFeatureToggleEnabled = features.IsEnabled + cfg := setting.NewCfg() + cfg.AppURL = "http://localhost:3000/" gLive, err := live.ProvideService(nil, cfg, routing.NewRouteRegister(), nil, nil, nil, nil, @@ -897,11 +897,12 @@ func getDashboardShouldReturn200WithConfig(t *testing.T, sc *scenarioContext, pr provisioningService = provisioning.NewProvisioningServiceMock(context.Background()) } + features := featuremgmt.WithFeatures() var err error if dashboardStore == nil { sql := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err = database.ProvideDashboardStore(sql, sql.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql, sql.Cfg), quotaService) + dashboardStore, err = database.ProvideDashboardStore(sql, sql.Cfg, features, tagimpl.ProvideService(sql), quotaService) require.NoError(t, err) } @@ -911,10 +912,9 @@ func getDashboardShouldReturn200WithConfig(t *testing.T, sc *scenarioContext, pr ac := accesscontrolmock.New() folderPermissions := accesscontrolmock.NewMockedPermissionsService() dashboardPermissions := accesscontrolmock.NewMockedPermissionsService() - features := featuremgmt.WithFeatures() folderSvc := folderimpl.ProvideService(ac, bus.ProvideBus(tracing.InitializeTracerForTest()), - cfg, dashboardStore, folderStore, db.InitTestDB(t), featuremgmt.WithFeatures()) + cfg, dashboardStore, folderStore, db.InitTestDB(t), features) if dashboardService == nil { dashboardService, err = service.ProvideDashboardServiceImpl( diff --git a/pkg/api/folder_bench_test.go b/pkg/api/folder_bench_test.go index 407addf94b5..56ffb87d614 100644 --- a/pkg/api/folder_bench_test.go +++ b/pkg/api/folder_bench_test.go @@ -10,6 +10,9 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/bus" @@ -45,8 +48,6 @@ import ( "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/web" "github.com/grafana/grafana/pkg/web/webtest" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) const ( @@ -459,7 +460,7 @@ func setupServer(b testing.TB, sc benchScenario, features *featuremgmt.FeatureMa quotaSrv := quotatest.New(false, nil) - dashStore, err := database.ProvideDashboardStore(sc.db, sc.db.Cfg, features, tagimpl.ProvideService(sc.db, sc.db.Cfg), quotaSrv) + dashStore, err := database.ProvideDashboardStore(sc.db, sc.db.Cfg, features, tagimpl.ProvideService(sc.db), quotaSrv) require.NoError(b, err) folderStore := folderimpl.ProvideDashboardFolderStore(sc.db) diff --git a/pkg/api/index.go b/pkg/api/index.go index db692c272f6..b105887e272 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -166,7 +166,7 @@ func (hs *HTTPServer) setIndexViewData(c *contextmodel.ReqContext) (*dtos.IndexV hs.HooksService.RunIndexDataHooks(&data, c) - data.NavTree.ApplyAdminIA(hs.Cfg.IsFeatureToggleEnabled(featuremgmt.FlagNavAdminSubsections)) + data.NavTree.ApplyAdminIA(hs.Features.IsEnabled(featuremgmt.FlagNavAdminSubsections)) data.NavTree.Sort() return &data, nil diff --git a/pkg/api/plugin_resource_test.go b/pkg/api/plugin_resource_test.go index 1032a1cb869..7f3fa786731 100644 --- a/pkg/api/plugin_resource_test.go +++ b/pkg/api/plugin_resource_test.go @@ -46,9 +46,6 @@ func TestCallResource(t *testing.T) { cfg := setting.NewCfg() cfg.StaticRootPath = staticRootPath - cfg.IsFeatureToggleEnabled = func(_ string) bool { - return false - } cfg.Azure = &azsettings.AzureSettings{} coreRegistry := coreplugin.ProvideCoreRegistry(tracing.InitializeTracerForTest(), nil, &cloudwatch.CloudWatchService{}, nil, nil, nil, nil, diff --git a/pkg/api/plugins_test.go b/pkg/api/plugins_test.go index 9f5af9cb26c..e30fc3bbcc5 100644 --- a/pkg/api/plugins_test.go +++ b/pkg/api/plugins_test.go @@ -64,10 +64,9 @@ func Test_PluginsInstallAndUninstall(t *testing.T) { for _, tc := range tcs { server := SetupAPITestServer(t, func(hs *HTTPServer) { - hs.Cfg = &setting.Cfg{ - PluginAdminEnabled: tc.pluginAdminEnabled, - PluginAdminExternalManageEnabled: tc.pluginAdminExternalManageEnabled} - hs.Cfg.IsFeatureToggleEnabled = func(_ string) bool { return false } + hs.Cfg = setting.NewCfg() + hs.Cfg.PluginAdminEnabled = tc.pluginAdminEnabled + hs.Cfg.PluginAdminExternalManageEnabled = tc.pluginAdminExternalManageEnabled hs.orgService = &orgtest.FakeOrgService{ExpectedOrg: &org.Org{}} hs.pluginInstaller = NewFakePluginInstaller() @@ -484,7 +483,6 @@ func callGetPluginAsset(sc *scenarioContext) { func pluginAssetScenario(t *testing.T, desc string, url string, urlPattern string, cfg *setting.Cfg, pluginRegistry registry.Service, fn scenarioFunc) { t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { - cfg.IsFeatureToggleEnabled = func(_ string) bool { return false } hs := HTTPServer{ Cfg: cfg, pluginStore: pluginstore.New(pluginRegistry, &fakes.FakeLoader{}), diff --git a/pkg/services/accesscontrol/acimpl/service.go b/pkg/services/accesscontrol/acimpl/service.go index 9a649d60bf7..19c95959331 100644 --- a/pkg/services/accesscontrol/acimpl/service.go +++ b/pkg/services/accesscontrol/acimpl/service.go @@ -43,7 +43,7 @@ func ProvideService(cfg *setting.Cfg, db db.DB, routeRegister routing.RouteRegis return nil, err } - if cfg.IsFeatureToggleEnabled(featuremgmt.FlagSplitScopes) { + if features.IsEnabled(featuremgmt.FlagSplitScopes) { // Migrating scopes that haven't been split yet to have kind, attribute and identifier in the DB // This will be removed once we've: // 1) removed the feature toggle and diff --git a/pkg/services/alerting/store_test.go b/pkg/services/alerting/store_test.go index 9124125414e..34f20ad20de 100644 --- a/pkg/services/alerting/store_test.go +++ b/pkg/services/alerting/store_test.go @@ -48,7 +48,7 @@ func TestIntegrationAlertingDataAccess(t *testing.T) { setup := func(t *testing.T) { ss := db.InitTestDB(t) - tagService := tagimpl.ProvideService(ss, ss.Cfg) + tagService := tagimpl.ProvideService(ss) cfg := setting.NewCfg() store = &sqlStore{ db: ss, @@ -335,7 +335,7 @@ func TestIntegrationPausingAlerts(t *testing.T) { t.Run("Given an alert", func(t *testing.T) { ss := db.InitTestDB(t) cfg := setting.NewCfg() - sqlStore := sqlStore{db: ss, cfg: cfg, log: log.New(), tagService: tagimpl.ProvideService(ss, ss.Cfg), features: featuremgmt.WithFeatures()} + sqlStore := sqlStore{db: ss, cfg: cfg, log: log.New(), tagService: tagimpl.ProvideService(ss), features: featuremgmt.WithFeatures()} testDash := insertTestDashboard(t, sqlStore.db, "dashboard with alerts", 1, 0, "", false, "alert") alert, err := insertTestAlert("Alerting title", "Alerting message", testDash.OrgID, testDash.ID, simplejson.New(), sqlStore) diff --git a/pkg/services/annotations/annotationsimpl/xorm_store_test.go b/pkg/services/annotations/annotationsimpl/xorm_store_test.go index 10cf86e8774..d6f626df37b 100644 --- a/pkg/services/annotations/annotationsimpl/xorm_store_test.go +++ b/pkg/services/annotations/annotationsimpl/xorm_store_test.go @@ -39,7 +39,7 @@ func TestIntegrationAnnotations(t *testing.T) { } sql := db.InitTestDB(t) var maximumTagsLength int64 = 60 - repo := xormRepositoryImpl{db: sql, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(sql, sql.Cfg), maximumTagsLength: maximumTagsLength, + repo := xormRepositoryImpl{db: sql, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(sql), maximumTagsLength: maximumTagsLength, features: featuremgmt.WithFeatures(), } @@ -67,7 +67,7 @@ func TestIntegrationAnnotations(t *testing.T) { }) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardstore.ProvideDashboardStore(sql, sql.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql, sql.Cfg), quotaService) + dashboardStore, err := dashboardstore.ProvideDashboardStore(sql, sql.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql), quotaService) require.NoError(t, err) testDashboard1 := dashboards.SaveDashboardCommand{ @@ -534,9 +534,9 @@ func TestIntegrationAnnotationListingWithRBAC(t *testing.T) { sql := db.InitTestDB(t) var maximumTagsLength int64 = 60 - repo := xormRepositoryImpl{db: sql, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(sql, sql.Cfg), maximumTagsLength: maximumTagsLength, features: featuremgmt.WithFeatures()} + repo := xormRepositoryImpl{db: sql, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(sql), maximumTagsLength: maximumTagsLength, features: featuremgmt.WithFeatures()} quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardstore.ProvideDashboardStore(sql, sql.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql, sql.Cfg), quotaService) + dashboardStore, err := dashboardstore.ProvideDashboardStore(sql, sql.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql), quotaService) require.NoError(t, err) testDashboard1 := dashboards.SaveDashboardCommand{ @@ -707,13 +707,13 @@ func TestIntegrationAnnotationListingWithInheritedRBAC(t *testing.T) { }) // dashboard store commands that should be called. - dashStore, err := dashboardstore.ProvideDashboardStore(db, db.Cfg, features, tagimpl.ProvideService(db, db.Cfg), quotatest.New(false, nil)) + dashStore, err := dashboardstore.ProvideDashboardStore(db, db.Cfg, features, tagimpl.ProvideService(db), quotatest.New(false, nil)) require.NoError(t, err) folderSvc := folderimpl.ProvideService(mock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), db.Cfg, dashStore, folderimpl.ProvideDashboardFolderStore(db), db, features) var maximumTagsLength int64 = 60 - repo := xormRepositoryImpl{db: db, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(db, db.Cfg), maximumTagsLength: maximumTagsLength, features: features} + repo := xormRepositoryImpl{db: db, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(db), maximumTagsLength: maximumTagsLength, features: features} parentUID := "" for i := 0; ; i++ { @@ -800,7 +800,7 @@ func TestIntegrationAnnotationListingWithInheritedRBAC(t *testing.T) { for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { var maximumTagsLength int64 = 60 - repo := xormRepositoryImpl{db: db, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(db, db.Cfg), maximumTagsLength: maximumTagsLength, features: tc.features} + repo := xormRepositoryImpl{db: db, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(db), maximumTagsLength: maximumTagsLength, features: tc.features} usr.Permissions = map[int64]map[string][]string{1: tc.permissions} setupRBACPermission(t, db, role, usr) @@ -891,7 +891,7 @@ func BenchmarkFindTags_100k(b *testing.B) { func benchmarkFindTags(b *testing.B, numAnnotations int) { sql := db.InitTestDB(b) var maximumTagsLength int64 = 60 - repo := xormRepositoryImpl{db: sql, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(sql, sql.Cfg), maximumTagsLength: maximumTagsLength} + repo := xormRepositoryImpl{db: sql, cfg: setting.NewCfg(), log: log.New("annotation.test"), tagService: tagimpl.ProvideService(sql), maximumTagsLength: maximumTagsLength} type annotationTag struct { ID int64 `xorm:"pk autoincr 'id'"` diff --git a/pkg/services/dashboards/database/acl_test.go b/pkg/services/dashboards/database/acl_test.go index 1c7bebe1153..ccf54681704 100644 --- a/pkg/services/dashboards/database/acl_test.go +++ b/pkg/services/dashboards/database/acl_test.go @@ -35,7 +35,7 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) { sqlStore = db.InitTestDB(t) quotaService := quotatest.New(false, nil) var err error - dashboardStore, err = ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err = ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) currentUser = createUser(t, sqlStore, "viewer", "Viewer", false) savedFolder = insertTestDashboard(t, dashboardStore, "1 test dash folder", 1, 0, "", true, "prod", "webapp") diff --git a/pkg/services/dashboards/database/database_folder_test.go b/pkg/services/dashboards/database/database_folder_test.go index 666411825ea..4748a241aaf 100644 --- a/pkg/services/dashboards/database/database_folder_test.go +++ b/pkg/services/dashboards/database/database_folder_test.go @@ -47,7 +47,7 @@ func TestIntegrationDashboardFolderDataAccess(t *testing.T) { sqlStore = db.InitTestDB(t) quotaService := quotatest.New(false, nil) var err error - dashboardStore, err = ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err = ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) flder = insertTestDashboard(t, dashboardStore, "1 test dash folder", 1, 0, "", true, "prod", "webapp") dashInRoot = insertTestDashboard(t, dashboardStore, "test dash 67", 1, 0, "", false, "prod", "webapp") @@ -145,7 +145,7 @@ func TestIntegrationDashboardFolderDataAccess(t *testing.T) { sqlStore = db.InitTestDB(t) quotaService := quotatest.New(false, nil) var err error - dashboardStore, err = ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err = ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folder1 = insertTestDashboard(t, dashboardStore, "1 test dash folder", 1, 0, "", true, "prod") folder2 = insertTestDashboard(t, dashboardStore, "2 test dash folder", 1, 0, "", true, "prod") @@ -252,7 +252,7 @@ func TestIntegrationDashboardInheritedFolderRBAC(t *testing.T) { features := featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders) var err error - dashboardWriteStore, err := ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardWriteStore, err := ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) usr := createUser(t, sqlStore, "viewer", "Viewer", false) @@ -412,7 +412,7 @@ func TestIntegrationDashboardInheritedFolderRBAC(t *testing.T) { for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { - dashboardReadStore, err := ProvideDashboardStore(sqlStore, sqlStore.Cfg, tc.features, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotatest.New(false, nil)) + dashboardReadStore, err := ProvideDashboardStore(sqlStore, sqlStore.Cfg, tc.features, tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) viewer.Permissions = map[int64]map[string][]string{viewer.OrgID: tc.permissions} diff --git a/pkg/services/dashboards/database/database_provisioning_test.go b/pkg/services/dashboards/database/database_provisioning_test.go index 8baca27e876..9093c61b4c9 100644 --- a/pkg/services/dashboards/database/database_provisioning_test.go +++ b/pkg/services/dashboards/database/database_provisioning_test.go @@ -20,7 +20,7 @@ func TestIntegrationDashboardProvisioningTest(t *testing.T) { } sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, sqlStore.Cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderCmd := dashboards.SaveDashboardCommand{ diff --git a/pkg/services/dashboards/database/database_test.go b/pkg/services/dashboards/database/database_test.go index aaefbcbf646..af7238567d6 100644 --- a/pkg/services/dashboards/database/database_test.go +++ b/pkg/services/dashboards/database/database_test.go @@ -46,7 +46,7 @@ func TestIntegrationDashboardDataAccess(t *testing.T) { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) var err error - dashboardStore, err = ProvideDashboardStore(sqlStore, cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err = ProvideDashboardStore(sqlStore, cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) savedFolder = insertTestDashboard(t, dashboardStore, "1 test dash folder", 1, 0, "", true, "prod", "webapp") savedDash = insertTestDashboard(t, dashboardStore, "test dash 23", 1, savedFolder.ID, savedFolder.UID, false, "prod", "webapp") @@ -556,10 +556,8 @@ func TestIntegrationDashboardDataAccessGivenPluginWithImportedDashboards(t *test t.Skip("skipping integration test") } sqlStore := db.InitTestDB(t) - cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(key string) bool { return false } quotaService := quotatest.New(false, nil) - dashboardStore, err := ProvideDashboardStore(sqlStore, &setting.Cfg{}, testFeatureToggles, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, &setting.Cfg{}, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) pluginId := "test-app" @@ -582,10 +580,8 @@ func TestIntegrationDashboard_SortingOptions(t *testing.T) { t.Skip("skipping integration test") } sqlStore := db.InitTestDB(t) - cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(key string) bool { return false } quotaService := quotatest.New(false, nil) - dashboardStore, err := ProvideDashboardStore(sqlStore, &setting.Cfg{}, testFeatureToggles, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, &setting.Cfg{}, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashB := insertTestDashboard(t, dashboardStore, "Beta", 1, 0, "", false) @@ -636,9 +632,8 @@ func TestIntegrationDashboard_Filter(t *testing.T) { } sqlStore := db.InitTestDB(t) cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(key string) bool { return false } quotaService := quotatest.New(false, nil) - dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) insertTestDashboard(t, dashboardStore, "Alfa", 1, 0, "", false) dashB := insertTestDashboard(t, dashboardStore, "Beta", 1, 0, "", false) @@ -681,9 +676,8 @@ func TestIntegrationDashboard_Filter(t *testing.T) { func TestGetExistingDashboardByTitleAndFolder(t *testing.T) { sqlStore := db.InitTestDB(t) cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(key string) bool { return false } quotaService := quotatest.New(false, nil) - dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, testFeatureToggles, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) insertTestDashboard(t, dashboardStore, "Apple", 1, 0, "", false) t.Run("Finds a dashboard with existing name in root directory and throws DashboardWithSameNameInFolderExists error", func(t *testing.T) { @@ -720,10 +714,9 @@ func TestIntegrationFindDashboardsByTitle(t *testing.T) { sqlStore := db.InitTestDB(t) cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(key string) bool { return false } quotaService := quotatest.New(false, nil) features := featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders, featuremgmt.FlagPanelTitleSearch) - dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) orgID := int64(1) @@ -803,7 +796,7 @@ func TestIntegrationFindDashboardsByTitle(t *testing.T) { for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { - dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) res, err := dashboardStore.FindDashboards(context.Background(), &dashboards.FindPersistedDashboardsQuery{ SignedInUser: user, @@ -836,10 +829,9 @@ func TestIntegrationFindDashboardsByFolder(t *testing.T) { sqlStore := db.InitTestDB(t) cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = func(key string) bool { return false } quotaService := quotatest.New(false, nil) features := featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders, featuremgmt.FlagPanelTitleSearch) - dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) orgID := int64(1) @@ -1047,7 +1039,7 @@ func TestIntegrationFindDashboardsByFolder(t *testing.T) { for _, tc := range testCases { for featureFlags := range tc.expectedResult { t.Run(fmt.Sprintf("%s with featureFlags: %v", tc.desc, featureFlags), func(t *testing.T) { - dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(featureFlags), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(featureFlags), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) res, err := dashboardStore.FindDashboards(context.Background(), &dashboards.FindPersistedDashboardsQuery{ SignedInUser: user, diff --git a/pkg/services/dashboards/service/dashboard_service_integration_test.go b/pkg/services/dashboards/service/dashboard_service_integration_test.go index e6b33c28f4a..dadd20da48b 100644 --- a/pkg/services/dashboards/service/dashboard_service_integration_test.go +++ b/pkg/services/dashboards/service/dashboard_service_integration_test.go @@ -875,12 +875,12 @@ func permissionScenario(t *testing.T, desc string, canSave bool, fn permissionSc } t.Run(desc, func(t *testing.T) { + features := featuremgmt.WithFeatures() cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) ac := actest.FakeAccessControl{ExpectedEvaluate: true} - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore) folderPermissions := accesscontrolmock.NewMockedPermissionsService() @@ -940,11 +940,11 @@ func permissionScenario(t *testing.T, desc string, canSave bool, fn permissionSc func callSaveWithResult(t *testing.T, cmd dashboards.SaveDashboardCommand, sqlStore db.DB) *dashboards.Dashboard { t.Helper() + features := featuremgmt.WithFeatures() dto := toSaveDashboardDto(cmd) cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore) folderPermissions := accesscontrolmock.NewMockedPermissionsService() @@ -968,11 +968,11 @@ func callSaveWithResult(t *testing.T, cmd dashboards.SaveDashboardCommand, sqlSt } func callSaveWithError(t *testing.T, cmd dashboards.SaveDashboardCommand, sqlStore db.DB) error { + features := featuremgmt.WithFeatures() dto := toSaveDashboardDto(cmd) cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore) service, err := ProvideDashboardServiceImpl( @@ -1010,17 +1010,17 @@ func saveTestDashboard(t *testing.T, title string, orgID, folderID int64, folder OrgRole: org.RoleAdmin, }, } + features := featuremgmt.WithFeatures() cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore) dashboardPermissions := accesscontrolmock.NewMockedPermissionsService() dashboardPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil) service, err := ProvideDashboardServiceImpl( cfg, dashboardStore, folderStore, &dummyDashAlertExtractor{}, - featuremgmt.WithFeatures(), + features, accesscontrolmock.NewMockedPermissionsService(), dashboardPermissions, actest.FakeAccessControl{}, @@ -1060,10 +1060,10 @@ func saveTestFolder(t *testing.T, title string, orgID int64, sqlStore db.DB) *da }, } + features := featuremgmt.WithFeatures() cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore) folderPermissions := accesscontrolmock.NewMockedPermissionsService() diff --git a/pkg/services/folder/folderimpl/dashboard_folder_store_test.go b/pkg/services/folder/folderimpl/dashboard_folder_store_test.go index fa8c31084dd..0f5b0ce9334 100644 --- a/pkg/services/folder/folderimpl/dashboard_folder_store_test.go +++ b/pkg/services/folder/folderimpl/dashboard_folder_store_test.go @@ -4,6 +4,8 @@ import ( "context" "testing" + "github.com/stretchr/testify/require" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/services/dashboards" @@ -13,7 +15,6 @@ import ( "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/services/tag/tagimpl" "github.com/grafana/grafana/pkg/setting" - "github.com/stretchr/testify/require" ) func TestIntegrationDashboardFolderStore(t *testing.T) { @@ -25,7 +26,7 @@ func TestIntegrationDashboardFolderStore(t *testing.T) { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) var err error - dashboardStore, err = database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(featuremgmt.FlagPanelTitleSearch), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err = database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(featuremgmt.FlagPanelTitleSearch), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) } t.Run("Given dashboard and folder with the same title", func(t *testing.T) { diff --git a/pkg/services/folder/folderimpl/folder_test.go b/pkg/services/folder/folderimpl/folder_test.go index 28d8afcbaf8..c4e7cd0851a 100644 --- a/pkg/services/folder/folderimpl/folder_test.go +++ b/pkg/services/folder/folderimpl/folder_test.go @@ -343,7 +343,7 @@ func TestIntegrationNestedFolderService(t *testing.T) { cfg := setting.NewCfg() featuresFlagOn := featuremgmt.WithFeatures("nestedFolders") - dashStore, err := database.ProvideDashboardStore(db, db.Cfg, featuresFlagOn, tagimpl.ProvideService(db, db.Cfg), quotaService) + dashStore, err := database.ProvideDashboardStore(db, db.Cfg, featuresFlagOn, tagimpl.ProvideService(db), quotaService) require.NoError(t, err) nestedFolderStore := ProvideStore(db, db.Cfg, featuresFlagOn) @@ -454,7 +454,7 @@ func TestIntegrationNestedFolderService(t *testing.T) { }) t.Run("With nested folder feature flag off", func(t *testing.T) { featuresFlagOff := featuremgmt.WithFeatures() - dashStore, err := database.ProvideDashboardStore(db, db.Cfg, featuresFlagOff, tagimpl.ProvideService(db, db.Cfg), quotaService) + dashStore, err := database.ProvideDashboardStore(db, db.Cfg, featuresFlagOff, tagimpl.ProvideService(db), quotaService) require.NoError(t, err) nestedFolderStore := ProvideStore(db, db.Cfg, featuresFlagOff) @@ -613,7 +613,7 @@ func TestIntegrationNestedFolderService(t *testing.T) { lps, err := librarypanels.ProvideService(cfg, db, routeRegister, elementService, tc.service) require.NoError(t, err) - dashStore, err := database.ProvideDashboardStore(db, db.Cfg, tc.featuresFlag, tagimpl.ProvideService(db, db.Cfg), quotaService) + dashStore, err := database.ProvideDashboardStore(db, db.Cfg, tc.featuresFlag, tagimpl.ProvideService(db), quotaService) require.NoError(t, err) nestedFolderStore := ProvideStore(db, db.Cfg, tc.featuresFlag) tc.service.dashboardStore = dashStore diff --git a/pkg/services/grafana-apiserver/config_test.go b/pkg/services/grafana-apiserver/config_test.go index 78c0cf52622..83c49fc0a86 100644 --- a/pkg/services/grafana-apiserver/config_test.go +++ b/pkg/services/grafana-apiserver/config_test.go @@ -6,16 +6,17 @@ import ( "github.com/stretchr/testify/require" + "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/setting" ) func TestNewConfig(t *testing.T) { - cfg := setting.NewCfg() + // nolint:staticcheck + cfg := setting.NewCfgWithFeatures(featuremgmt.WithFeatures(featuremgmt.FlagGrafanaAPIServer).IsEnabled) cfg.Env = setting.Prod cfg.DataPath = "/tmp/grafana" cfg.HTTPAddr = "10.0.0.1" cfg.HTTPPort = "4000" - cfg.IsFeatureToggleEnabled = func(_ string) bool { return true } cfg.AppURL = "http://test:4000" section := cfg.Raw.Section("grafana-apiserver") diff --git a/pkg/services/libraryelements/libraryelements_test.go b/pkg/services/libraryelements/libraryelements_test.go index 694658f81db..bfcf0671b4d 100644 --- a/pkg/services/libraryelements/libraryelements_test.go +++ b/pkg/services/libraryelements/libraryelements_test.go @@ -283,11 +283,10 @@ func createDashboard(t *testing.T, sqlStore db.DB, user user.SignedInUser, dash Overwrite: false, } - cfg := setting.NewCfg() features := featuremgmt.WithFeatures() - cfg.IsFeatureToggleEnabled = features.IsEnabled + cfg := setting.NewCfg() quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashAlertExtractor := alerting.ProvideDashAlertExtractorService(nil, nil, nil) ac := actest.FakeAccessControl{ExpectedEvaluate: true} @@ -310,12 +309,11 @@ func createDashboard(t *testing.T, sqlStore db.DB, user user.SignedInUser, dash func createFolder(t *testing.T, sc scenarioContext, title string) *folder.Folder { t.Helper() - cfg := setting.NewCfg() features := featuremgmt.WithFeatures() - cfg.IsFeatureToggleEnabled = features.IsEnabled + cfg := setting.NewCfg() ac := actest.FakeAccessControl{} quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sc.sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sc.sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sc.sqlStore, cfg, features, tagimpl.ProvideService(sc.sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sc.sqlStore) @@ -370,12 +368,12 @@ func validateAndUnMarshalArrayResponse(t *testing.T, resp response.Response) lib func scenarioWithPanel(t *testing.T, desc string, fn func(t *testing.T, sc scenarioContext)) { t.Helper() + features := featuremgmt.WithFeatures() sqlStore := db.InitTestDB(t) ac := actest.FakeAccessControl{} quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) - features := featuremgmt.WithFeatures() folderPermissions := acmock.NewMockedPermissionsService() dashboardPermissions := acmock.NewMockedPermissionsService() folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore) @@ -428,11 +426,11 @@ func testScenario(t *testing.T, desc string, fn func(t *testing.T, sc scenarioCo req = req.WithContext(ctx) webCtx := web.Context{Req: req} + features := featuremgmt.WithFeatures() sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) - features := featuremgmt.WithFeatures() ac := acimpl.ProvideAccessControl(sqlStore.Cfg) folderPermissions := acmock.NewMockedPermissionsService() folderPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil) diff --git a/pkg/services/librarypanels/librarypanels_test.go b/pkg/services/librarypanels/librarypanels_test.go index 3914864451e..e370d20f1eb 100644 --- a/pkg/services/librarypanels/librarypanels_test.go +++ b/pkg/services/librarypanels/librarypanels_test.go @@ -714,10 +714,10 @@ func createDashboard(t *testing.T, sqlStore db.DB, user *user.SignedInUser, dash Overwrite: false, } + features := featuremgmt.WithFeatures() cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashAlertService := alerting.ProvideDashAlertExtractorService(nil, nil, nil) ac := actest.FakeAccessControl{ExpectedEvaluate: true} @@ -739,12 +739,11 @@ func createDashboard(t *testing.T, sqlStore db.DB, user *user.SignedInUser, dash func createFolder(t *testing.T, sc scenarioContext, title string) *folder.Folder { t.Helper() + features := featuremgmt.WithFeatures() ac := actest.FakeAccessControl{ExpectedEvaluate: true} cfg := setting.NewCfg() - cfg.IsFeatureToggleEnabled = featuremgmt.WithFeatures().IsEnabled - features := featuremgmt.WithFeatures() quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sc.sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sc.sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sc.sqlStore, cfg, features, tagimpl.ProvideService(sc.sqlStore), quotaService) require.NoError(t, err) folderStore := folderimpl.ProvideDashboardFolderStore(sc.sqlStore) s := folderimpl.ProvideService(ac, bus.ProvideBus(tracing.InitializeTracerForTest()), cfg, dashboardStore, folderStore, sc.sqlStore, features) @@ -825,7 +824,7 @@ func testScenario(t *testing.T, desc string, fn func(t *testing.T, sc scenarioCo require.NoError(t, err) guardian.InitAccessControlGuardian(setting.NewCfg(), ac, dashService) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) features := featuremgmt.WithFeatures() folderService := folderimpl.ProvideService(ac, bus.ProvideBus(tracing.InitializeTracerForTest()), cfg, dashboardStore, folderStore, sqlStore, features) diff --git a/pkg/services/ngalert/migration/store/testing.go b/pkg/services/ngalert/migration/store/testing.go index a21dfa4d415..21bfe46ef8a 100644 --- a/pkg/services/ngalert/migration/store/testing.go +++ b/pkg/services/ngalert/migration/store/testing.go @@ -64,7 +64,7 @@ func NewTestMigrationStore(t *testing.T, sqlStore *sqlstore.SQLStore, cfg *setti userSvc, err := userimpl.ProvideService(sqlStore, orgService, cfg, teamSvc, cache, quotaService, bundleregistry.ProvideService()) require.NoError(t, err) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) folderService := folderimpl.ProvideService(ac, bus, cfg, dashboardStore, folderStore, sqlStore, features) diff --git a/pkg/services/ngalert/testutil/testutil.go b/pkg/services/ngalert/testutil/testutil.go index 09b6e568c71..4f4caea9941 100644 --- a/pkg/services/ngalert/testutil/testutil.go +++ b/pkg/services/ngalert/testutil/testutil.go @@ -3,6 +3,9 @@ package testutil import ( "testing" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/services/accesscontrol" @@ -19,8 +22,6 @@ import ( "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/services/tag/tagimpl" "github.com/grafana/grafana/pkg/setting" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" ) func SetupFolderService(tb testing.TB, cfg *setting.Cfg, db db.DB, dashboardStore dashboards.Store, folderStore *folderimpl.DashboardFolderStoreImpl, bus *bus.InProcBus) folder.Service { @@ -53,7 +54,7 @@ func SetupDashboardService(tb testing.TB, sqlStore *sqlstore.SQLStore, fs *folde features := featuremgmt.WithFeatures() quotaService := quotatest.New(false, nil) - dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := database.ProvideDashboardStore(sqlStore, sqlStore.Cfg, features, tagimpl.ProvideService(sqlStore), quotaService) require.NoError(tb, err) dashboardService, err := dashboardservice.ProvideDashboardServiceImpl( diff --git a/pkg/services/pluginsintegration/plugins_integration_test.go b/pkg/services/pluginsintegration/plugins_integration_test.go index e912999f86d..1a080ec2c28 100644 --- a/pkg/services/pluginsintegration/plugins_integration_test.go +++ b/pkg/services/pluginsintegration/plugins_integration_test.go @@ -67,16 +67,16 @@ func TestIntegrationPluginManager(t *testing.T) { ) require.NoError(t, err) + features := featuremgmt.WithFeatures() cfg := &setting.Cfg{ Raw: raw, StaticRootPath: staticRootPath, BundledPluginsPath: bundledPluginsPath, Azure: &azsettings.AzureSettings{}, - IsFeatureToggleEnabled: func(_ string) bool { return false }, + IsFeatureToggleEnabled: features.IsEnabled, } tracer := tracing.InitializeTracerForTest() - features := featuremgmt.WithFeatures() hcp := httpclient.NewProvider() am := azuremonitor.ProvideService(cfg, hcp, features) diff --git a/pkg/services/publicdashboards/api/query_test.go b/pkg/services/publicdashboards/api/query_test.go index 51d823d0048..21dfd395803 100644 --- a/pkg/services/publicdashboards/api/query_test.go +++ b/pkg/services/publicdashboards/api/query_test.go @@ -12,6 +12,10 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/db" @@ -35,9 +39,6 @@ import ( "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util/errutil" "github.com/grafana/grafana/pkg/web" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" ) func TestAPIViewPublicDashboard(t *testing.T) { @@ -314,7 +315,7 @@ func TestIntegrationUnauthenticatedUserCanGetPubdashPanelQueryData(t *testing.T) } // create dashboard - dashboardStoreService, err := dashboardStore.ProvideDashboardStore(db, db.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(db, db.Cfg), quotatest.New(false, nil)) + dashboardStoreService, err := dashboardStore.ProvideDashboardStore(db, db.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(db), quotatest.New(false, nil)) require.NoError(t, err) dashboard, err := dashboardStoreService.SaveDashboard(context.Background(), saveDashboardCmd) require.NoError(t, err) diff --git a/pkg/services/publicdashboards/database/database_test.go b/pkg/services/publicdashboards/database/database_test.go index 2379b99a795..b20c01bf12b 100644 --- a/pkg/services/publicdashboards/database/database_test.go +++ b/pkg/services/publicdashboards/database/database_test.go @@ -7,6 +7,9 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/services/accesscontrol" @@ -22,8 +25,6 @@ import ( "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) // This is what the db sets empty time settings to @@ -59,7 +60,7 @@ func TestIntegrationListPublicDashboard(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t, db.InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagPublicDashboards}}) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore = ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) @@ -174,7 +175,7 @@ func TestIntegrationFindDashboard(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) - store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashboardStore = store publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) @@ -204,7 +205,7 @@ func TestIntegrationExistsEnabledByAccessToken(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) - store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashboardStore = store publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) @@ -277,7 +278,7 @@ func TestIntegrationExistsEnabledByDashboardUid(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) - store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashboardStore = store publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) @@ -342,7 +343,7 @@ func TestIntegrationFindByDashboardUid(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) - store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashboardStore = store publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) @@ -410,7 +411,7 @@ func TestIntegrationFindByAccessToken(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) - dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotatest.New(false, nil)) + dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) savedDashboard = insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true) @@ -479,7 +480,7 @@ func TestIntegrationCreatePublicDashboard(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t, db.InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagPublicDashboards}}) quotaService := quotatest.New(false, nil) - store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashboardStore = store publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) @@ -559,7 +560,7 @@ func TestIntegrationUpdatePublicDashboard(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t, db.InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagPublicDashboards}}) quotaService := quotatest.New(false, nil) - dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) savedDashboard = insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true) @@ -663,7 +664,7 @@ func TestIntegrationGetOrgIdByAccessToken(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) - dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) savedDashboard = insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true) @@ -735,7 +736,7 @@ func TestIntegrationDelete(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t) - dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotatest.New(false, nil)) + dashboardStore, err = dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) savedDashboard = insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true) @@ -787,7 +788,7 @@ func TestGetDashboardByFolder(t *testing.T) { t.Run("can get all pubdashes for dashboard folder and org", func(t *testing.T) { sqlStore, cfg := db.InitTestDBwithCfg(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) pubdashStore := ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "title", 1, 1, "1", true, PublicShareType) @@ -819,7 +820,7 @@ func TestGetMetrics(t *testing.T) { setup := func() { sqlStore, cfg = db.InitTestDBwithCfg(t, db.InitTestDBOpt{FeatureFlags: []string{featuremgmt.FlagPublicDashboards}}) quotaService := quotatest.New(false, nil) - store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, cfg), quotaService) + store, err := dashboardsDB.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) dashboardStore = store publicdashboardStore = ProvideStore(sqlStore, cfg, featuremgmt.WithFeatures()) diff --git a/pkg/services/publicdashboards/service/query_test.go b/pkg/services/publicdashboards/service/query_test.go index 05ab7194513..93acbd6fc57 100644 --- a/pkg/services/publicdashboards/service/query_test.go +++ b/pkg/services/publicdashboards/service/query_test.go @@ -9,6 +9,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/log" @@ -682,7 +683,7 @@ const ( func TestGetQueryDataResponse(t *testing.T) { sqlStore := sqlstore.InitTestDB(t) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotatest.New(false, nil)) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) serviceWrapper := ProvideServiceWrapper(publicdashboardStore) @@ -745,7 +746,7 @@ func TestFindAnnotations(t *testing.T) { t.Run("will build anonymous user with correct permissions to get annotations", func(t *testing.T) { sqlStore := sqlstore.InitTestDB(t) config := setting.NewCfg() - tagService := tagimpl.ProvideService(sqlStore, sqlStore.Cfg) + tagService := tagimpl.ProvideService(sqlStore) annotationsRepo := annotationsimpl.ProvideService(sqlStore, config, featuremgmt.WithFeatures(), tagService) fakeStore := FakePublicDashboardStore{} service := &PublicDashboardServiceImpl{ @@ -1127,7 +1128,7 @@ func TestFindAnnotations(t *testing.T) { func TestGetMetricRequest(t *testing.T) { sqlStore := db.InitTestDB(t) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotatest.New(false, nil)) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]interface{}{}, nil) @@ -1212,7 +1213,7 @@ func TestGetUniqueDashboardDatasourceUids(t *testing.T) { func TestBuildMetricRequest(t *testing.T) { sqlStore := db.InitTestDB(t) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotatest.New(false, nil)) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) serviceWrapper := ProvideServiceWrapper(publicdashboardStore) @@ -1373,7 +1374,7 @@ func TestBuildMetricRequest(t *testing.T) { func TestBuildAnonymousUser(t *testing.T) { sqlStore := db.InitTestDB(t) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotatest.New(false, nil)) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]interface{}{}, nil) diff --git a/pkg/services/publicdashboards/service/service_test.go b/pkg/services/publicdashboards/service/service_test.go index 1258692ea80..188d386080d 100644 --- a/pkg/services/publicdashboards/service/service_test.go +++ b/pkg/services/publicdashboards/service/service_test.go @@ -592,7 +592,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Create public dashboard", func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]any{}, nil) @@ -678,7 +678,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run(fmt.Sprintf("Create public dashboard with %s null boolean fields stores them as false", tt.Name), func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]any{}, nil) @@ -716,7 +716,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Validate pubdash has default time setting value", func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]any{}, nil) @@ -749,7 +749,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Creates pubdash whose dashboard has template variables successfully", func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) templateVars := make([]map[string]any, 1) @@ -825,7 +825,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Create public dashboard with given pubdash uid", func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]any{}, nil) @@ -903,7 +903,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Create public dashboard with given pubdash access token", func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]interface{}{}, nil) @@ -964,7 +964,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Returns error if public dashboard exists", func(t *testing.T) { sqlStore := db.InitTestDB(t) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotatest.New(false, nil)) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotatest.New(false, nil)) require.NoError(t, err) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]any{}, nil) @@ -1001,7 +1001,7 @@ func TestCreatePublicDashboard(t *testing.T) { t.Run("Validate pubdash has default share value", func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) dashboard := insertTestDashboard(t, dashboardStore, "testDashie", 1, 0, "", true, []map[string]any{}, nil) @@ -1044,7 +1044,7 @@ func assertFalseIfNull(t *testing.T, expectedValue bool, nullableValue *bool) { func TestUpdatePublicDashboard(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) serviceWrapper := ProvideServiceWrapper(publicdashboardStore) @@ -1230,7 +1230,7 @@ func TestUpdatePublicDashboard(t *testing.T) { t.Run(fmt.Sprintf("Update public dashboard with %s null boolean fields let those fields with old persisted value", tt.Name), func(t *testing.T) { sqlStore := db.InitTestDB(t) quotaService := quotatest.New(false, nil) - dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + dashboardStore, err := dashboardsDB.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) publicdashboardStore := database.ProvideStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures()) serviceWrapper := ProvideServiceWrapper(publicdashboardStore) diff --git a/pkg/services/quota/quotaimpl/quota_test.go b/pkg/services/quota/quotaimpl/quota_test.go index c2806f1a090..182624a3086 100644 --- a/pkg/services/quota/quotaimpl/quota_test.go +++ b/pkg/services/quota/quotaimpl/quota_test.go @@ -473,7 +473,7 @@ func setupEnv(t *testing.T, sqlStore *sqlstore.SQLStore, b bus.Bus, quotaService require.NoError(t, err) _, err = authimpl.ProvideUserAuthTokenService(sqlStore, nil, quotaService, sqlStore.Cfg) require.NoError(t, err) - _, err = dashboardStore.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore, sqlStore.Cfg), quotaService) + _, err = dashboardStore.ProvideDashboardStore(sqlStore, sqlStore.Cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore), quotaService) require.NoError(t, err) secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore()) secretsStore := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger")) diff --git a/pkg/services/searchV2/service.go b/pkg/services/searchV2/service.go index 65822e432f5..e27ac7691e2 100644 --- a/pkg/services/searchV2/service.go +++ b/pkg/services/searchV2/service.go @@ -116,10 +116,7 @@ func ProvideService(cfg *setting.Cfg, sql db.DB, entityEventStore store.EntityEv } func (s *StandardSearchService) IsDisabled() bool { - if s.cfg == nil { - return true - } - return !s.cfg.IsFeatureToggleEnabled(featuremgmt.FlagPanelTitleSearch) + return !s.features.IsEnabled(featuremgmt.FlagPanelTitleSearch) } func (s *StandardSearchService) Run(ctx context.Context) error { diff --git a/pkg/services/sqlstore/migrations/accesscontrol/test/ac_test.go b/pkg/services/sqlstore/migrations/accesscontrol/test/ac_test.go index abcf5548625..37def4bd55c 100644 --- a/pkg/services/sqlstore/migrations/accesscontrol/test/ac_test.go +++ b/pkg/services/sqlstore/migrations/accesscontrol/test/ac_test.go @@ -14,6 +14,7 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/dashboards" + "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/sqlstore/migrations" acmig "github.com/grafana/grafana/pkg/services/sqlstore/migrations/accesscontrol" @@ -181,10 +182,8 @@ func TestMigrations(t *testing.T) { }, { desc: "without editors can admin", - config: &setting.Cfg{ - IsFeatureToggleEnabled: func(key string) bool { return key == "accesscontrol" }, - Raw: ini.Empty(), - }, + // nolint:staticcheck + config: setting.NewCfgWithFeatures(featuremgmt.WithFeatures("accesscontrol").IsEnabled), expectedRolePerms: map[string][]rawPermission{ "managed:users:1:permissions": {{Action: "teams:read", Scope: team1Scope}}, "managed:users:2:permissions": {{Action: "teams:read", Scope: team1Scope}}, diff --git a/pkg/services/sqlstore/permissions/dashboard_test.go b/pkg/services/sqlstore/permissions/dashboard_test.go index a47c3182190..9f04d6f7a08 100644 --- a/pkg/services/sqlstore/permissions/dashboard_test.go +++ b/pkg/services/sqlstore/permissions/dashboard_test.go @@ -839,7 +839,7 @@ func setupNestedTest(t *testing.T, usr *user.SignedInUser, perms []accesscontrol db := sqlstore.InitTestDB(t) // dashboard store commands that should be called. - dashStore, err := database.ProvideDashboardStore(db, db.Cfg, features, tagimpl.ProvideService(db, db.Cfg), quotatest.New(false, nil)) + dashStore, err := database.ProvideDashboardStore(db, db.Cfg, features, tagimpl.ProvideService(db), quotatest.New(false, nil)) require.NoError(t, err) folderSvc := folderimpl.ProvideService(mock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), db.Cfg, dashStore, folderimpl.ProvideDashboardFolderStore(db), db, features) diff --git a/pkg/services/sqlstore/permissions/dashboards_bench_test.go b/pkg/services/sqlstore/permissions/dashboards_bench_test.go index 84e8cb94718..c071ba3e6c4 100644 --- a/pkg/services/sqlstore/permissions/dashboards_bench_test.go +++ b/pkg/services/sqlstore/permissions/dashboards_bench_test.go @@ -79,7 +79,7 @@ func setupBenchMark(b *testing.B, usr user.SignedInUser, features featuremgmt.Fe quotaService := quotatest.New(false, nil) - dashboardWriteStore, err := database.ProvideDashboardStore(store, store.Cfg, features, tagimpl.ProvideService(store, store.Cfg), quotaService) + dashboardWriteStore, err := database.ProvideDashboardStore(store, store.Cfg, features, tagimpl.ProvideService(store), quotaService) require.NoError(b, err) folderSvc := folderimpl.ProvideService(mock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), store.Cfg, dashboardWriteStore, folderimpl.ProvideDashboardFolderStore(store), store, features) diff --git a/pkg/services/sqlstore/sqlstore_test.go b/pkg/services/sqlstore/sqlstore_test.go index 5a99bc14bd8..282503b682f 100644 --- a/pkg/services/sqlstore/sqlstore_test.go +++ b/pkg/services/sqlstore/sqlstore_test.go @@ -23,7 +23,7 @@ type sqlStoreTest struct { dbUser string dbPwd string expConnStr string - features []string + features featuremgmt.FeatureToggles err error } @@ -101,14 +101,14 @@ var sqlStoreTestCases = []sqlStoreTest{ name: "MySQL with ANSI_QUOTES mode", dbType: "mysql", dbHost: "[::1]", - features: []string{featuremgmt.FlagMysqlAnsiQuotes}, + features: featuremgmt.WithFeatures(featuremgmt.FlagMysqlAnsiQuotes), expConnStr: ":@tcp([::1])/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&sql_mode='ANSI_QUOTES'", }, { name: "New DB library", dbType: "mysql", dbHost: "[::1]", - features: []string{featuremgmt.FlagNewDBLibrary}, + features: featuremgmt.WithFeatures(featuremgmt.FlagNewDBLibrary), expConnStr: ":@tcp([::1])/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&sql_mode='ANSI_QUOTES'&parseTime=true", }, } @@ -180,7 +180,11 @@ func TestIntegrationIsUniqueConstraintViolation(t *testing.T) { func makeSQLStoreTestConfig(t *testing.T, tc sqlStoreTest) *setting.Cfg { t.Helper() - cfg := setting.NewCfg() + if tc.features == nil { + tc.features = featuremgmt.WithFeatures() + } + // nolint:staticcheck + cfg := setting.NewCfgWithFeatures(tc.features.IsEnabled) sec, err := cfg.Raw.NewSection("database") require.NoError(t, err) @@ -197,14 +201,5 @@ func makeSQLStoreTestConfig(t *testing.T, tc sqlStoreTest) *setting.Cfg { _, err = sec.NewKey("password", tc.dbPwd) require.NoError(t, err) - cfg.IsFeatureToggleEnabled = func(key string) bool { - for _, f := range tc.features { - if f == key { - return true - } - } - return false - } - return cfg } diff --git a/pkg/services/tag/tagimpl/sqlx_store.go b/pkg/services/tag/tagimpl/sqlx_store.go deleted file mode 100644 index 7c411b2d308..00000000000 --- a/pkg/services/tag/tagimpl/sqlx_store.go +++ /dev/null @@ -1,34 +0,0 @@ -package tagimpl - -import ( - "context" - "database/sql" - "errors" - - "github.com/grafana/grafana/pkg/services/sqlstore/session" - "github.com/grafana/grafana/pkg/services/tag" -) - -type sqlxStore struct { - sess *session.SessionDB -} - -func (s *sqlxStore) EnsureTagsExist(ctx context.Context, tags []*tag.Tag) ([]*tag.Tag, error) { - for _, tagElement := range tags { - var existingTag tag.Tag - err := s.sess.Get(ctx, &existingTag, `SELECT * FROM tag WHERE "key"=? AND "value"=?`, tagElement.Key, tagElement.Value) - if err != nil { - if errors.Is(err, sql.ErrNoRows) { - tagElement.Id, err = s.sess.ExecWithReturningId(ctx, `INSERT INTO tag ("key", "value") VALUES (?, ?)`, tagElement.Key, tagElement.Value) - if err != nil { - return tags, err - } - } else { - return tags, err - } - } else { - tagElement.Id = existingTag.Id - } - } - return tags, nil -} diff --git a/pkg/services/tag/tagimpl/sqlx_store_test.go b/pkg/services/tag/tagimpl/sqlx_store_test.go deleted file mode 100644 index b67846a8f58..00000000000 --- a/pkg/services/tag/tagimpl/sqlx_store_test.go +++ /dev/null @@ -1,16 +0,0 @@ -package tagimpl - -import ( - "testing" - - "github.com/grafana/grafana/pkg/infra/db" -) - -func TestIntegrationSQLxSavingTags(t *testing.T) { - if testing.Short() { - t.Skip("skipping integration test") - } - testIntegrationSavingTags(t, func(ss db.DB) store { - return &sqlxStore{sess: ss.GetSqlxSession()} - }) -} diff --git a/pkg/services/tag/tagimpl/tag.go b/pkg/services/tag/tagimpl/tag.go index cbddc5eed17..f52d8eb5b5f 100644 --- a/pkg/services/tag/tagimpl/tag.go +++ b/pkg/services/tag/tagimpl/tag.go @@ -4,23 +4,14 @@ import ( "context" "github.com/grafana/grafana/pkg/infra/db" - "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/tag" - "github.com/grafana/grafana/pkg/setting" ) type Service struct { store store } -func ProvideService(db db.DB, cfg *setting.Cfg) *Service { - if cfg.IsFeatureToggleEnabled(featuremgmt.FlagNewDBLibrary) { - return &Service{ - store: &sqlxStore{ - sess: db.GetSqlxSession(), - }, - } - } +func ProvideService(db db.DB) *Service { return &Service{ store: &sqlStore{ db: db, diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 1983bfbb2f9..09513b0ced8 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -980,9 +980,22 @@ func NewCfg() *Cfg { Logger: log.New("settings"), Raw: ini.Empty(), Azure: &azsettings.AzureSettings{}, + + // Avoid nil pointer + IsFeatureToggleEnabled: func(_ string) bool { + return false + }, } } +// Deprecated: Avoid using IsFeatureToggleEnabled from settings. If you need to access +// feature flags, read them from the FeatureToggle (or FeatureManager) interface +func NewCfgWithFeatures(features func(string) bool) *Cfg { + cfg := NewCfg() + cfg.IsFeatureToggleEnabled = features + return cfg +} + func NewCfgFromArgs(args CommandLineArgs) (*Cfg, error) { cfg := NewCfg() if err := cfg.Load(args); err != nil {