mirror of
https://github.com/mochi-mqtt/server.git
synced 2025-09-27 04:26:23 +08:00
90 lines
1.4 KiB
Go
90 lines
1.4 KiB
Go
// SPDX-License-Identifier: MIT
|
|
// SPDX-FileCopyrightText: 2022 mochi-co
|
|
// SPDX-FileContributor: mochi-co
|
|
|
|
package mqtt
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFanPool(t *testing.T) {
|
|
f := NewFanPool(1, 2)
|
|
require.NotNil(t, f)
|
|
require.Equal(t, uint64(1), f.capacity)
|
|
require.Equal(t, 2, cap(f.queue[0]))
|
|
|
|
o := make(chan bool)
|
|
go func() {
|
|
f.Enqueue("test", func() {
|
|
o <- true
|
|
})
|
|
}()
|
|
|
|
require.True(t, <-o)
|
|
f.Close()
|
|
f.Wait()
|
|
}
|
|
|
|
func TestFillWorkers(t *testing.T) {
|
|
f := &FanPool{
|
|
perChan: 3,
|
|
queue: make([]taskChan, 2),
|
|
}
|
|
f.fillWorkers(2)
|
|
require.Len(t, f.queue, 2)
|
|
require.Equal(t, 3, cap(f.queue[0]))
|
|
}
|
|
|
|
func TestEnqueue(t *testing.T) {
|
|
f := &FanPool{
|
|
capacity: 2,
|
|
queue: []taskChan{
|
|
make(taskChan, 2),
|
|
make(taskChan, 2),
|
|
},
|
|
}
|
|
|
|
go func() {
|
|
f.Enqueue("a", func() {})
|
|
}()
|
|
require.NotNil(t, <-f.queue[1])
|
|
}
|
|
|
|
func TestEnqueueOnEmpty(t *testing.T) {
|
|
f := &FanPool{
|
|
queue: []taskChan{},
|
|
}
|
|
|
|
go func() {
|
|
f.Enqueue("a", func() {})
|
|
}()
|
|
|
|
require.Len(t, f.queue, 0)
|
|
}
|
|
|
|
func TestSize(t *testing.T) {
|
|
f := &FanPool{
|
|
capacity: 10,
|
|
}
|
|
|
|
require.Equal(t, uint64(10), f.Size())
|
|
}
|
|
|
|
func TestClose(t *testing.T) {
|
|
f := &FanPool{
|
|
capacity: 3,
|
|
queue: []taskChan{
|
|
make(taskChan, 2),
|
|
make(taskChan, 2),
|
|
make(taskChan, 2),
|
|
},
|
|
}
|
|
|
|
f.Close()
|
|
require.Equal(t, uint64(0), f.Size())
|
|
require.Nil(t, f.queue)
|
|
}
|