Files
mostlymatter/server/boards/utils/callbackqueue_test.go
Agniva De Sarker b200a07881 v8.0 module release (#22975)
https://mattermost.atlassian.net/browse/MM-52079

```release-note
We upgrade the module version to 8.0. The new module path is github.com/mattermost-server/server/v8.
```


Co-authored-by: Doug Lauder <wiggin77@warpmail.net>
2023-04-18 11:05:28 +05:30

68 строки
1.5 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package utils
import (
"context"
"sync/atomic"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/mattermost/mattermost-server/server/v8/platform/shared/mlog"
)
func Test_newChangeNotifier(t *testing.T) {
logger := mlog.CreateConsoleTestLogger(false, mlog.LvlDebug)
t.Run("startup, shutdown", func(t *testing.T) {
cn := NewCallbackQueue("test1", 100, 5, logger)
var callbackCount int32
callback := func() error {
atomic.AddInt32(&callbackCount, 1)
return nil
}
const loops = 500
for i := 0; i < loops; i++ {
cn.Enqueue(callback)
// don't peg the cpu
if i%20 == 0 {
time.Sleep(time.Millisecond * 1)
}
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
ok := cn.Shutdown(ctx)
assert.True(t, ok, "shutdown should return true (no timeout)")
assert.Equal(t, int32(loops), atomic.LoadInt32(&callbackCount))
})
t.Run("handle panic", func(t *testing.T) {
cn := NewCallbackQueue("test2", 100, 5, logger)
var callbackCount int32
callback := func() error {
atomic.AddInt32(&callbackCount, 1)
panic("oh no!")
}
const loops = 5
for i := 0; i < loops; i++ {
cn.Enqueue(callback)
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
ok := cn.Shutdown(ctx)
assert.True(t, ok, "shutdown should return true (no timeout)")
assert.Equal(t, int32(loops), atomic.LoadInt32(&callbackCount))
})
}