MM-11028 Adding some plugin tests. (#9103)
* Rearranging plugin mocks and moving some common test code out. * Adding tests. * Fixing tests after GoDoc cleanup changes.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
309a3dda60
Коммит
5a2d46c6cb
1
Makefile
1
Makefile
@@ -285,7 +285,6 @@ ldap-mocks: ## Creates mock files for ldap.
|
|||||||
plugin-mocks: ## Creates mock files for plugins.
|
plugin-mocks: ## Creates mock files for plugins.
|
||||||
go get github.com/vektra/mockery/...
|
go get github.com/vektra/mockery/...
|
||||||
$(GOPATH)/bin/mockery -dir plugin -name API -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.'
|
$(GOPATH)/bin/mockery -dir plugin -name API -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.'
|
||||||
$(GOPATH)/bin/mockery -dir plugin -name API -inpkg -output plugin -testonly -outpkg plugin -case underscore -note 'Regenerate this file using `make plugin-mocks`.'
|
|
||||||
$(GOPATH)/bin/mockery -dir plugin -name Hooks -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.'
|
$(GOPATH)/bin/mockery -dir plugin -name Hooks -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.'
|
||||||
|
|
||||||
pluginapi: ## Generates api and hooks glue code for plugins
|
pluginapi: ## Generates api and hooks glue code for plugins
|
||||||
|
|||||||
@@ -4,14 +4,38 @@
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/model"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func setupPluginApiTest(t *testing.T, pluginCode string, pluginManifest string, pluginId string, app *App) {
|
||||||
|
pluginDir, err := ioutil.TempDir("", "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
webappPluginDir, err := ioutil.TempDir("", "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer os.RemoveAll(pluginDir)
|
||||||
|
defer os.RemoveAll(webappPluginDir)
|
||||||
|
|
||||||
|
env, err := plugin.NewEnvironment(app.NewPluginAPI, pluginDir, webappPluginDir, app.Log)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
backend := filepath.Join(pluginDir, pluginId, "backend.exe")
|
||||||
|
compileGo(t, pluginCode, backend)
|
||||||
|
|
||||||
|
ioutil.WriteFile(filepath.Join(pluginDir, pluginId, "plugin.json"), []byte(pluginManifest), 0600)
|
||||||
|
env.Activate(pluginId)
|
||||||
|
|
||||||
|
app.Plugins = env
|
||||||
|
}
|
||||||
|
|
||||||
func TestPluginAPIUpdateUserStatus(t *testing.T) {
|
func TestPluginAPIUpdateUserStatus(t *testing.T) {
|
||||||
th := Setup().InitBasic()
|
th := Setup().InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
@@ -30,3 +54,124 @@ func TestPluginAPIUpdateUserStatus(t *testing.T) {
|
|||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
assert.Nil(t, status)
|
assert.Nil(t, status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPluginAPILoadPluginConfiguration(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
var pluginJson map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(`{"mystringsetting": "str", "MyIntSetting": 32, "myboolsetting": true}`), &pluginJson); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
|
cfg.PluginSettings.Plugins["testloadpluginconfig"] = pluginJson
|
||||||
|
})
|
||||||
|
setupPluginApiTest(t,
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
|
||||||
|
MyStringSetting string
|
||||||
|
MyIntSetting int
|
||||||
|
MyBoolSetting bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||||
|
return nil, fmt.Sprintf("%v%v%v", p.MyStringSetting, p.MyIntSetting, p.MyBoolSetting)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
`{"id": "testloadpluginconfig", "backend": {"executable": "backend.exe"}, "settings_schema": {
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "MyStringSetting",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "MyIntSetting",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "MyBoolSetting",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}}`, "testloadpluginconfig", th.App)
|
||||||
|
hooks, err := th.App.Plugins.HooksForPlugin("testloadpluginconfig")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, ret := hooks.MessageWillBePosted(nil, nil)
|
||||||
|
assert.Equal(t, "str32true", ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPluginAPILoadPluginConfigurationDefaults(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
var pluginJson map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(`{"mystringsetting": "override"}`), &pluginJson); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
|
cfg.PluginSettings.Plugins["testloadpluginconfig"] = pluginJson
|
||||||
|
})
|
||||||
|
setupPluginApiTest(t,
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
|
||||||
|
MyStringSetting string
|
||||||
|
MyIntSetting int
|
||||||
|
MyBoolSetting bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||||
|
return nil, fmt.Sprintf("%v%v%v", p.MyStringSetting, p.MyIntSetting, p.MyBoolSetting)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
`{"id": "testloadpluginconfig", "backend": {"executable": "backend.exe"}, "settings_schema": {
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "MyStringSetting",
|
||||||
|
"type": "text",
|
||||||
|
"default": "notthis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "MyIntSetting",
|
||||||
|
"type": "text",
|
||||||
|
"default": 35
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "MyBoolSetting",
|
||||||
|
"type": "bool",
|
||||||
|
"default": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}}`, "testloadpluginconfig", th.App)
|
||||||
|
hooks, err := th.App.Plugins.HooksForPlugin("testloadpluginconfig")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, ret := hooks.MessageWillBePosted(nil, nil)
|
||||||
|
assert.Equal(t, "override35true", ret)
|
||||||
|
}
|
||||||
|
|||||||
304
app/plugin_hooks_test.go
Обычный файл
304
app/plugin_hooks_test.go
Обычный файл
@@ -0,0 +1,304 @@
|
|||||||
|
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See License.txt for license information.
|
||||||
|
|
||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/plugin/plugintest"
|
||||||
|
"github.com/mattermost/mattermost-server/plugin/plugintest/mock"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func compileGo(t *testing.T, sourceCode, outputPath string) {
|
||||||
|
dir, err := ioutil.TempDir(".", "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "main.go"), []byte(sourceCode), 0600))
|
||||||
|
cmd := exec.Command("go", "build", "-o", outputPath, "main.go")
|
||||||
|
cmd.Dir = dir
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
require.NoError(t, cmd.Run())
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetAppEnvironmentWithPlugins(t *testing.T, pluginCode []string, app *App, apiFunc func(*model.Manifest) plugin.API) {
|
||||||
|
pluginDir, err := ioutil.TempDir("", "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
webappPluginDir, err := ioutil.TempDir("", "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer os.RemoveAll(pluginDir)
|
||||||
|
defer os.RemoveAll(webappPluginDir)
|
||||||
|
|
||||||
|
env, err := plugin.NewEnvironment(apiFunc, pluginDir, webappPluginDir, app.Log)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
for _, code := range pluginCode {
|
||||||
|
pluginId := model.NewId()
|
||||||
|
backend := filepath.Join(pluginDir, pluginId, "backend.exe")
|
||||||
|
compileGo(t, code, backend)
|
||||||
|
|
||||||
|
ioutil.WriteFile(filepath.Join(pluginDir, pluginId, "plugin.json"), []byte(`{"id": "`+pluginId+`", "backend": {"executable": "backend.exe"}}`), 0600)
|
||||||
|
env.Activate(pluginId)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.Plugins = env
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHookMessageWillBePosted(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
SetAppEnvironmentWithPlugins(t,
|
||||||
|
[]string{
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||||
|
post.Message = post.Message + "fromplugin"
|
||||||
|
return post, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`}, th.App, th.App.NewPluginAPI)
|
||||||
|
|
||||||
|
post := &model.Post{
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "message_",
|
||||||
|
CreateAt: model.GetMillis() - 10000,
|
||||||
|
}
|
||||||
|
post, err := th.App.CreatePost(post, th.BasicChannel, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, "message_fromplugin", post.Message)
|
||||||
|
if result := <-th.App.Srv.Store.Post().GetSingle(post.Id); result.Err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(t, "message_fromplugin", result.Data.(*model.Post).Message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHookMessageWillBePostedMultiple(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
SetAppEnvironmentWithPlugins(t,
|
||||||
|
[]string{
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||||
|
|
||||||
|
post.Message = "prefix_" + post.Message
|
||||||
|
return post, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||||
|
post.Message = post.Message + "_suffix"
|
||||||
|
return post, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
}, th.App, th.App.NewPluginAPI)
|
||||||
|
|
||||||
|
post := &model.Post{
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "message",
|
||||||
|
CreateAt: model.GetMillis() - 10000,
|
||||||
|
}
|
||||||
|
post, err := th.App.CreatePost(post, th.BasicChannel, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, "prefix_message_suffix", post.Message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHookMessageHasBeenPosted(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
var mockAPI plugintest.API
|
||||||
|
mockAPI.On("LoadPluginConfiguration", mock.Anything).Return(nil)
|
||||||
|
mockAPI.On("DeleteUser", "message").Return(nil)
|
||||||
|
|
||||||
|
SetAppEnvironmentWithPlugins(t,
|
||||||
|
[]string{
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageHasBeenPosted(c *plugin.Context, post *model.Post) {
|
||||||
|
p.API.DeleteUser(post.Message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`}, th.App, func(*model.Manifest) plugin.API { return &mockAPI })
|
||||||
|
|
||||||
|
post := &model.Post{
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "message",
|
||||||
|
CreateAt: model.GetMillis() - 10000,
|
||||||
|
}
|
||||||
|
post, err := th.App.CreatePost(post, th.BasicChannel, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHookMessageWillBeUpdated(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
SetAppEnvironmentWithPlugins(t,
|
||||||
|
[]string{
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBeUpdated(c *plugin.Context, newPost, oldPost *model.Post) (*model.Post, string) {
|
||||||
|
newPost.Message = newPost.Message + "fromplugin"
|
||||||
|
return newPost, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`}, th.App, th.App.NewPluginAPI)
|
||||||
|
|
||||||
|
post := &model.Post{
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "message_",
|
||||||
|
CreateAt: model.GetMillis() - 10000,
|
||||||
|
}
|
||||||
|
post, err := th.App.CreatePost(post, th.BasicChannel, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, "message_", post.Message)
|
||||||
|
post.Message = post.Message + "edited_"
|
||||||
|
post, err = th.App.UpdatePost(post, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, "message_edited_fromplugin", post.Message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHookMessageHasBeenUpdated(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
var mockAPI plugintest.API
|
||||||
|
mockAPI.On("LoadPluginConfiguration", mock.Anything).Return(nil)
|
||||||
|
mockAPI.On("DeleteUser", "message_edited").Return(nil)
|
||||||
|
mockAPI.On("DeleteTeam", "message_").Return(nil)
|
||||||
|
SetAppEnvironmentWithPlugins(t,
|
||||||
|
[]string{
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageHasBeenUpdated(c *plugin.Context, newPost, oldPost *model.Post) {
|
||||||
|
p.API.DeleteUser(newPost.Message)
|
||||||
|
p.API.DeleteTeam(oldPost.Message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`}, th.App, func(*model.Manifest) plugin.API { return &mockAPI })
|
||||||
|
|
||||||
|
post := &model.Post{
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "message_",
|
||||||
|
CreateAt: model.GetMillis() - 10000,
|
||||||
|
}
|
||||||
|
post, err := th.App.CreatePost(post, th.BasicChannel, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, "message_", post.Message)
|
||||||
|
post.Message = post.Message + "edited"
|
||||||
|
post, err = th.App.UpdatePost(post, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@@ -13,13 +13,11 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/mlog"
|
"github.com/mattermost/mattermost-server/mlog"
|
||||||
"github.com/mattermost/mattermost-server/model"
|
"github.com/mattermost/mattermost-server/model"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/mock"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSupervisor(t *testing.T) {
|
func TestSupervisor(t *testing.T) {
|
||||||
for name, f := range map[string]func(*testing.T){
|
for name, f := range map[string]func(*testing.T){
|
||||||
"Supervisor": testSupervisor,
|
|
||||||
"Supervisor_InvalidExecutablePath": testSupervisor_InvalidExecutablePath,
|
"Supervisor_InvalidExecutablePath": testSupervisor_InvalidExecutablePath,
|
||||||
"Supervisor_NonExistentExecutablePath": testSupervisor_NonExistentExecutablePath,
|
"Supervisor_NonExistentExecutablePath": testSupervisor_NonExistentExecutablePath,
|
||||||
"Supervisor_StartTimeout": testSupervisor_StartTimeout,
|
"Supervisor_StartTimeout": testSupervisor_StartTimeout,
|
||||||
@@ -28,7 +26,7 @@ func TestSupervisor(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func CompileGo(t *testing.T, sourceCode, outputPath string) {
|
func compileGo(t *testing.T, sourceCode, outputPath string) {
|
||||||
dir, err := ioutil.TempDir(".", "")
|
dir, err := ioutil.TempDir(".", "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
@@ -40,44 +38,6 @@ func CompileGo(t *testing.T, sourceCode, outputPath string) {
|
|||||||
require.NoError(t, cmd.Run())
|
require.NoError(t, cmd.Run())
|
||||||
}
|
}
|
||||||
|
|
||||||
func testSupervisor(t *testing.T) {
|
|
||||||
dir, err := ioutil.TempDir("", "")
|
|
||||||
require.NoError(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
backend := filepath.Join(dir, "backend.exe")
|
|
||||||
CompileGo(t, `
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/mattermost/mattermost-server/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
type MyPlugin struct {
|
|
||||||
plugin.MattermostPlugin
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.ClientMain(&MyPlugin{})
|
|
||||||
}
|
|
||||||
`, backend)
|
|
||||||
|
|
||||||
ioutil.WriteFile(filepath.Join(dir, "plugin.json"), []byte(`{"id": "foo", "backend": {"executable": "backend.exe"}}`), 0600)
|
|
||||||
|
|
||||||
bundle := model.BundleInfoForPath(dir)
|
|
||||||
var api MockAPI
|
|
||||||
api.On("LoadPluginConfiguration", mock.Anything).Return(nil)
|
|
||||||
log := mlog.NewLogger(&mlog.LoggerConfiguration{
|
|
||||||
EnableConsole: true,
|
|
||||||
ConsoleJson: true,
|
|
||||||
ConsoleLevel: "error",
|
|
||||||
EnableFile: false,
|
|
||||||
})
|
|
||||||
supervisor, err := newSupervisor(bundle, log, &api)
|
|
||||||
require.NoError(t, err)
|
|
||||||
supervisor.Shutdown()
|
|
||||||
}
|
|
||||||
|
|
||||||
func testSupervisor_InvalidExecutablePath(t *testing.T) {
|
func testSupervisor_InvalidExecutablePath(t *testing.T) {
|
||||||
dir, err := ioutil.TempDir("", "")
|
dir, err := ioutil.TempDir("", "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -123,7 +83,7 @@ func testSupervisor_StartTimeout(t *testing.T) {
|
|||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
backend := filepath.Join(dir, "backend.exe")
|
backend := filepath.Join(dir, "backend.exe")
|
||||||
CompileGo(t, `
|
compileGo(t, `
|
||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user