MM-2276: Fix flaky TestPlugin in cmd/mattermost/commands (#14064)

There was a race in (*App).SyncPlugins where if the same plugin
existed in availablePlugins and pluginSignaturePathMap, then
we would try to add/remove at the same time.

This would lead to a possible removal / addition of a plugin directory
or even unable to remove a directory because it was already in use.

We fix this by first finishing the removal of availablePlugins
before syncing it with the file store.
This commit is contained in:
Agniva De Sarker
2020-03-17 21:26:59 +05:30
committed by GitHub
parent dd0b0a3d67
commit d0d6125541
2 changed files with 13 additions and 6 deletions

View File

@@ -23,22 +23,29 @@ func TestPlugin(t *testing.T) {
*cfg.PluginSettings.ClientDirectory = "./test-client-plugins"
th.SetConfig(cfg)
os.MkdirAll("./test-plugins", os.ModePerm)
os.MkdirAll("./test-client-plugins", os.ModePerm)
err := os.MkdirAll("./test-plugins", os.ModePerm)
require.Nil(t, err)
err = os.MkdirAll("./test-client-plugins", os.ModePerm)
require.Nil(t, err)
path, _ := fileutils.FindDir("tests")
th.CheckCommand(t, "plugin", "add", filepath.Join(path, "testplugin.tar.gz"))
output := th.CheckCommand(t, "plugin", "add", filepath.Join(path, "testplugin.tar.gz"))
assert.Contains(t, output, "Added plugin:")
output = th.CheckCommand(t, "plugin", "enable", "testplugin")
assert.Contains(t, output, "Enabled plugin: testplugin")
th.CheckCommand(t, "plugin", "enable", "testplugin")
fs, err := config.NewFileStore(th.ConfigPath(), false)
require.Nil(t, err)
require.NotNil(t, fs.Get().PluginSettings.PluginStates["testplugin"])
assert.True(t, fs.Get().PluginSettings.PluginStates["testplugin"].Enable)
fs.Close()
th.CheckCommand(t, "plugin", "disable", "testplugin")
output = th.CheckCommand(t, "plugin", "disable", "testplugin")
assert.Contains(t, output, "Disabled plugin: testplugin")
fs, err = config.NewFileStore(th.ConfigPath(), false)
require.Nil(t, err)
require.NotNil(t, fs.Get().PluginSettings.PluginStates["testplugin"])
assert.False(t, fs.Get().PluginSettings.PluginStates["testplugin"].Enable)
fs.Close()