package virtqueue import ( "testing" "github.com/stretchr/testify/assert" ) func TestUsedRing_MemoryLayout(t *testing.T) { const queueSize = 2 memory := make([]byte, usedRingSize(queueSize)) r := newUsedRing(queueSize, memory) *r.flags = 0x01ff *r.ringIndex = 1 r.ring[0] = UsedElement{ DescriptorIndex: 0x0123, Length: 0x4567, } r.ring[1] = UsedElement{ DescriptorIndex: 0x89ab, Length: 0xcdef, } assert.Equal(t, []byte{ 0xff, 0x01, 0x01, 0x00, 0x23, 0x01, 0x00, 0x00, 0x67, 0x45, 0x00, 0x00, 0xab, 0x89, 0x00, 0x00, 0xef, 0xcd, 0x00, 0x00, 0x00, 0x00, }, memory) } //func TestUsedRing_Take(t *testing.T) { // const queueSize = 8 // // tests := []struct { // name string // ring []UsedElement // ringIndex uint16 // lastIndex uint16 // expected []UsedElement // }{ // { // name: "nothing new", // ring: []UsedElement{ // {DescriptorIndex: 1}, // {DescriptorIndex: 2}, // {DescriptorIndex: 3}, // {DescriptorIndex: 4}, // {}, // {}, // {}, // {}, // }, // ringIndex: 4, // lastIndex: 4, // expected: nil, // }, // { // name: "no overflow", // ring: []UsedElement{ // {DescriptorIndex: 1}, // {DescriptorIndex: 2}, // {DescriptorIndex: 3}, // {DescriptorIndex: 4}, // {}, // {}, // {}, // {}, // }, // ringIndex: 4, // lastIndex: 1, // expected: []UsedElement{ // {DescriptorIndex: 2}, // {DescriptorIndex: 3}, // {DescriptorIndex: 4}, // }, // }, // { // name: "ring overflow", // ring: []UsedElement{ // {DescriptorIndex: 9}, // {DescriptorIndex: 10}, // {DescriptorIndex: 3}, // {DescriptorIndex: 4}, // {DescriptorIndex: 5}, // {DescriptorIndex: 6}, // {DescriptorIndex: 7}, // {DescriptorIndex: 8}, // }, // ringIndex: 10, // lastIndex: 7, // expected: []UsedElement{ // {DescriptorIndex: 8}, // {DescriptorIndex: 9}, // {DescriptorIndex: 10}, // }, // }, // { // name: "index overflow", // ring: []UsedElement{ // {DescriptorIndex: 9}, // {DescriptorIndex: 10}, // {DescriptorIndex: 3}, // {DescriptorIndex: 4}, // {DescriptorIndex: 5}, // {DescriptorIndex: 6}, // {DescriptorIndex: 7}, // {DescriptorIndex: 8}, // }, // ringIndex: 2, // lastIndex: 65535, // expected: []UsedElement{ // {DescriptorIndex: 8}, // {DescriptorIndex: 9}, // {DescriptorIndex: 10}, // }, // }, // } // for _, tt := range tests { // t.Run(tt.name, func(t *testing.T) { // memory := make([]byte, usedRingSize(queueSize)) // r := newUsedRing(queueSize, memory) // // copy(r.ring, tt.ring) // *r.ringIndex = tt.ringIndex // r.lastIndex = tt.lastIndex // // assert.Equal(t, tt.expected, r.take()) // }) // } //}