|
|
|
@ -17,6 +17,9 @@ import ( |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
func TestPluginManager_Init(t *testing.T) { |
|
|
|
func TestPluginManager_Init(t *testing.T) { |
|
|
|
|
|
|
|
staticRootPath, err := filepath.Abs("../../public/") |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
origRootPath := setting.StaticRootPath |
|
|
|
origRootPath := setting.StaticRootPath |
|
|
|
origRaw := setting.Raw |
|
|
|
origRaw := setting.Raw |
|
|
|
origEnv := setting.Env |
|
|
|
origEnv := setting.Env |
|
|
|
@ -25,16 +28,16 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
setting.Raw = origRaw |
|
|
|
setting.Raw = origRaw |
|
|
|
setting.Env = origEnv |
|
|
|
setting.Env = origEnv |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
setting.StaticRootPath = staticRootPath |
|
|
|
var err error |
|
|
|
|
|
|
|
setting.StaticRootPath, err = filepath.Abs("../../public/") |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
setting.Raw = ini.Empty() |
|
|
|
setting.Raw = ini.Empty() |
|
|
|
setting.Env = setting.Prod |
|
|
|
setting.Env = setting.Prod |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Base case", func(t *testing.T) { |
|
|
|
t.Run("Base case", func(t *testing.T) { |
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
Raw: ini.Empty(), |
|
|
|
|
|
|
|
Env: setting.Prod, |
|
|
|
|
|
|
|
StaticRootPath: staticRootPath, |
|
|
|
PluginSettings: setting.PluginSettings{ |
|
|
|
PluginSettings: setting.PluginSettings{ |
|
|
|
"nginx-app": map[string]string{ |
|
|
|
"nginx-app": map[string]string{ |
|
|
|
"path": "testdata/test-app", |
|
|
|
"path": "testdata/test-app", |
|
|
|
@ -55,14 +58,8 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With external back-end plugin lacking signature", func(t *testing.T) { |
|
|
|
t.Run("With external back-end plugin lacking signature", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/unsigned" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{PluginsPath: "testdata/unsigned"}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
@ -71,14 +68,9 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With external unsigned back-end plugin and configuration disabling signature check of this plugin", func(t *testing.T) { |
|
|
|
t.Run("With external unsigned back-end plugin and configuration disabling signature check of this plugin", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/unsigned" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/unsigned", |
|
|
|
PluginsAllowUnsigned: []string{"test"}, |
|
|
|
PluginsAllowUnsigned: []string{"test"}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
@ -90,14 +82,10 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With external back-end plugin with invalid v1 signature", func(t *testing.T) { |
|
|
|
t.Run("With external back-end plugin with invalid v1 signature", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/invalid-v1-signature" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/invalid-v1-signature", |
|
|
|
|
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
@ -106,15 +94,11 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With external back-end plugin lacking files listed in manifest", func(t *testing.T) { |
|
|
|
t.Run("With external back-end plugin lacking files listed in manifest", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/lacking-files" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fm := &fakeBackendPluginManager{} |
|
|
|
fm := &fakeBackendPluginManager{} |
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/lacking-files", |
|
|
|
|
|
|
|
}, |
|
|
|
BackendPluginManager: fm, |
|
|
|
BackendPluginManager: fm, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
@ -124,15 +108,11 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Transform plugins should be ignored when expressions feature is off", func(t *testing.T) { |
|
|
|
t.Run("Transform plugins should be ignored when expressions feature is off", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/behind-feature-flag" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fm := fakeBackendPluginManager{} |
|
|
|
fm := fakeBackendPluginManager{} |
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/behind-feature-flag", |
|
|
|
|
|
|
|
}, |
|
|
|
BackendPluginManager: &fm, |
|
|
|
BackendPluginManager: &fm, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
@ -143,14 +123,10 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With nested plugin duplicating parent", func(t *testing.T) { |
|
|
|
t.Run("With nested plugin duplicating parent", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/duplicate-plugins" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/duplicate-plugins", |
|
|
|
|
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
@ -160,14 +136,10 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With external back-end plugin with valid v2 signature", func(t *testing.T) { |
|
|
|
t.Run("With external back-end plugin with valid v2 signature", func(t *testing.T) { |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
|
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
setting.PluginsPath = "testdata/valid-v2-signature" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/valid-v2-signature", |
|
|
|
|
|
|
|
}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
@ -188,16 +160,15 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With back-end plugin with invalid v2 private signature (mismatched root URL)", func(t *testing.T) { |
|
|
|
t.Run("With back-end plugin with invalid v2 private signature (mismatched root URL)", func(t *testing.T) { |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
t.Cleanup(func() { |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
setting.AppUrl = "http://localhost:1234" |
|
|
|
setting.AppUrl = "http://localhost:1234" |
|
|
|
setting.PluginsPath = "testdata/valid-v2-pvt-signature" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/valid-v2-pvt-signature", |
|
|
|
|
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
@ -208,16 +179,15 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With back-end plugin with valid v2 private signature", func(t *testing.T) { |
|
|
|
t.Run("With back-end plugin with valid v2 private signature", func(t *testing.T) { |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
t.Cleanup(func() { |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
setting.AppUrl = "http://localhost:3000/" |
|
|
|
setting.AppUrl = "http://localhost:3000/" |
|
|
|
setting.PluginsPath = "testdata/valid-v2-pvt-signature" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/valid-v2-pvt-signature", |
|
|
|
|
|
|
|
}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
@ -238,16 +208,15 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With back-end plugin with modified v2 signature (missing file from plugin dir)", func(t *testing.T) { |
|
|
|
t.Run("With back-end plugin with modified v2 signature (missing file from plugin dir)", func(t *testing.T) { |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
t.Cleanup(func() { |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
setting.AppUrl = "http://localhost:3000/" |
|
|
|
setting.AppUrl = "http://localhost:3000/" |
|
|
|
setting.PluginsPath = "testdata/invalid-v2-signature" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/invalid-v2-signature", |
|
|
|
|
|
|
|
}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
@ -258,16 +227,15 @@ func TestPluginManager_Init(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
t.Run("With back-end plugin with modified v2 signature (unaccounted file in plugin dir)", func(t *testing.T) { |
|
|
|
t.Run("With back-end plugin with modified v2 signature (unaccounted file in plugin dir)", func(t *testing.T) { |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origAppURL := setting.AppUrl |
|
|
|
origPluginsPath := setting.PluginsPath |
|
|
|
|
|
|
|
t.Cleanup(func() { |
|
|
|
t.Cleanup(func() { |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.AppUrl = origAppURL |
|
|
|
setting.PluginsPath = origPluginsPath |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
setting.AppUrl = "http://localhost:3000/" |
|
|
|
setting.AppUrl = "http://localhost:3000/" |
|
|
|
setting.PluginsPath = "testdata/invalid-v2-signature-2" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm := &PluginManager{ |
|
|
|
pm := &PluginManager{ |
|
|
|
Cfg: &setting.Cfg{}, |
|
|
|
Cfg: &setting.Cfg{ |
|
|
|
|
|
|
|
PluginsPath: "testdata/invalid-v2-signature-2", |
|
|
|
|
|
|
|
}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
BackendPluginManager: &fakeBackendPluginManager{}, |
|
|
|
} |
|
|
|
} |
|
|
|
err := pm.Init() |
|
|
|
err := pm.Init() |
|
|
|
|