mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			251 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package initializer
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"path/filepath"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 
 | |
| 	"github.com/grafana/grafana/pkg/infra/log"
 | |
| 	"github.com/grafana/grafana/pkg/plugins"
 | |
| 	"github.com/grafana/grafana/pkg/plugins/backendplugin"
 | |
| )
 | |
| 
 | |
| func TestInitializer_Initialize(t *testing.T) {
 | |
| 	absCurPath, err := filepath.Abs(".")
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	t.Run("core backend datasource", func(t *testing.T) {
 | |
| 		p := &plugins.Plugin{
 | |
| 			JSONData: plugins.JSONData{
 | |
| 				ID:   "test",
 | |
| 				Type: plugins.DataSource,
 | |
| 				Includes: []*plugins.Includes{
 | |
| 					{
 | |
| 						Name: "Example dashboard",
 | |
| 						Type: plugins.TypeDashboard,
 | |
| 					},
 | |
| 				},
 | |
| 				Backend: true,
 | |
| 			},
 | |
| 			PluginDir: absCurPath,
 | |
| 			Class:     plugins.Core,
 | |
| 		}
 | |
| 
 | |
| 		i := &Initializer{
 | |
| 			cfg: plugins.NewCfg(),
 | |
| 			log: log.NewNopLogger(),
 | |
| 			backendProvider: &fakeBackendProvider{
 | |
| 				plugin: p,
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		err := i.Initialize(context.Background(), p)
 | |
| 		assert.NoError(t, err)
 | |
| 
 | |
| 		c, exists := p.Client()
 | |
| 		assert.True(t, exists)
 | |
| 		assert.NotNil(t, c)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("renderer", func(t *testing.T) {
 | |
| 		p := &plugins.Plugin{
 | |
| 			JSONData: plugins.JSONData{
 | |
| 				ID:   "test",
 | |
| 				Type: plugins.Renderer,
 | |
| 				Dependencies: plugins.Dependencies{
 | |
| 					GrafanaVersion: ">=8.x",
 | |
| 				},
 | |
| 				Backend: true,
 | |
| 			},
 | |
| 			PluginDir: absCurPath,
 | |
| 			Class:     plugins.External,
 | |
| 		}
 | |
| 
 | |
| 		i := &Initializer{
 | |
| 			cfg: plugins.NewCfg(),
 | |
| 			log: log.NewNopLogger(),
 | |
| 			backendProvider: &fakeBackendProvider{
 | |
| 				plugin: p,
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		err := i.Initialize(context.Background(), p)
 | |
| 		assert.NoError(t, err)
 | |
| 
 | |
| 		c, exists := p.Client()
 | |
| 		assert.True(t, exists)
 | |
| 		assert.NotNil(t, c)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("secretsmanager", func(t *testing.T) {
 | |
| 		p := &plugins.Plugin{
 | |
| 			JSONData: plugins.JSONData{
 | |
| 				ID:   "test",
 | |
| 				Type: plugins.SecretsManager,
 | |
| 				Dependencies: plugins.Dependencies{
 | |
| 					GrafanaVersion: ">=8.x",
 | |
| 				},
 | |
| 				Backend: true,
 | |
| 			},
 | |
| 			PluginDir: absCurPath,
 | |
| 			Class:     plugins.External,
 | |
| 		}
 | |
| 
 | |
| 		i := &Initializer{
 | |
| 			cfg: plugins.NewCfg(),
 | |
| 			log: log.NewNopLogger(),
 | |
| 			backendProvider: &fakeBackendProvider{
 | |
| 				plugin: p,
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		err := i.Initialize(context.Background(), p)
 | |
| 		assert.NoError(t, err)
 | |
| 
 | |
| 		c, exists := p.Client()
 | |
| 		assert.True(t, exists)
 | |
| 		assert.NotNil(t, c)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("non backend plugin app", func(t *testing.T) {
 | |
| 		p := &plugins.Plugin{
 | |
| 			JSONData: plugins.JSONData{
 | |
| 				Backend: false,
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		i := &Initializer{
 | |
| 			cfg: &plugins.Cfg{},
 | |
| 			log: log.NewNopLogger(),
 | |
| 			backendProvider: &fakeBackendProvider{
 | |
| 				plugin: p,
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		err := i.Initialize(context.Background(), p)
 | |
| 		assert.NoError(t, err)
 | |
| 
 | |
| 		c, exists := p.Client()
 | |
| 		assert.False(t, exists)
 | |
| 		assert.Nil(t, c)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestInitializer_envVars(t *testing.T) {
 | |
| 	t.Run("backend datasource with license", func(t *testing.T) {
 | |
| 		p := &plugins.Plugin{
 | |
| 			JSONData: plugins.JSONData{
 | |
| 				ID: "test",
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		licensing := &testLicensingService{
 | |
| 			edition:  "test",
 | |
| 			tokenRaw: "token",
 | |
| 		}
 | |
| 
 | |
| 		i := &Initializer{
 | |
| 			cfg: &plugins.Cfg{
 | |
| 				EnterpriseLicensePath: "/path/to/ent/license",
 | |
| 				PluginSettings: map[string]map[string]string{
 | |
| 					"test": {
 | |
| 						"custom_env_var": "customVal",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			license: licensing,
 | |
| 			log:     log.NewNopLogger(),
 | |
| 			backendProvider: &fakeBackendProvider{
 | |
| 				plugin: p,
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		envVars := i.envVars(p)
 | |
| 		assert.Len(t, envVars, 5)
 | |
| 		assert.Equal(t, "GF_PLUGIN_CUSTOM_ENV_VAR=customVal", envVars[0])
 | |
| 		assert.Equal(t, "GF_VERSION=", envVars[1])
 | |
| 		assert.Equal(t, "GF_EDITION=test", envVars[2])
 | |
| 		assert.Equal(t, "GF_ENTERPRISE_LICENSE_PATH=/path/to/ent/license", envVars[3])
 | |
| 		assert.Equal(t, "GF_ENTERPRISE_LICENSE_TEXT=token", envVars[4])
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestInitializer_getAWSEnvironmentVariables(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| func TestInitializer_handleModuleDefaults(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| func Test_defaultLogoPath(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| func Test_evalRelativePluginUrlPath(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| func Test_getPluginLogoUrl(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| func Test_getPluginSettings(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| func Test_pluginSettings_ToEnv(t *testing.T) {
 | |
| 
 | |
| }
 | |
| 
 | |
| type testLicensingService struct {
 | |
| 	edition  string
 | |
| 	tokenRaw string
 | |
| }
 | |
| 
 | |
| func (t *testLicensingService) Expiry() int64 {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| func (t *testLicensingService) Edition() string {
 | |
| 	return t.edition
 | |
| }
 | |
| 
 | |
| func (t *testLicensingService) StateInfo() string {
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| func (t *testLicensingService) ContentDeliveryPrefix() string {
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| func (t *testLicensingService) LicenseURL(_ bool) string {
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| func (t *testLicensingService) Environment() map[string]string {
 | |
| 	return map[string]string{"GF_ENTERPRISE_LICENSE_TEXT": t.tokenRaw}
 | |
| }
 | |
| 
 | |
| func (*testLicensingService) EnabledFeatures() map[string]bool {
 | |
| 	return map[string]bool{}
 | |
| }
 | |
| 
 | |
| func (*testLicensingService) FeatureEnabled(feature string) bool {
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| type fakeBackendProvider struct {
 | |
| 	plugins.BackendFactoryProvider
 | |
| 
 | |
| 	plugin *plugins.Plugin
 | |
| }
 | |
| 
 | |
| func (f *fakeBackendProvider) BackendFactory(_ context.Context, _ *plugins.Plugin) backendplugin.PluginFactoryFunc {
 | |
| 	return func(_ string, _ log.Logger, _ []string) (backendplugin.Plugin, error) {
 | |
| 		return f.plugin, nil
 | |
| 	}
 | |
| }
 |