github.com/cilium/ebpf@v0.10.0/ringbuf/ring_test.go (about) 1 package ringbuf 2 3 import ( 4 "bytes" 5 "io" 6 "testing" 7 ) 8 9 func TestRingBufferReader(t *testing.T) { 10 buf := make([]byte, 2) 11 12 ring := makeRing(2, 0) 13 n, err := ring.Read(buf) 14 if err != io.EOF { 15 t.Error("Expected io.EOF, got", err) 16 } 17 if n != 2 { 18 t.Errorf("Expected to read 2 bytes, got %d", n) 19 } 20 if !bytes.Equal(buf, []byte{0, 1}) { 21 t.Error("Expected [0, 1], got", buf) 22 } 23 n, err = ring.Read(buf) 24 if err != io.EOF { 25 t.Error("Expected io.EOF, got", err) 26 } 27 if n != 0 { 28 t.Error("Expected to read 0 bytes, got", n) 29 } 30 31 buf = make([]byte, 4) 32 33 ring = makeRing(4, 4) 34 n, err = io.ReadFull(ring, buf) 35 if err != nil { 36 t.Error("Expected nil, got", err) 37 } 38 if n != 4 { 39 t.Errorf("Expected to read 4 bytes, got %d", n) 40 } 41 if !bytes.Equal(buf, []byte{0, 1, 2, 3}) { 42 t.Error("Expected [0, 1, 2, 3], got", buf) 43 } 44 n, err = ring.Read(buf) 45 if err != io.EOF { 46 t.Error("Expected io.EOF, got", err) 47 } 48 if n != 0 { 49 t.Error("Expected to read 0 bytes, got", n) 50 } 51 } 52 53 func makeRing(size, offset int) *ringReader { 54 if size != 0 && (size&(size-1)) != 0 { 55 panic("size must be power of two") 56 } 57 58 ring := make([]byte, 2*size) 59 for i := range ring { 60 ring[i] = byte(i) 61 } 62 63 consumer := uint64(offset) 64 producer := uint64(len(ring)/2 + offset) 65 66 return newRingReader(&consumer, &producer, ring) 67 }