github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/plugin/supervisor_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package plugin 5 6 import ( 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 15 "github.com/mattermost/mattermost-server/v5/mlog" 16 "github.com/mattermost/mattermost-server/v5/model" 17 "github.com/mattermost/mattermost-server/v5/utils" 18 ) 19 20 func TestSupervisor(t *testing.T) { 21 for name, f := range map[string]func(*testing.T){ 22 "Supervisor_InvalidExecutablePath": testSupervisorInvalidExecutablePath, 23 "Supervisor_NonExistentExecutablePath": testSupervisorNonExistentExecutablePath, 24 "Supervisor_StartTimeout": testSupervisorStartTimeout, 25 } { 26 t.Run(name, f) 27 } 28 } 29 30 func testSupervisorInvalidExecutablePath(t *testing.T) { 31 dir, err := ioutil.TempDir("", "") 32 require.NoError(t, err) 33 defer os.RemoveAll(dir) 34 35 ioutil.WriteFile(filepath.Join(dir, "plugin.json"), []byte(`{"id": "foo", "backend": {"executable": "/foo/../../backend.exe"}}`), 0600) 36 37 bundle := model.BundleInfoForPath(dir) 38 log := mlog.NewLogger(&mlog.LoggerConfiguration{ 39 EnableConsole: true, 40 ConsoleJson: true, 41 ConsoleLevel: "error", 42 EnableFile: false, 43 }) 44 supervisor, err := newSupervisor(bundle, nil, log, nil) 45 assert.Nil(t, supervisor) 46 assert.Error(t, err) 47 } 48 49 func testSupervisorNonExistentExecutablePath(t *testing.T) { 50 dir, err := ioutil.TempDir("", "") 51 require.NoError(t, err) 52 defer os.RemoveAll(dir) 53 54 ioutil.WriteFile(filepath.Join(dir, "plugin.json"), []byte(`{"id": "foo", "backend": {"executable": "thisfileshouldnotexist"}}`), 0600) 55 56 bundle := model.BundleInfoForPath(dir) 57 log := mlog.NewLogger(&mlog.LoggerConfiguration{ 58 EnableConsole: true, 59 ConsoleJson: true, 60 ConsoleLevel: "error", 61 EnableFile: false, 62 }) 63 supervisor, err := newSupervisor(bundle, nil, log, nil) 64 require.Error(t, err) 65 require.Nil(t, supervisor) 66 } 67 68 // If plugin development goes really wrong, let's make sure plugin activation won't block forever. 69 func testSupervisorStartTimeout(t *testing.T) { 70 dir, err := ioutil.TempDir("", "") 71 require.NoError(t, err) 72 defer os.RemoveAll(dir) 73 74 backend := filepath.Join(dir, "backend.exe") 75 utils.CompileGo(t, ` 76 package main 77 78 func main() { 79 for { 80 } 81 } 82 `, backend) 83 84 ioutil.WriteFile(filepath.Join(dir, "plugin.json"), []byte(`{"id": "foo", "backend": {"executable": "backend.exe"}}`), 0600) 85 86 bundle := model.BundleInfoForPath(dir) 87 log := mlog.NewLogger(&mlog.LoggerConfiguration{ 88 EnableConsole: true, 89 ConsoleJson: true, 90 ConsoleLevel: "error", 91 EnableFile: false, 92 }) 93 supervisor, err := newSupervisor(bundle, nil, log, nil) 94 require.Error(t, err) 95 require.Nil(t, supervisor) 96 }