github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/plugin_health_check_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "testing" 8 9 "github.com/mattermost/mattermost-server/v5/model" 10 "github.com/mattermost/mattermost-server/v5/plugin" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestHealthCheckJob(t *testing.T) { 15 th := Setup(t) 16 defer th.TearDown() 17 18 tearDown, _, _ := SetAppEnvironmentWithPlugins(t, []string{ 19 ` 20 package main 21 22 import ( 23 "github.com/mattermost/mattermost-server/v5/model" 24 "github.com/mattermost/mattermost-server/v5/plugin" 25 ) 26 27 type MyPlugin struct { 28 plugin.MattermostPlugin 29 } 30 31 func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { 32 panic("Uncaught error") 33 } 34 35 func main() { 36 plugin.ClientMain(&MyPlugin{}) 37 } 38 `, 39 }, th.App, th.App.NewPluginAPI) 40 defer tearDown() 41 42 env := th.App.GetPluginsEnvironment() 43 job := env.GetPluginHealthCheckJob() 44 require.NotNil(t, job) 45 bundles := env.Active() 46 require.Equal(t, 1, len(bundles)) 47 48 id := bundles[0].Manifest.Id 49 50 // First health check 51 hooks, err := env.HooksForPlugin(id) 52 require.Nil(t, err) 53 hooks.MessageWillBePosted(&plugin.Context{}, &model.Post{}) 54 job.CheckPlugin(id) 55 bundles = env.Active() 56 require.Equal(t, 1, len(bundles)) 57 require.Equal(t, id, bundles[0].Manifest.Id) 58 require.Equal(t, model.PluginStateRunning, env.GetPluginState(id)) 59 60 // Second health check 61 hooks, err = env.HooksForPlugin(id) 62 require.Nil(t, err) 63 hooks.MessageWillBePosted(&plugin.Context{}, &model.Post{}) 64 job.CheckPlugin(id) 65 bundles = env.Active() 66 require.Equal(t, 1, len(bundles)) 67 require.Equal(t, id, bundles[0].Manifest.Id) 68 require.Equal(t, model.PluginStateRunning, env.GetPluginState(id)) 69 70 // Third health check, plugin should be deactivated by the job 71 hooks, err = env.HooksForPlugin(id) 72 require.Nil(t, err) 73 hooks.MessageWillBePosted(&plugin.Context{}, &model.Post{}) 74 job.CheckPlugin(id) 75 bundles = env.Active() 76 require.Equal(t, 0, len(bundles)) 77 require.Equal(t, model.PluginStateFailedToStayRunning, env.GetPluginState(id)) 78 79 // Activated manually, plugin should stay active 80 env.Activate(id) 81 job.CheckPlugin(id) 82 bundles = env.Active() 83 require.Equal(t, 1, len(bundles)) 84 require.Equal(t, model.PluginStateRunning, env.GetPluginState(id)) 85 }