mirror of
https://github.com/slackhq/nebula.git
synced 2025-11-22 08:24:25 +01:00
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package virtqueue
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestAvailableRing_MemoryLayout(t *testing.T) {
|
|
const queueSize = 2
|
|
|
|
memory := make([]byte, availableRingSize(queueSize))
|
|
r := newAvailableRing(queueSize, memory)
|
|
|
|
*r.flags = 0x01ff
|
|
*r.ringIndex = 1
|
|
r.ring[0] = 0x1234
|
|
r.ring[1] = 0x5678
|
|
|
|
assert.Equal(t, []byte{
|
|
0xff, 0x01,
|
|
0x01, 0x00,
|
|
0x34, 0x12,
|
|
0x78, 0x56,
|
|
0x00, 0x00,
|
|
}, memory)
|
|
}
|
|
|
|
func TestAvailableRing_Offer(t *testing.T) {
|
|
const queueSize = 8
|
|
|
|
chainHeads := []uint16{42, 33, 69}
|
|
|
|
tests := []struct {
|
|
name string
|
|
startRingIndex uint16
|
|
expectedRingIndex uint16
|
|
expectedRing []uint16
|
|
}{
|
|
{
|
|
name: "no overflow",
|
|
startRingIndex: 0,
|
|
expectedRingIndex: 3,
|
|
expectedRing: []uint16{42, 33, 69, 0, 0, 0, 0, 0},
|
|
},
|
|
{
|
|
name: "ring overflow",
|
|
startRingIndex: 6,
|
|
expectedRingIndex: 9,
|
|
expectedRing: []uint16{69, 0, 0, 0, 0, 0, 42, 33},
|
|
},
|
|
{
|
|
name: "index overflow",
|
|
startRingIndex: 65535,
|
|
expectedRingIndex: 2,
|
|
expectedRing: []uint16{33, 69, 0, 0, 0, 0, 0, 42},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
memory := make([]byte, availableRingSize(queueSize))
|
|
r := newAvailableRing(queueSize, memory)
|
|
*r.ringIndex = tt.startRingIndex
|
|
|
|
r.offer(chainHeads)
|
|
|
|
assert.Equal(t, tt.expectedRingIndex, *r.ringIndex)
|
|
assert.Equal(t, tt.expectedRing, r.ring)
|
|
})
|
|
}
|
|
}
|