[MM-19914] Fix data races in WebSocketEvent (#13039)
* Make WebSocketEvent type immutable * Update code to use updated immutable WebSocketEvent type * Export WebSocketEvent fields and mark them as deprecated
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
9ab7bee0a6
Коммит
80dd2915db
@@ -1367,7 +1367,7 @@ func TestConvertChannelToPrivate(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case resp := <-WebSocketClient.EventChannel:
|
||||
if resp.Event == model.WEBSOCKET_EVENT_CHANNEL_CONVERTED && resp.Data["channel_id"].(string) == publicChannel2.Id {
|
||||
if resp.EventType() == model.WEBSOCKET_EVENT_CHANNEL_CONVERTED && resp.GetData()["channel_id"].(string) == publicChannel2.Id {
|
||||
eventHit = true
|
||||
}
|
||||
case <-stop:
|
||||
@@ -2426,7 +2426,7 @@ func TestRemoveChannelMember(t *testing.T) {
|
||||
})
|
||||
|
||||
wsr := <-wsClient.EventChannel
|
||||
require.Equal(t, model.WEBSOCKET_EVENT_HELLO, wsr.Event)
|
||||
require.Equal(t, model.WEBSOCKET_EVENT_HELLO, wsr.EventType())
|
||||
|
||||
// requirePost listens for websocket events and tries to find the post matching
|
||||
// the expected post's channel and message.
|
||||
@@ -2435,7 +2435,7 @@ func TestRemoveChannelMember(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case event := <-wsClient.EventChannel:
|
||||
postData, ok := event.Data["post"]
|
||||
postData, ok := event.GetData()["post"]
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -315,7 +315,7 @@ func TestNotifyClusterPluginEvent(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case resp := <-webSocketClient.EventChannel:
|
||||
if resp.Event == model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED && len(resp.Data["plugin_statuses"].([]interface{})) == 0 {
|
||||
if resp.EventType() == model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED && len(resp.GetData()["plugin_statuses"].([]interface{})) == 0 {
|
||||
done <- true
|
||||
return
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@ func TestCreatePostSendOutOfChannelMentions(t *testing.T) {
|
||||
for waiting {
|
||||
select {
|
||||
case event := <-WebSocketClient.EventChannel:
|
||||
require.NotEqual(t, model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, event.Event, "should not have ephemeral message event")
|
||||
require.NotEqual(t, model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, event.EventType(), "should not have ephemeral message event")
|
||||
case <-timeout:
|
||||
waiting = false
|
||||
}
|
||||
@@ -506,12 +506,12 @@ func TestCreatePostSendOutOfChannelMentions(t *testing.T) {
|
||||
for waiting {
|
||||
select {
|
||||
case event := <-WebSocketClient.EventChannel:
|
||||
if event.Event != model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE {
|
||||
if event.EventType() != model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE {
|
||||
// Ignore any other events
|
||||
continue
|
||||
}
|
||||
|
||||
wpost := model.PostFromJson(strings.NewReader(event.Data["post"].(string)))
|
||||
wpost := model.PostFromJson(strings.NewReader(event.GetData()["post"].(string)))
|
||||
|
||||
acm, ok := wpost.Props[model.PROPS_ADD_CHANNEL_MEMBER].(map[string]interface{})
|
||||
require.True(t, ok, "should have received ephemeral post with 'add_channel_member' in props")
|
||||
|
||||
@@ -259,6 +259,7 @@ func TestUpdatePreferencesWebsocket(t *testing.T) {
|
||||
Name: model.NewId(),
|
||||
},
|
||||
}
|
||||
|
||||
_, resp := th.Client.UpdatePreferences(userId, preferences)
|
||||
CheckNoError(t, resp)
|
||||
|
||||
@@ -268,12 +269,12 @@ func TestUpdatePreferencesWebsocket(t *testing.T) {
|
||||
for waiting {
|
||||
select {
|
||||
case event := <-WebSocketClient.EventChannel:
|
||||
if event.Event != model.WEBSOCKET_EVENT_PREFERENCES_CHANGED {
|
||||
if event.EventType() != model.WEBSOCKET_EVENT_PREFERENCES_CHANGED {
|
||||
// Ignore any other events
|
||||
continue
|
||||
}
|
||||
|
||||
received, err := model.PreferencesFromJson(strings.NewReader(event.Data["preferences"].(string)))
|
||||
received, err := model.PreferencesFromJson(strings.NewReader(event.GetData()["preferences"].(string)))
|
||||
require.NoError(t, err)
|
||||
|
||||
for i, p := range *preferences {
|
||||
@@ -376,12 +377,12 @@ func TestDeletePreferencesWebsocket(t *testing.T) {
|
||||
for waiting {
|
||||
select {
|
||||
case event := <-WebSocketClient.EventChannel:
|
||||
if event.Event != model.WEBSOCKET_EVENT_PREFERENCES_DELETED {
|
||||
if event.EventType() != model.WEBSOCKET_EVENT_PREFERENCES_DELETED {
|
||||
// Ignore any other events
|
||||
continue
|
||||
}
|
||||
|
||||
received, err := model.PreferencesFromJson(strings.NewReader(event.Data["preferences"].(string)))
|
||||
received, err := model.PreferencesFromJson(strings.NewReader(event.GetData()["preferences"].(string)))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -323,11 +323,11 @@ func TestCreateUserWebSocketEvent(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case ev := <-userWSClient.EventChannel:
|
||||
if ev.Event == model.WEBSOCKET_EVENT_NEW_USER {
|
||||
if ev.EventType() == model.WEBSOCKET_EVENT_NEW_USER {
|
||||
userHasReceived = true
|
||||
}
|
||||
case ev := <-guestWSClient.EventChannel:
|
||||
if ev.Event == model.WEBSOCKET_EVENT_NEW_USER {
|
||||
if ev.EventType() == model.WEBSOCKET_EVENT_NEW_USER {
|
||||
guestHasReceived = true
|
||||
}
|
||||
case <-time.After(2 * time.Second):
|
||||
@@ -1675,7 +1675,7 @@ func assertExpectedWebsocketEvent(t *testing.T, client *model.WebSocketClient, e
|
||||
select {
|
||||
case resp, ok := <-client.EventChannel:
|
||||
require.Truef(t, ok, "channel closed before receiving expected event %s", model.WEBSOCKET_EVENT_USER_UPDATED)
|
||||
if resp.Event == model.WEBSOCKET_EVENT_USER_UPDATED {
|
||||
if resp.EventType() == model.WEBSOCKET_EVENT_USER_UPDATED {
|
||||
test(resp)
|
||||
return
|
||||
}
|
||||
@@ -1687,7 +1687,7 @@ func assertExpectedWebsocketEvent(t *testing.T, client *model.WebSocketClient, e
|
||||
|
||||
func assertWebsocketEventUserUpdatedWithEmail(t *testing.T, client *model.WebSocketClient, email string) {
|
||||
assertExpectedWebsocketEvent(t, client, model.WEBSOCKET_EVENT_USER_UPDATED, func(event *model.WebSocketEvent) {
|
||||
eventUser, ok := event.Data["user"].(map[string]interface{})
|
||||
eventUser, ok := event.GetData()["user"].(map[string]interface{})
|
||||
require.True(t, ok, "expected user")
|
||||
userEmail, ok := eventUser["email"].(string)
|
||||
require.Truef(t, ok, "expected email %s, but got nil", email)
|
||||
|
||||
@@ -115,7 +115,7 @@ func TestWebSocketEvent(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case resp := <-WebSocketClient.EventChannel:
|
||||
if resp.Event == model.WEBSOCKET_EVENT_TYPING && resp.Data["user_id"].(string) == "somerandomid" {
|
||||
if resp.EventType() == model.WEBSOCKET_EVENT_TYPING && resp.GetData()["user_id"].(string) == "somerandomid" {
|
||||
eventHit = true
|
||||
}
|
||||
case <-stop:
|
||||
@@ -140,7 +140,7 @@ func TestWebSocketEvent(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case resp := <-WebSocketClient.EventChannel:
|
||||
if resp.Event == model.WEBSOCKET_EVENT_TYPING {
|
||||
if resp.EventType() == model.WEBSOCKET_EVENT_TYPING {
|
||||
eventHit = true
|
||||
}
|
||||
case <-stop:
|
||||
@@ -180,7 +180,7 @@ func TestCreateDirectChannelWithSocket(t *testing.T) {
|
||||
require.Equal(t, resp.Status, model.STATUS_OK, "should have responded OK to authentication challenge")
|
||||
|
||||
wsr := <-WebSocketClient.EventChannel
|
||||
require.Equal(t, wsr.Event, model.WEBSOCKET_EVENT_HELLO, "missing hello")
|
||||
require.Equal(t, wsr.EventType(), model.WEBSOCKET_EVENT_HELLO, "missing hello")
|
||||
|
||||
stop := make(chan bool)
|
||||
count := 0
|
||||
@@ -189,7 +189,7 @@ func TestCreateDirectChannelWithSocket(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case wsr := <-WebSocketClient.EventChannel:
|
||||
if wsr != nil && wsr.Event == model.WEBSOCKET_EVENT_DIRECT_ADDED {
|
||||
if wsr != nil && wsr.EventType() == model.WEBSOCKET_EVENT_DIRECT_ADDED {
|
||||
count = count + 1
|
||||
}
|
||||
|
||||
@@ -378,8 +378,8 @@ func TestWebSocketStatuses(t *testing.T) {
|
||||
for {
|
||||
select {
|
||||
case resp := <-WebSocketClient.EventChannel:
|
||||
if resp.Event == model.WEBSOCKET_EVENT_STATUS_CHANGE && resp.Data["user_id"].(string) == th.BasicUser.Id {
|
||||
status := resp.Data["status"].(string)
|
||||
if resp.EventType() == model.WEBSOCKET_EVENT_STATUS_CHANGE && resp.GetData()["user_id"].(string) == th.BasicUser.Id {
|
||||
status := resp.GetData()["status"].(string)
|
||||
if status == model.STATUS_ONLINE {
|
||||
onlineHit = true
|
||||
} else if status == model.STATUS_AWAY {
|
||||
|
||||
Ссылка в новой задаче
Block a user