From 6c71fbaebd3d14cb6d7fb35e34aca95e494ec285 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Mon, 9 Nov 2020 19:25:51 +0530 Subject: [PATCH] MM-29478: Fix race in TestNotifyClusterEvent (#16240) The messages slice was accessed in a race manner. We protect it with a mutex ```release-note NONE ``` https://mattermost.atlassian.net/browse/MM-29478 --- testlib/cluster.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/testlib/cluster.go b/testlib/cluster.go index e9d091753a..25094c4384 100644 --- a/testlib/cluster.go +++ b/testlib/cluster.go @@ -4,12 +4,15 @@ package testlib import ( + "sync" + "github.com/mattermost/mattermost-server/v5/einterfaces" "github.com/mattermost/mattermost-server/v5/model" ) type FakeClusterInterface struct { clusterMessageHandler einterfaces.ClusterMessageHandler + mut sync.RWMutex messages []*model.ClusterMessage } @@ -34,6 +37,8 @@ func (c *FakeClusterInterface) GetMyClusterInfo() *model.ClusterInfo { return ni func (c *FakeClusterInterface) GetClusterInfos() []*model.ClusterInfo { return nil } func (c *FakeClusterInterface) SendClusterMessage(message *model.ClusterMessage) { + c.mut.Lock() + defer c.mut.Unlock() c.messages = append(c.messages, message) } @@ -64,9 +69,13 @@ func (c *FakeClusterInterface) GetPluginStatuses() (model.PluginStatuses, *model } func (c *FakeClusterInterface) GetMessages() []*model.ClusterMessage { + c.mut.RLock() + defer c.mut.RUnlock() return c.messages } func (c *FakeClusterInterface) ClearMessages() { + c.mut.Lock() + defer c.mut.Unlock() c.messages = nil }