From 45bcbff115984f7df20c2f67483beccef074068a Mon Sep 17 00:00:00 2001 From: Giuseppe Guerra Date: Fri, 27 Oct 2023 10:14:07 +0200 Subject: [PATCH] Plugins: Fix plugin alias ID being used in PluginContext.ID (#77206) * Fix PluginID being populated with alias in plugincontext Get and GetWithDataSource * Add tests * pr review suggestion * pr review suggestion --- .../plugincontext/plugincontext.go | 4 +- .../plugincontext/plugincontext_test.go | 77 +++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 pkg/services/pluginsintegration/plugincontext/plugincontext_test.go diff --git a/pkg/services/pluginsintegration/plugincontext/plugincontext.go b/pkg/services/pluginsintegration/plugincontext/plugincontext.go index 924c1795ae9..c6513706166 100644 --- a/pkg/services/pluginsintegration/plugincontext/plugincontext.go +++ b/pkg/services/pluginsintegration/plugincontext/plugincontext.go @@ -64,7 +64,7 @@ func (p *Provider) Get(ctx context.Context, pluginID string, user identity.Reque } pCtx := backend.PluginContext{ - PluginID: pluginID, + PluginID: plugin.ID, PluginVersion: plugin.Info.Version, } if user != nil && !user.IsNil() { @@ -99,7 +99,7 @@ func (p *Provider) GetWithDataSource(ctx context.Context, pluginID string, user } pCtx := backend.PluginContext{ - PluginID: pluginID, + PluginID: plugin.ID, PluginVersion: plugin.Info.Version, } if user != nil && !user.IsNil() { diff --git a/pkg/services/pluginsintegration/plugincontext/plugincontext_test.go b/pkg/services/pluginsintegration/plugincontext/plugincontext_test.go new file mode 100644 index 00000000000..5e19a17a048 --- /dev/null +++ b/pkg/services/pluginsintegration/plugincontext/plugincontext_test.go @@ -0,0 +1,77 @@ +package plugincontext_test + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/grafana/grafana/pkg/components/simplejson" + "github.com/grafana/grafana/pkg/infra/db/dbtest" + "github.com/grafana/grafana/pkg/infra/localcache" + "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/plugins/config" + pluginFakes "github.com/grafana/grafana/pkg/plugins/manager/fakes" + "github.com/grafana/grafana/pkg/plugins/manager/registry" + "github.com/grafana/grafana/pkg/services/datasources" + fakeDatasources "github.com/grafana/grafana/pkg/services/datasources/fakes" + "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" + secretstest "github.com/grafana/grafana/pkg/services/secrets/fakes" + "github.com/grafana/grafana/pkg/services/user" + "github.com/grafana/grafana/pkg/setting" +) + +func TestGet(t *testing.T) { + const ( + pluginID = "plugin-id" + alias = "alias" + ) + + preg := registry.NewInMemory() + require.NoError(t, preg.Add(context.Background(), &plugins.Plugin{ + JSONData: plugins.JSONData{ + ID: pluginID, + AliasIDs: []string{alias}, + }, + })) + + cfg := setting.NewCfg() + ds := &fakeDatasources.FakeDataSourceService{} + db := &dbtest.FakeDB{ExpectedError: pluginsettings.ErrPluginSettingNotFound} + pcp := plugincontext.ProvideService(cfg, localcache.ProvideService(), + pluginstore.New(preg, &pluginFakes.FakeLoader{}), + ds, pluginSettings.ProvideService(db, secretstest.NewFakeSecretsService()), pluginFakes.NewFakeLicensingService(), &config.Cfg{}, + ) + identity := &user.SignedInUser{OrgID: int64(1), Login: "admin"} + + for _, tc := range []struct { + name string + input string + }{ + {"with id", pluginID}, + {"with alias", alias}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Run("Get", func(t *testing.T) { + pCtx, err := pcp.Get(context.Background(), tc.input, identity, identity.OrgID) + require.NoError(t, err) + require.Equal(t, pluginID, pCtx.PluginID) + }) + + t.Run("GetWithDataSource", func(t *testing.T) { + pCtx, err := pcp.GetWithDataSource(context.Background(), tc.input, identity, &datasources.DataSource{ + ID: 1, + OrgID: 1, + Name: "test", + Type: pluginID, + JsonData: simplejson.New(), + }) + require.NoError(t, err) + require.Equal(t, pluginID, pCtx.PluginID) + }) + }) + } +}