1package quic 2 3import ( 4 "github.com/lucas-clemente/quic-go/internal/protocol" 5 6 . "github.com/onsi/ginkgo" 7 . "github.com/onsi/gomega" 8) 9 10var _ = Describe("Buffer Pool", func() { 11 It("returns buffers of cap", func() { 12 buf := getPacketBuffer() 13 Expect(buf.Data).To(HaveCap(int(protocol.MaxReceivePacketSize))) 14 }) 15 16 It("releases buffers", func() { 17 buf := getPacketBuffer() 18 buf.Release() 19 }) 20 21 It("gets the length", func() { 22 buf := getPacketBuffer() 23 buf.Data = append(buf.Data, []byte("foobar")...) 24 Expect(buf.Len()).To(BeEquivalentTo(6)) 25 }) 26 27 It("panics if wrong-sized buffers are passed", func() { 28 buf := getPacketBuffer() 29 buf.Data = make([]byte, 10) 30 Expect(func() { buf.Release() }).To(Panic()) 31 }) 32 33 It("panics if it is released twice", func() { 34 buf := getPacketBuffer() 35 buf.Release() 36 Expect(func() { buf.Release() }).To(Panic()) 37 }) 38 39 It("panics if it is decremented too many times", func() { 40 buf := getPacketBuffer() 41 buf.Decrement() 42 Expect(func() { buf.Decrement() }).To(Panic()) 43 }) 44 45 It("waits until all parts have been released", func() { 46 buf := getPacketBuffer() 47 buf.Split() 48 buf.Split() 49 // now we have 3 parts 50 buf.Decrement() 51 buf.Decrement() 52 buf.Decrement() 53 Expect(func() { buf.Decrement() }).To(Panic()) 54 }) 55}) 56