From 80447dd0ccd6bf79396356295791c9de5d65d23e Mon Sep 17 00:00:00 2001 From: idafurjes <36131195+idafurjes@users.noreply.github.com> Date: Mon, 26 Feb 2024 14:52:16 +0100 Subject: [PATCH] Restructure cloudmigration service (#83211) * Restructure cloudmigation service * Adjust codewoners and wire * Comment out unused metrics --- .github/CODEOWNERS | 2 +- pkg/server/wire.go | 4 +- .../api/api.go | 13 +++--- .../api/api_test.go | 0 .../cloudmigrationimpl/cloudmigration.go} | 37 ++++++++-------- .../cloudmigrationimpl/cloudmigration_noop.go | 16 +++++++ .../cloudmigrationimpl/cloudmigration_test.go | 15 +++++++ .../cloudmigrationimpl/metric.go | 26 +++++++++++ .../cloudmigrationimpl/store.go | 11 +++++ .../cloudmigrationimpl/xorm_store.go | 16 +++++++ .../cloudmigrationimpl/xorm_store_test.go | 9 ++++ .../cloudmigration/cloudmigrations.go | 9 ++++ .../cloudmigration/cloudmigrationtest/fake.go | 15 +++++++ pkg/services/cloudmigration/model.go | 43 +++++++++++++++++++ pkg/services/cloudmigrations/api/models.go | 10 ----- .../cloudmigrations/cloudmigrations.go | 11 ----- .../cloudmigrations/metrics/metric.go | 40 ----------------- .../cloudmigrations/metrics/metrics.go | 19 -------- pkg/services/cloudmigrations/models/errors.go | 8 ---- pkg/services/cloudmigrations/models/models.go | 10 ----- .../cloudmigrations/service/noop_service.go | 17 -------- .../cloudmigrations/service/service_test.go | 15 ------- 22 files changed, 186 insertions(+), 160 deletions(-) rename pkg/services/{cloudmigrations => cloudmigration}/api/api.go (73%) rename pkg/services/{cloudmigrations => cloudmigration}/api/api_test.go (100%) rename pkg/services/{cloudmigrations/service/service.go => cloudmigration/cloudmigrationimpl/cloudmigration.go} (56%) create mode 100644 pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_noop.go create mode 100644 pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_test.go create mode 100644 pkg/services/cloudmigration/cloudmigrationimpl/metric.go create mode 100644 pkg/services/cloudmigration/cloudmigrationimpl/store.go create mode 100644 pkg/services/cloudmigration/cloudmigrationimpl/xorm_store.go create mode 100644 pkg/services/cloudmigration/cloudmigrationimpl/xorm_store_test.go create mode 100644 pkg/services/cloudmigration/cloudmigrations.go create mode 100644 pkg/services/cloudmigration/cloudmigrationtest/fake.go create mode 100644 pkg/services/cloudmigration/model.go delete mode 100644 pkg/services/cloudmigrations/api/models.go delete mode 100644 pkg/services/cloudmigrations/cloudmigrations.go delete mode 100644 pkg/services/cloudmigrations/metrics/metric.go delete mode 100644 pkg/services/cloudmigrations/metrics/metrics.go delete mode 100644 pkg/services/cloudmigrations/models/errors.go delete mode 100644 pkg/services/cloudmigrations/models/models.go delete mode 100644 pkg/services/cloudmigrations/service/noop_service.go delete mode 100644 pkg/services/cloudmigrations/service/service_test.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b41cff4f245..8c5bc80e193 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -605,7 +605,7 @@ playwright.config.ts @grafana/plugins-platform-frontend /pkg/infra/httpclient/httpclientprovider/sigv4_middleware_test.go @grafana/grafana-operator-experience-squad /pkg/services/caching/ @grafana/grafana-operator-experience-squad /pkg/services/featuremgmt/ @grafana/grafana-operator-experience-squad -/pkg/services/cloudmigrations/ @grafana/grafana-operator-experience-squad +/pkg/services/cloudmigration/ @grafana/grafana-operator-experience-squad # Kind definitions /kinds/dashboard @grafana/dashboards-squad diff --git a/pkg/server/wire.go b/pkg/server/wire.go index 09862887f52..7164ddc08c2 100644 --- a/pkg/server/wire.go +++ b/pkg/server/wire.go @@ -50,7 +50,7 @@ import ( "github.com/grafana/grafana/pkg/services/auth/jwt" "github.com/grafana/grafana/pkg/services/authn/authnimpl" "github.com/grafana/grafana/pkg/services/cleanup" - cloudmigrations "github.com/grafana/grafana/pkg/services/cloudmigrations/service" + "github.com/grafana/grafana/pkg/services/cloudmigration/cloudmigrationimpl" "github.com/grafana/grafana/pkg/services/contexthandler" "github.com/grafana/grafana/pkg/services/correlations" "github.com/grafana/grafana/pkg/services/dashboardimport" @@ -381,7 +381,7 @@ var wireBasicSet = wire.NewSet( wire.Bind(new(ssosettings.Service), new(*ssoSettingsImpl.Service)), idimpl.ProvideService, wire.Bind(new(auth.IDService), new(*idimpl.Service)), - cloudmigrations.ProvideService, + cloudmigrationimpl.ProvideService, // Kubernetes API server grafanaapiserver.WireSet, apiregistry.WireSet, diff --git a/pkg/services/cloudmigrations/api/api.go b/pkg/services/cloudmigration/api/api.go similarity index 73% rename from pkg/services/cloudmigrations/api/api.go rename to pkg/services/cloudmigration/api/api.go index af35d25312f..fb408f09cad 100644 --- a/pkg/services/cloudmigrations/api/api.go +++ b/pkg/services/cloudmigration/api/api.go @@ -7,21 +7,20 @@ import ( "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/middleware" - "github.com/grafana/grafana/pkg/services/cloudmigrations" - "github.com/grafana/grafana/pkg/services/cloudmigrations/models" + "github.com/grafana/grafana/pkg/services/cloudmigration" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/web" ) type MigrationAPI struct { - cloudMigrationsService cloudmigrations.CloudMigrationService + cloudMigrationsService cloudmigration.Service routeRegister routing.RouteRegister log log.Logger } func RegisterApi( rr routing.RouteRegister, - cms cloudmigrations.CloudMigrationService, + cms cloudmigration.Service, ) *MigrationAPI { api := &MigrationAPI{ log: log.New("cloudmigrations.api"), @@ -43,15 +42,15 @@ func (api *MigrationAPI) registerEndpoints() { } func (api *MigrationAPI) MigrateDatasources(c *contextmodel.ReqContext) response.Response { - var req migrateDatasourcesRequestDTO + var req cloudmigration.MigrateDatasourcesRequestDTO if err := web.Bind(c.Req, &req); err != nil { return response.Error(http.StatusBadRequest, "bad request data", err) } - resp, err := api.cloudMigrationsService.MigrateDatasources(c.Req.Context(), &models.MigrateDatasourcesRequest{MigrateToPDC: req.MigrateToPDC, MigrateCredentials: req.MigrateCredentials}) + resp, err := api.cloudMigrationsService.MigrateDatasources(c.Req.Context(), &cloudmigration.MigrateDatasourcesRequest{MigrateToPDC: req.MigrateToPDC, MigrateCredentials: req.MigrateCredentials}) if err != nil { return response.Error(http.StatusInternalServerError, "data source migrations error", err) } - return response.JSON(http.StatusOK, migrateDatasourcesResponseDTO{DatasourcesMigrated: resp.DatasourcesMigrated}) + return response.JSON(http.StatusOK, cloudmigration.MigrateDatasourcesResponseDTO{DatasourcesMigrated: resp.DatasourcesMigrated}) } diff --git a/pkg/services/cloudmigrations/api/api_test.go b/pkg/services/cloudmigration/api/api_test.go similarity index 100% rename from pkg/services/cloudmigrations/api/api_test.go rename to pkg/services/cloudmigration/api/api_test.go diff --git a/pkg/services/cloudmigrations/service/service.go b/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration.go similarity index 56% rename from pkg/services/cloudmigrations/service/service.go rename to pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration.go index 398be37a196..c1e58e8f397 100644 --- a/pkg/services/cloudmigrations/service/service.go +++ b/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration.go @@ -1,4 +1,4 @@ -package service +package cloudmigrationimpl import ( "context" @@ -6,10 +6,8 @@ import ( "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/services/cloudmigrations" - "github.com/grafana/grafana/pkg/services/cloudmigrations/api" - "github.com/grafana/grafana/pkg/services/cloudmigrations/metrics" - "github.com/grafana/grafana/pkg/services/cloudmigrations/models" + "github.com/grafana/grafana/pkg/services/cloudmigration" + "github.com/grafana/grafana/pkg/services/cloudmigration/api" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/setting" @@ -17,54 +15,53 @@ import ( ) // CloudMigrationsServiceImpl Define the Service Implementation. -type CloudMigrationsServiceImpl struct { +type Service struct { + store store + log log.Logger cfg *setting.Cfg - sqlStore db.DB features featuremgmt.FeatureToggles dsService datasources.DataSourceService - api *api.MigrationAPI - metrics *metrics.Metrics + api *api.MigrationAPI + // metrics *Metrics } -var LogPrefix = "cloudmigrations.service" +var LogPrefix = "cloudmigration.service" -var _ cloudmigrations.CloudMigrationService = (*CloudMigrationsServiceImpl)(nil) +var _ cloudmigration.Service = (*Service)(nil) // ProvideService Factory for method used by wire to inject dependencies. // builds the service, and api, and configures routes func ProvideService( cfg *setting.Cfg, features featuremgmt.FeatureToggles, - sqlStore db.DB, + db db.DB, dsService datasources.DataSourceService, routeRegister routing.RouteRegister, prom prometheus.Registerer, -) cloudmigrations.CloudMigrationService { +) cloudmigration.Service { if !features.IsEnabledGlobally(featuremgmt.FlagOnPremToCloudMigrations) { return &NoopServiceImpl{} } - s := &CloudMigrationsServiceImpl{ + s := &Service{ + store: &sqlStore{db: db}, log: log.New(LogPrefix), cfg: cfg, - sqlStore: sqlStore, features: features, dsService: dsService, } s.api = api.RegisterApi(routeRegister, s) - if m, err := metrics.RegisterMetrics(prom); err != nil { + if err := s.registerMetrics(prom); err != nil { s.log.Warn("error registering prom metrics", "error", err.Error()) - } else { - s.metrics = m } return s } -func (cm *CloudMigrationsServiceImpl) MigrateDatasources(ctx context.Context, request *models.MigrateDatasourcesRequest) (*models.MigrateDatasourcesResponse, error) { - return nil, models.ErrInternalNotImplementedError +func (s *Service) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) { + return s.store.MigrateDatasources(ctx, request) } diff --git a/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_noop.go b/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_noop.go new file mode 100644 index 00000000000..3f22422b7c7 --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_noop.go @@ -0,0 +1,16 @@ +package cloudmigrationimpl + +import ( + "context" + + "github.com/grafana/grafana/pkg/services/cloudmigration" +) + +// CloudMigrationsServiceImpl Define the Service Implementation. +type NoopServiceImpl struct{} + +var _ cloudmigration.Service = (*NoopServiceImpl)(nil) + +func (s *NoopServiceImpl) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) { + return nil, cloudmigration.ErrFeatureDisabledError +} diff --git a/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_test.go b/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_test.go new file mode 100644 index 00000000000..008a9b66add --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration_test.go @@ -0,0 +1,15 @@ +package cloudmigrationimpl + +import ( + "context" + "testing" + + "github.com/grafana/grafana/pkg/services/cloudmigration" + "github.com/stretchr/testify/assert" +) + +func Test_NoopServiceDoesNothing(t *testing.T) { + s := &NoopServiceImpl{} + _, e := s.MigrateDatasources(context.Background(), &cloudmigration.MigrateDatasourcesRequest{}) + assert.ErrorIs(t, e, cloudmigration.ErrFeatureDisabledError) +} diff --git a/pkg/services/cloudmigration/cloudmigrationimpl/metric.go b/pkg/services/cloudmigration/cloudmigrationimpl/metric.go new file mode 100644 index 00000000000..0c33a7adfb9 --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationimpl/metric.go @@ -0,0 +1,26 @@ +package cloudmigrationimpl + +import ( + "errors" + + "github.com/grafana/grafana/pkg/services/cloudmigration" + "github.com/prometheus/client_golang/prometheus" +) + +// type Metrics struct { +// log log.Logger +// } + +func (s *Service) registerMetrics(prom prometheus.Registerer) error { + for _, m := range cloudmigration.PromMetrics { + if err := prom.Register(m); err != nil { + var alreadyRegisterErr prometheus.AlreadyRegisteredError + if errors.As(err, &alreadyRegisterErr) { + s.log.Warn("metric already registered", "metric", m) + continue + } + return err + } + } + return nil +} diff --git a/pkg/services/cloudmigration/cloudmigrationimpl/store.go b/pkg/services/cloudmigration/cloudmigrationimpl/store.go new file mode 100644 index 00000000000..161b575b75a --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationimpl/store.go @@ -0,0 +1,11 @@ +package cloudmigrationimpl + +import ( + "context" + + "github.com/grafana/grafana/pkg/services/cloudmigration" +) + +type store interface { + MigrateDatasources(context.Context, *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) +} diff --git a/pkg/services/cloudmigration/cloudmigrationimpl/xorm_store.go b/pkg/services/cloudmigration/cloudmigrationimpl/xorm_store.go new file mode 100644 index 00000000000..7407a919269 --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationimpl/xorm_store.go @@ -0,0 +1,16 @@ +package cloudmigrationimpl + +import ( + "context" + + "github.com/grafana/grafana/pkg/infra/db" + "github.com/grafana/grafana/pkg/services/cloudmigration" +) + +type sqlStore struct { + db db.DB +} + +func (ss *sqlStore) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) { + return nil, cloudmigration.ErrInternalNotImplementedError +} diff --git a/pkg/services/cloudmigration/cloudmigrationimpl/xorm_store_test.go b/pkg/services/cloudmigration/cloudmigrationimpl/xorm_store_test.go new file mode 100644 index 00000000000..a2915e782fd --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationimpl/xorm_store_test.go @@ -0,0 +1,9 @@ +package cloudmigrationimpl + +import ( + "testing" +) + +func TestMigrateDatasources(t *testing.T) { + // TODO: Write this test +} diff --git a/pkg/services/cloudmigration/cloudmigrations.go b/pkg/services/cloudmigration/cloudmigrations.go new file mode 100644 index 00000000000..34bb99c11d3 --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrations.go @@ -0,0 +1,9 @@ +package cloudmigration + +import ( + "context" +) + +type Service interface { + MigrateDatasources(context.Context, *MigrateDatasourcesRequest) (*MigrateDatasourcesResponse, error) +} diff --git a/pkg/services/cloudmigration/cloudmigrationtest/fake.go b/pkg/services/cloudmigration/cloudmigrationtest/fake.go new file mode 100644 index 00000000000..7f410d3a27d --- /dev/null +++ b/pkg/services/cloudmigration/cloudmigrationtest/fake.go @@ -0,0 +1,15 @@ +package cloudmigrationtest + +import ( + "context" + + "github.com/grafana/grafana/pkg/services/cloudmigration" +) + +type Service struct { + ExpectedError error +} + +func (s *Service) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) { + return nil, cloudmigration.ErrInternalNotImplementedError +} diff --git a/pkg/services/cloudmigration/model.go b/pkg/services/cloudmigration/model.go new file mode 100644 index 00000000000..e118abbd5a3 --- /dev/null +++ b/pkg/services/cloudmigration/model.go @@ -0,0 +1,43 @@ +package cloudmigration + +import ( + "github.com/grafana/grafana/pkg/util/errutil" + "github.com/prometheus/client_golang/prometheus" +) + +var ( + ErrInternalNotImplementedError = errutil.Internal("cloudmigrations.notImplemented", errutil.WithPublicMessage("Internal server error")) + ErrFeatureDisabledError = errutil.Internal("cloudmigrations.disabled", errutil.WithPublicMessage("Cloud migrations are disabled on this instance")) +) + +type MigrateDatasourcesRequest struct { + MigrateToPDC bool + MigrateCredentials bool +} + +type MigrateDatasourcesResponse struct { + DatasourcesMigrated int +} + +type MigrateDatasourcesRequestDTO struct { + MigrateToPDC bool `json:"migrateToPDC"` + MigrateCredentials bool `json:"migrateCredentials"` +} + +type MigrateDatasourcesResponseDTO struct { + DatasourcesMigrated int `json:"datasourcesMigrated"` +} + +const ( + namespace = "grafana" + subsystem = "cloudmigrations" +) + +var PromMetrics = []prometheus.Collector{ + prometheus.NewCounterVec(prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "datasources_migrated", + Help: "Total amount of data sources migrated", + }, []string{"pdc_converted"}), +} diff --git a/pkg/services/cloudmigrations/api/models.go b/pkg/services/cloudmigrations/api/models.go deleted file mode 100644 index 87134171697..00000000000 --- a/pkg/services/cloudmigrations/api/models.go +++ /dev/null @@ -1,10 +0,0 @@ -package api - -type migrateDatasourcesRequestDTO struct { - MigrateToPDC bool `json:"migrateToPDC"` - MigrateCredentials bool `json:"migrateCredentials"` -} - -type migrateDatasourcesResponseDTO struct { - DatasourcesMigrated int `json:"datasourcesMigrated"` -} diff --git a/pkg/services/cloudmigrations/cloudmigrations.go b/pkg/services/cloudmigrations/cloudmigrations.go deleted file mode 100644 index 2bba3575e40..00000000000 --- a/pkg/services/cloudmigrations/cloudmigrations.go +++ /dev/null @@ -1,11 +0,0 @@ -package cloudmigrations - -import ( - "context" - - "github.com/grafana/grafana/pkg/services/cloudmigrations/models" -) - -type CloudMigrationService interface { - MigrateDatasources(ctx context.Context, request *models.MigrateDatasourcesRequest) (*models.MigrateDatasourcesResponse, error) -} diff --git a/pkg/services/cloudmigrations/metrics/metric.go b/pkg/services/cloudmigrations/metrics/metric.go deleted file mode 100644 index e69a839cb24..00000000000 --- a/pkg/services/cloudmigrations/metrics/metric.go +++ /dev/null @@ -1,40 +0,0 @@ -package metrics - -import ( - "errors" - - "github.com/grafana/grafana/pkg/infra/log" - "github.com/prometheus/client_golang/prometheus" -) - -type Metrics struct { - log log.Logger -} - -func RegisterMetrics( - prom prometheus.Registerer, -) (*Metrics, error) { - s := &Metrics{ - log: log.New("cloudmigrations.metrics"), - } - - if err := s.registerMetrics(prom); err != nil { - return nil, err - } - - return s, nil -} - -func (s *Metrics) registerMetrics(prom prometheus.Registerer) error { - for _, m := range promMetrics { - if err := prom.Register(m); err != nil { - var alreadyRegisterErr prometheus.AlreadyRegisteredError - if errors.As(err, &alreadyRegisterErr) { - s.log.Warn("metric already registered", "metric", m) - continue - } - return err - } - } - return nil -} diff --git a/pkg/services/cloudmigrations/metrics/metrics.go b/pkg/services/cloudmigrations/metrics/metrics.go deleted file mode 100644 index 132921b6489..00000000000 --- a/pkg/services/cloudmigrations/metrics/metrics.go +++ /dev/null @@ -1,19 +0,0 @@ -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -const ( - namespace = "grafana" - subsystem = "cloudmigrations" -) - -var promMetrics = []prometheus.Collector{ - prometheus.NewCounterVec(prometheus.CounterOpts{ - Namespace: namespace, - Subsystem: subsystem, - Name: "datasources_migrated", - Help: "Total amount of data sources migrated", - }, []string{"pdc_converted"}), -} diff --git a/pkg/services/cloudmigrations/models/errors.go b/pkg/services/cloudmigrations/models/errors.go deleted file mode 100644 index 180e97e4554..00000000000 --- a/pkg/services/cloudmigrations/models/errors.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -import "github.com/grafana/grafana/pkg/util/errutil" - -var ( - ErrInternalNotImplementedError = errutil.Internal("cloudmigrations.notImplemented", errutil.WithPublicMessage("Internal server error")) - ErrFeatureDisabledError = errutil.Internal("cloudmigrations.disabled", errutil.WithPublicMessage("Cloud migrations are disabled on this instance")) -) diff --git a/pkg/services/cloudmigrations/models/models.go b/pkg/services/cloudmigrations/models/models.go deleted file mode 100644 index db7a4490095..00000000000 --- a/pkg/services/cloudmigrations/models/models.go +++ /dev/null @@ -1,10 +0,0 @@ -package models - -type MigrateDatasourcesRequest struct { - MigrateToPDC bool - MigrateCredentials bool -} - -type MigrateDatasourcesResponse struct { - DatasourcesMigrated int -} diff --git a/pkg/services/cloudmigrations/service/noop_service.go b/pkg/services/cloudmigrations/service/noop_service.go deleted file mode 100644 index cab56910787..00000000000 --- a/pkg/services/cloudmigrations/service/noop_service.go +++ /dev/null @@ -1,17 +0,0 @@ -package service - -import ( - "context" - - "github.com/grafana/grafana/pkg/services/cloudmigrations" - "github.com/grafana/grafana/pkg/services/cloudmigrations/models" -) - -// CloudMigrationsServiceImpl Define the Service Implementation. -type NoopServiceImpl struct{} - -var _ cloudmigrations.CloudMigrationService = (*NoopServiceImpl)(nil) - -func (cm *NoopServiceImpl) MigrateDatasources(ctx context.Context, request *models.MigrateDatasourcesRequest) (*models.MigrateDatasourcesResponse, error) { - return nil, models.ErrFeatureDisabledError -} diff --git a/pkg/services/cloudmigrations/service/service_test.go b/pkg/services/cloudmigrations/service/service_test.go deleted file mode 100644 index 47334718833..00000000000 --- a/pkg/services/cloudmigrations/service/service_test.go +++ /dev/null @@ -1,15 +0,0 @@ -package service - -import ( - "context" - "testing" - - "github.com/grafana/grafana/pkg/services/cloudmigrations/models" - "github.com/stretchr/testify/assert" -) - -func Test_NoopServiceDoesNothing(t *testing.T) { - s := &NoopServiceImpl{} - _, e := s.MigrateDatasources(context.Background(), &models.MigrateDatasourcesRequest{}) - assert.ErrorIs(t, e, models.ErrFeatureDisabledError) -}