diff --git a/api4/plugin_test.go b/api4/plugin_test.go index 4dbed6ba4a..210ec1b722 100644 --- a/api4/plugin_test.go +++ b/api4/plugin_test.go @@ -305,11 +305,34 @@ func TestNotifyClusterPluginEvent(t *testing.T) { require.Equal(t, "testplugin", manifest.Id) // Successful remove + webSocketClient, err := th.CreateWebSocketSystemAdminClient() + require.Nil(t, err) + webSocketClient.Listen() + defer webSocketClient.Close() + done := make(chan bool) + go func() { + for { + select { + case resp := <-webSocketClient.EventChannel: + if resp.Event == model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED && len(resp.Data["plugin_statuses"].([]interface{})) == 0 { + done <- true + return + } + case <-time.After(5 * time.Second): + done <- false + return + } + } + }() + testCluster.ClearMessages() ok, resp := th.SystemAdminClient.RemovePlugin(manifest.Id) CheckNoError(t, resp) require.True(t, ok) + result := <-done + require.True(t, result, "plugin_statuses_changed websocket event was not received") + messages = testCluster.GetMessages() expectedRemoveMessage := &model.ClusterMessage{ diff --git a/app/plugin_install.go b/app/plugin_install.go index 10fe455db1..26b768418e 100644 --- a/app/plugin_install.go +++ b/app/plugin_install.go @@ -251,6 +251,10 @@ func (a *App) removePlugin(id string) *model.AppError { }, ) + if err := a.notifyPluginStatusesChanged(); err != nil { + mlog.Error("Failed to notify plugin status changed", mlog.Err(err)) + } + return nil }