MM-29486: Fix racy test TestPatchChannelModeration (#16256)

* MM-29486: Fix racy test TestPatchChannelModeration

- We avoid appending to the slice in `(r *Role) IsValidWithoutId`
by just iterating the 2 slices separately.
- We pass deep copies of channels to prevent racy modification.

https://mattermost.atlassian.net/browse/MM-29486

```release-note
NONE
```

* fix lint

* simplify perm check

* improve more

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Agniva De Sarker
2020-11-12 15:26:35 +05:30
коммит произвёл GitHub
родитель 42c785218d
Коммит cae59d327c
2 изменённых файлов: 11 добавлений и 10 удалений

Просмотреть файл

@@ -1828,15 +1828,15 @@ func TestPatchChannelModerationsForChannel(t *testing.T) {
wg.Add(20)
for i := 0; i < 10; i++ {
go func() {
th.App.PatchChannelModerationsForChannel(channel, addCreatePosts)
th.App.PatchChannelModerationsForChannel(channel, removeCreatePosts)
th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), addCreatePosts)
th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), removeCreatePosts)
wg.Done()
}()
}
for i := 0; i < 10; i++ {
go func() {
th.App.PatchChannelModerationsForChannel(channel, addCreatePosts)
th.App.PatchChannelModerationsForChannel(channel, removeCreatePosts)
th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), addCreatePosts)
th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), removeCreatePosts)
wg.Done()
}()
}

Просмотреть файл

@@ -482,15 +482,16 @@ func (r *Role) IsValidWithoutId() bool {
return false
}
for _, permission := range r.Permissions {
permissionValidated := false
for _, p := range append(AllPermissions, DeprecatedPermissions...) {
check := func(perms []*Permission, permission string) bool {
for _, p := range perms {
if permission == p.Id {
permissionValidated = true
break
return true
}
}
return false
}
for _, permission := range r.Permissions {
permissionValidated := check(AllPermissions, permission) || check(DeprecatedPermissions, permission)
if !permissionValidated {
return false
}