Plugins: Refactor loader + finder to support multiple sourcing methods (#64735)
* it's cdn time * tidy body closing * auto signed * fix close * update log name * remove comments
This commit is contained in:
@@ -6,6 +6,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
)
|
||||
|
||||
type Resolver interface {
|
||||
type Registry interface {
|
||||
List(context.Context) []plugins.PluginSource
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package sources
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
)
|
||||
|
||||
type LocalSource struct {
|
||||
paths []string
|
||||
class plugins.Class
|
||||
}
|
||||
|
||||
func NewLocalSource(class plugins.Class, paths []string) *LocalSource {
|
||||
return &LocalSource{
|
||||
class: class,
|
||||
paths: paths,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *LocalSource) PluginClass(_ context.Context) plugins.Class {
|
||||
return s.class
|
||||
}
|
||||
|
||||
func (s *LocalSource) PluginURIs(_ context.Context) []string {
|
||||
return s.paths
|
||||
}
|
||||
|
||||
func (s *LocalSource) DefaultSignature(_ context.Context) (plugins.Signature, bool) {
|
||||
switch s.class {
|
||||
case plugins.Core:
|
||||
return plugins.Signature{
|
||||
Status: plugins.SignatureInternal,
|
||||
}, true
|
||||
default:
|
||||
return plugins.Signature{}, false
|
||||
}
|
||||
}
|
||||
@@ -26,9 +26,9 @@ func ProvideService(gCfg *setting.Cfg, cfg *config.Cfg) *Service {
|
||||
|
||||
func (s *Service) List(_ context.Context) []plugins.PluginSource {
|
||||
return []plugins.PluginSource{
|
||||
{Class: plugins.Core, Paths: corePluginPaths(s.gCfg.StaticRootPath)},
|
||||
{Class: plugins.Bundled, Paths: []string{s.gCfg.BundledPluginsPath}},
|
||||
{Class: plugins.External, Paths: append([]string{s.cfg.PluginsPath}, pluginFSPaths(s.cfg.PluginSettings)...)},
|
||||
NewLocalSource(plugins.Core, corePluginPaths(s.gCfg.StaticRootPath)),
|
||||
NewLocalSource(plugins.Bundled, []string{s.gCfg.BundledPluginsPath}),
|
||||
NewLocalSource(plugins.External, append([]string{s.cfg.PluginsPath}, pluginFSPaths(s.cfg.PluginSettings)...)),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
)
|
||||
|
||||
func TestSources_List(t *testing.T) {
|
||||
t.Run("Plugin sources are added in order", func(t *testing.T) {
|
||||
t.Run("Plugin sources are populated by default and listed in specific order", func(t *testing.T) {
|
||||
cfg := &setting.Cfg{
|
||||
BundledPluginsPath: "path1",
|
||||
}
|
||||
@@ -31,11 +31,28 @@ func TestSources_List(t *testing.T) {
|
||||
s := ProvideService(cfg, pCfg)
|
||||
srcs := s.List(context.Background())
|
||||
|
||||
expected := []plugins.PluginSource{
|
||||
{Class: plugins.Core, Paths: []string{"app/plugins/datasource", "app/plugins/panel"}},
|
||||
{Class: plugins.Bundled, Paths: []string{"path1"}},
|
||||
{Class: plugins.External, Paths: []string{"path2", "path3"}},
|
||||
}
|
||||
require.Equal(t, expected, srcs)
|
||||
ctx := context.Background()
|
||||
|
||||
require.Len(t, srcs, 3)
|
||||
|
||||
require.Equal(t, srcs[0].PluginClass(ctx), plugins.Core)
|
||||
require.Equal(t, srcs[0].PluginURIs(ctx), []string{"app/plugins/datasource", "app/plugins/panel"})
|
||||
sig, exists := srcs[0].DefaultSignature(ctx)
|
||||
require.True(t, exists)
|
||||
require.Equal(t, plugins.SignatureInternal, sig.Status)
|
||||
require.Equal(t, plugins.SignatureType(""), sig.Type)
|
||||
require.Equal(t, "", sig.SigningOrg)
|
||||
|
||||
require.Equal(t, srcs[1].PluginClass(ctx), plugins.Bundled)
|
||||
require.Equal(t, srcs[1].PluginURIs(ctx), []string{"path1"})
|
||||
sig, exists = srcs[1].DefaultSignature(ctx)
|
||||
require.False(t, exists)
|
||||
require.Equal(t, plugins.Signature{}, sig)
|
||||
|
||||
require.Equal(t, srcs[2].PluginClass(ctx), plugins.External)
|
||||
require.Equal(t, srcs[2].PluginURIs(ctx), []string{"path2", "path3"})
|
||||
sig, exists = srcs[2].DefaultSignature(ctx)
|
||||
require.False(t, exists)
|
||||
require.Equal(t, plugins.Signature{}, sig)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user