mirror of
https://github.com/slackhq/nebula.git
synced 2025-11-22 16:34:25 +01:00
106 lines
1.9 KiB
Go
106 lines
1.9 KiB
Go
package virtqueue
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSplitQueue_MemoryAlignment(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
queueSize int
|
|
}{
|
|
{
|
|
name: "minimal queue size",
|
|
queueSize: 1,
|
|
},
|
|
{
|
|
name: "small queue size",
|
|
queueSize: 8,
|
|
},
|
|
{
|
|
name: "large queue size",
|
|
queueSize: 256,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
sq, err := NewSplitQueue(tt.queueSize)
|
|
require.NoError(t, err)
|
|
|
|
assert.Zero(t, sq.descriptorTable.Address()%descriptorTableAlignment)
|
|
assert.Zero(t, sq.availableRing.Address()%availableRingAlignment)
|
|
assert.Zero(t, sq.usedRing.Address()%usedRingAlignment)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSplitBuffers(t *testing.T) {
|
|
const sizeLimit = 16
|
|
tests := []struct {
|
|
name string
|
|
buffers [][]byte
|
|
expected [][]byte
|
|
}{
|
|
{
|
|
name: "no buffers",
|
|
buffers: make([][]byte, 0),
|
|
expected: make([][]byte, 0),
|
|
},
|
|
{
|
|
name: "small",
|
|
buffers: [][]byte{
|
|
make([]byte, 11),
|
|
},
|
|
expected: [][]byte{
|
|
make([]byte, 11),
|
|
},
|
|
},
|
|
{
|
|
name: "exact size",
|
|
buffers: [][]byte{
|
|
make([]byte, sizeLimit),
|
|
},
|
|
expected: [][]byte{
|
|
make([]byte, sizeLimit),
|
|
},
|
|
},
|
|
{
|
|
name: "large",
|
|
buffers: [][]byte{
|
|
make([]byte, 42),
|
|
},
|
|
expected: [][]byte{
|
|
make([]byte, 16),
|
|
make([]byte, 16),
|
|
make([]byte, 10),
|
|
},
|
|
},
|
|
{
|
|
name: "mixed",
|
|
buffers: [][]byte{
|
|
make([]byte, 7),
|
|
make([]byte, 30),
|
|
make([]byte, 15),
|
|
make([]byte, 32),
|
|
},
|
|
expected: [][]byte{
|
|
make([]byte, 7),
|
|
make([]byte, 16),
|
|
make([]byte, 14),
|
|
make([]byte, 15),
|
|
make([]byte, 16),
|
|
make([]byte, 16),
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
actual := splitBuffers(tt.buffers, sizeLimit)
|
|
assert.Equal(t, tt.expected, actual)
|
|
})
|
|
}
|
|
}
|