From 899ab31fff9b34bc125faf75b79a89e390deb2cf Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 1 Sep 2017 09:00:27 -0400 Subject: Implement experimental REST API endpoints for plugins (#7279) * Implement experimental REST API endpoints for plugins * Updates per feedback and rebase * Update tests * Further updates * Update extraction of plugins * Use OS temp dir for plugins instead of search path * Fail extraction on paths that attempt to traverse upward * Update pluginenv ActivePlugins() --- plugin/pluginenv/environment_test.go | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'plugin/pluginenv/environment_test.go') diff --git a/plugin/pluginenv/environment_test.go b/plugin/pluginenv/environment_test.go index d933c8696..82086b9b6 100644 --- a/plugin/pluginenv/environment_test.go +++ b/plugin/pluginenv/environment_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/mattermost/platform/model" "github.com/mattermost/platform/plugin" "github.com/mattermost/platform/plugin/plugintest" ) @@ -19,7 +20,7 @@ type MockProvider struct { mock.Mock } -func (m *MockProvider) API(manifest *plugin.Manifest) (plugin.API, error) { +func (m *MockProvider) API(manifest *model.Manifest) (plugin.API, error) { ret := m.Called() if ret.Get(0) == nil { return nil, ret.Error(1) @@ -27,7 +28,7 @@ func (m *MockProvider) API(manifest *plugin.Manifest) (plugin.API, error) { return ret.Get(0).(plugin.API), ret.Error(1) } -func (m *MockProvider) Supervisor(bundle *plugin.BundleInfo) (plugin.Supervisor, error) { +func (m *MockProvider) Supervisor(bundle *model.BundleInfo) (plugin.Supervisor, error) { ret := m.Called() if ret.Get(0) == nil { return nil, ret.Error(1) @@ -90,19 +91,13 @@ func TestNew_MissingOptions(t *testing.T) { ) assert.Nil(t, env) assert.Error(t, err) - - env, err = New( - SearchPath(dir), - ) - assert.Nil(t, env) - assert.Error(t, err) } func TestEnvironment(t *testing.T) { dir := initTmpDir(t, map[string]string{ ".foo/plugin.json": `{"id": "foo"}`, "foo/bar": "asdf", - "foo/plugin.json": `{"id": "foo"}`, + "foo/plugin.json": `{"id": "foo", "backend": {}}`, "bar/zxc": "qwer", "baz/plugin.yaml": "id: baz", "bad/plugin.json": "asd", @@ -110,11 +105,14 @@ func TestEnvironment(t *testing.T) { }) defer os.RemoveAll(dir) + webappDir := "notarealdirectory" + var provider MockProvider defer provider.AssertExpectations(t) env, err := New( SearchPath(dir), + WebappPath(webappDir), APIProvider(provider.API), SupervisorProvider(provider.Supervisor), ) @@ -125,6 +123,10 @@ func TestEnvironment(t *testing.T) { assert.NoError(t, err) assert.Len(t, plugins, 3) + activePlugins, err := env.ActivePlugins() + assert.NoError(t, err) + assert.Len(t, activePlugins, 0) + assert.Error(t, env.ActivatePlugin("x")) var api struct{ plugin.API } @@ -144,6 +146,9 @@ func TestEnvironment(t *testing.T) { assert.NoError(t, env.ActivatePlugin("foo")) assert.Equal(t, env.ActivePluginIds(), []string{"foo"}) + activePlugins, err = env.ActivePlugins() + assert.NoError(t, err) + assert.Len(t, activePlugins, 1) assert.Error(t, env.ActivatePlugin("foo")) hooks.On("OnDeactivate").Return(nil) @@ -152,6 +157,10 @@ func TestEnvironment(t *testing.T) { assert.NoError(t, env.ActivatePlugin("foo")) assert.Equal(t, env.ActivePluginIds(), []string{"foo"}) + + assert.Equal(t, env.SearchPath(), dir) + assert.Equal(t, env.WebappPath(), webappDir) + assert.Empty(t, env.Shutdown()) } @@ -195,7 +204,7 @@ func TestEnvironment_BadSearchPathError(t *testing.T) { func TestEnvironment_ActivatePluginErrors(t *testing.T) { dir := initTmpDir(t, map[string]string{ - "foo/plugin.json": `{"id": "foo"}`, + "foo/plugin.json": `{"id": "foo", "backend": {}}`, }) defer os.RemoveAll(dir) @@ -254,7 +263,7 @@ func TestEnvironment_ActivatePluginErrors(t *testing.T) { func TestEnvironment_ShutdownError(t *testing.T) { dir := initTmpDir(t, map[string]string{ - "foo/plugin.json": `{"id": "foo"}`, + "foo/plugin.json": `{"id": "foo", "backend": {}}`, }) defer os.RemoveAll(dir) -- cgit v1.2.3-1-g7c22