[MM-21378] Add mutex to model.Post to guard against race conditions on Post.Props (#13884)
* Add mutex to model.Post to guard against race conditions on Post.Props * Rename mutex * Add GetProp() method to Post * Fix more tests * Fix flaky test Benchmarks: BenchmarkPostPropsGet_indirect BenchmarkPostPropsGet_indirect-2 85026746 13.0 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_indirect-4 90273747 13.0 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_indirect-8 88324293 13.0 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_indirect-16 91427720 13.1 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct BenchmarkPostPropsGet_direct-2 1000000000 0.242 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct-4 1000000000 0.241 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct-8 1000000000 0.240 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct-16 1000000000 0.241 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_indirect BenchmarkPostPropsAdd_indirect-2 5602224 203 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_indirect-4 5959496 206 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_indirect-8 5833999 205 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_indirect-16 5802493 225 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_direct BenchmarkPostPropsAdd_direct-2 100000000 11.3 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_direct-4 100000000 11.3 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_direct-8 100000000 11.6 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_direct-16 99840794 11.4 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_indirect BenchmarkPostPropsDel_indirect-2 18824002 61.9 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_indirect-4 19470736 63.8 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_indirect-8 17640460 65.3 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_indirect-16 18692962 65.4 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_direct BenchmarkPostPropsDel_direct-2 516257440 2.34 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_direct-4 514865216 2.43 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_direct-8 511330477 2.37 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_direct-16 499504010 2.38 ns/op 0 B/op 0 allocs/op
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
9e580361c2
Коммит
1e53fe85ad
@@ -302,9 +302,9 @@ func TestCreateWebhookPost(t *testing.T) {
|
||||
}, model.POST_SLACK_ATTACHMENT, "")
|
||||
require.Nil(t, err)
|
||||
|
||||
assert.Contains(t, post.Props, "from_webhook", "missing from_webhook prop")
|
||||
assert.Contains(t, post.Props, "attachments", "missing attachments prop")
|
||||
assert.Contains(t, post.Props, "webhook_display_name", "missing webhook_display_name prop")
|
||||
assert.Contains(t, post.GetProps(), "from_webhook", "missing from_webhook prop")
|
||||
assert.Contains(t, post.GetProps(), "attachments", "missing attachments prop")
|
||||
assert.Contains(t, post.GetProps(), "webhook_display_name", "missing webhook_display_name prop")
|
||||
|
||||
_, err = th.App.CreateWebhookPost(hook.UserId, th.BasicChannel, "foo", "user", "http://iconurl", "", nil, model.POST_SYSTEM_GENERIC, "")
|
||||
require.NotNil(t, err, "Should have failed - bad post type")
|
||||
@@ -449,7 +449,7 @@ func TestSplitWebhookPost(t *testing.T) {
|
||||
for i, split := range splits {
|
||||
if i < len(tc.Expected) {
|
||||
assert.Equal(t, tc.Expected[i].Message, split.Message)
|
||||
assert.Equal(t, tc.Expected[i].Props["attachments"], split.Props["attachments"])
|
||||
assert.Equal(t, tc.Expected[i].GetProp("attachments"), split.GetProp("attachments"))
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -610,17 +610,17 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
|
||||
select {
|
||||
case webhookPost := <-createdPost:
|
||||
assert.Equal(t, webhookPost.Message, "sample response text from test server")
|
||||
assert.Equal(t, webhookPost.Props["from_webhook"], "true")
|
||||
assert.Equal(t, webhookPost.GetProp("from_webhook"), "true")
|
||||
if testCase.ExpectedIconUrl != "" {
|
||||
assert.Equal(t, webhookPost.Props["override_icon_url"], testCase.ExpectedIconUrl)
|
||||
assert.Equal(t, webhookPost.GetProp("override_icon_url"), testCase.ExpectedIconUrl)
|
||||
} else {
|
||||
assert.Nil(t, webhookPost.Props["override_icon_url"])
|
||||
assert.Nil(t, webhookPost.GetProp("override_icon_url"))
|
||||
}
|
||||
|
||||
if testCase.ExpectedUsername != "" {
|
||||
assert.Equal(t, webhookPost.Props["override_username"], testCase.ExpectedUsername)
|
||||
assert.Equal(t, webhookPost.GetProp("override_username"), testCase.ExpectedUsername)
|
||||
} else {
|
||||
assert.Nil(t, webhookPost.Props["override_username"])
|
||||
assert.Nil(t, webhookPost.GetProp("override_username"))
|
||||
}
|
||||
case <-time.After(5 * time.Second):
|
||||
require.Fail(t, "Timeout, webhook response not created as post")
|
||||
|
||||
Ссылка в новой задаче
Block a user