mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* failing to find i18n shouldn't segfault The server was trying to handle the fact that it couldn't find the i18n directory, by emitting a translated log message... * fix utils.FindDir The attempts to find the directory in the parent or grandparent directory don't work if the current working directory was inside `enterprise`, with `enterprise` itself being a symlink as per the usual developer setup. Recurse to the root of the filesystem, cleaning the path along the way to work around this limitation (and allow tests to be run from an arbitrarily deep nesting level.) Fix corresponding usages to employ filepath.Join. * failing to find html templates shouldn't segfault * fail fast if the test user cannot be created * rework utils.FindDir to retain backwards compatibility
201 lines
5.1 KiB
Go
201 lines
5.1 KiB
Go
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
package api4
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/mattermost/mattermost-server/model"
|
|
"github.com/mattermost/mattermost-server/utils"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPlugin(t *testing.T) {
|
|
pluginDir, err := ioutil.TempDir("", "mm-plugin-test")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(pluginDir)
|
|
|
|
webappDir, err := ioutil.TempDir("", "mm-webapp-test")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(webappDir)
|
|
|
|
th := Setup().InitBasic().InitSystemAdmin()
|
|
defer th.TearDown()
|
|
|
|
enablePlugins := *th.App.Config().PluginSettings.Enable
|
|
enableUploadPlugins := *th.App.Config().PluginSettings.EnableUploads
|
|
statesJson, _ := json.Marshal(th.App.Config().PluginSettings.PluginStates)
|
|
states := map[string]*model.PluginState{}
|
|
json.Unmarshal(statesJson, &states)
|
|
defer func() {
|
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
|
*cfg.PluginSettings.Enable = enablePlugins
|
|
*cfg.PluginSettings.EnableUploads = enableUploadPlugins
|
|
cfg.PluginSettings.PluginStates = states
|
|
})
|
|
th.App.SaveConfig(th.App.Config(), false)
|
|
}()
|
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
|
*cfg.PluginSettings.Enable = true
|
|
*cfg.PluginSettings.EnableUploads = true
|
|
})
|
|
|
|
th.App.InitPlugins(pluginDir, webappDir, nil)
|
|
defer func() {
|
|
th.App.ShutDownPlugins()
|
|
th.App.PluginEnv = nil
|
|
}()
|
|
|
|
path, _ := utils.FindDir("tests")
|
|
file, err := os.Open(filepath.Join(path, "testplugin.tar.gz"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer file.Close()
|
|
|
|
// Successful upload
|
|
manifest, resp := th.SystemAdminClient.UploadPlugin(file)
|
|
defer os.RemoveAll("plugins/testplugin")
|
|
CheckNoError(t, resp)
|
|
|
|
assert.Equal(t, "testplugin", manifest.Id)
|
|
|
|
// Upload error cases
|
|
_, resp = th.SystemAdminClient.UploadPlugin(bytes.NewReader([]byte("badfile")))
|
|
CheckBadRequestStatus(t, resp)
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = false })
|
|
_, resp = th.SystemAdminClient.UploadPlugin(file)
|
|
CheckNotImplementedStatus(t, resp)
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
|
*cfg.PluginSettings.Enable = true
|
|
*cfg.PluginSettings.EnableUploads = false
|
|
})
|
|
_, resp = th.SystemAdminClient.UploadPlugin(file)
|
|
CheckNotImplementedStatus(t, resp)
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableUploads = true })
|
|
_, resp = th.Client.UploadPlugin(file)
|
|
CheckForbiddenStatus(t, resp)
|
|
|
|
// Successful gets
|
|
pluginsResp, resp := th.SystemAdminClient.GetPlugins()
|
|
CheckNoError(t, resp)
|
|
|
|
found := false
|
|
for _, m := range pluginsResp.Inactive {
|
|
if m.Id == manifest.Id {
|
|
found = true
|
|
}
|
|
}
|
|
|
|
assert.True(t, found)
|
|
|
|
found = false
|
|
for _, m := range pluginsResp.Active {
|
|
if m.Id == manifest.Id {
|
|
found = true
|
|
}
|
|
}
|
|
|
|
assert.False(t, found)
|
|
|
|
// Successful activate
|
|
ok, resp := th.SystemAdminClient.ActivatePlugin(manifest.Id)
|
|
CheckNoError(t, resp)
|
|
assert.True(t, ok)
|
|
|
|
pluginsResp, resp = th.SystemAdminClient.GetPlugins()
|
|
CheckNoError(t, resp)
|
|
|
|
found = false
|
|
for _, m := range pluginsResp.Active {
|
|
if m.Id == manifest.Id {
|
|
found = true
|
|
}
|
|
}
|
|
|
|
assert.True(t, found)
|
|
|
|
// Activate error case
|
|
ok, resp = th.SystemAdminClient.ActivatePlugin("junk")
|
|
CheckBadRequestStatus(t, resp)
|
|
assert.False(t, ok)
|
|
|
|
// Successful deactivate
|
|
ok, resp = th.SystemAdminClient.DeactivatePlugin(manifest.Id)
|
|
CheckNoError(t, resp)
|
|
assert.True(t, ok)
|
|
|
|
pluginsResp, resp = th.SystemAdminClient.GetPlugins()
|
|
CheckNoError(t, resp)
|
|
|
|
found = false
|
|
for _, m := range pluginsResp.Inactive {
|
|
if m.Id == manifest.Id {
|
|
found = true
|
|
}
|
|
}
|
|
|
|
assert.True(t, found)
|
|
|
|
// Deactivate error case
|
|
ok, resp = th.SystemAdminClient.DeactivatePlugin("junk")
|
|
CheckBadRequestStatus(t, resp)
|
|
assert.False(t, ok)
|
|
|
|
// Get error cases
|
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = false })
|
|
_, resp = th.SystemAdminClient.GetPlugins()
|
|
CheckNotImplementedStatus(t, resp)
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true })
|
|
_, resp = th.Client.GetPlugins()
|
|
CheckForbiddenStatus(t, resp)
|
|
|
|
// Successful webapp get
|
|
_, resp = th.SystemAdminClient.ActivatePlugin(manifest.Id)
|
|
CheckNoError(t, resp)
|
|
|
|
manifests, resp := th.Client.GetWebappPlugins()
|
|
CheckNoError(t, resp)
|
|
|
|
found = false
|
|
for _, m := range manifests {
|
|
if m.Id == manifest.Id {
|
|
found = true
|
|
}
|
|
}
|
|
|
|
assert.True(t, found)
|
|
|
|
// Successful remove
|
|
ok, resp = th.SystemAdminClient.RemovePlugin(manifest.Id)
|
|
CheckNoError(t, resp)
|
|
assert.True(t, ok)
|
|
|
|
// Remove error cases
|
|
ok, resp = th.SystemAdminClient.RemovePlugin(manifest.Id)
|
|
CheckBadRequestStatus(t, resp)
|
|
assert.False(t, ok)
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = false })
|
|
_, resp = th.SystemAdminClient.RemovePlugin(manifest.Id)
|
|
CheckNotImplementedStatus(t, resp)
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true })
|
|
_, resp = th.Client.RemovePlugin(manifest.Id)
|
|
CheckForbiddenStatus(t, resp)
|
|
|
|
_, resp = th.SystemAdminClient.RemovePlugin("bad.id")
|
|
CheckBadRequestStatus(t, resp)
|
|
}
|