mirror of
https://github.com/binwiederhier/ntfy.git
synced 2024-12-23 17:02:52 +03:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package util_test
|
|
|
|
import (
|
|
"github.com/stretchr/testify/require"
|
|
"heckel.io/ntfy/v2/util"
|
|
"math/rand"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestBatchingQueue_InfTimeout(t *testing.T) {
|
|
q := util.NewBatchingQueue[int](25, 1*time.Hour)
|
|
batches, total := make([][]int, 0), 0
|
|
var mu sync.Mutex
|
|
go func() {
|
|
for batch := range q.Dequeue() {
|
|
mu.Lock()
|
|
batches = append(batches, batch)
|
|
total += len(batch)
|
|
mu.Unlock()
|
|
}
|
|
}()
|
|
for i := 0; i < 101; i++ {
|
|
go q.Enqueue(i)
|
|
}
|
|
time.Sleep(time.Second)
|
|
mu.Lock()
|
|
require.Equal(t, 100, total) // One is missing, stuck in the last batch!
|
|
require.Equal(t, 4, len(batches))
|
|
mu.Unlock()
|
|
}
|
|
|
|
func TestBatchingQueue_WithTimeout(t *testing.T) {
|
|
q := util.NewBatchingQueue[int](25, 100*time.Millisecond)
|
|
batches, total := make([][]int, 0), 0
|
|
var mu sync.Mutex
|
|
go func() {
|
|
for batch := range q.Dequeue() {
|
|
mu.Lock()
|
|
batches = append(batches, batch)
|
|
total += len(batch)
|
|
mu.Unlock()
|
|
}
|
|
}()
|
|
for i := 0; i < 101; i++ {
|
|
go func(i int) {
|
|
time.Sleep(time.Duration(rand.Intn(700)) * time.Millisecond)
|
|
q.Enqueue(i)
|
|
}(i)
|
|
}
|
|
time.Sleep(time.Second)
|
|
mu.Lock()
|
|
require.Equal(t, 101, total)
|
|
require.True(t, len(batches) > 4) // 101/25
|
|
require.True(t, len(batches) < 21)
|
|
mu.Unlock()
|
|
}
|