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  }