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