1package wire 2 3import ( 4 "bytes" 5 6 "github.com/lucas-clemente/quic-go/internal/protocol" 7 "github.com/lucas-clemente/quic-go/internal/utils" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10) 11 12var _ = Describe("MAX_DATA frame", func() { 13 Context("when parsing", func() { 14 It("accepts sample frame", func() { 15 data := []byte{0x10} 16 data = append(data, encodeVarInt(0xdecafbad123456)...) // byte offset 17 b := bytes.NewReader(data) 18 frame, err := parseMaxDataFrame(b, versionIETFFrames) 19 Expect(err).ToNot(HaveOccurred()) 20 Expect(frame.ByteOffset).To(Equal(protocol.ByteCount(0xdecafbad123456))) 21 Expect(b.Len()).To(BeZero()) 22 }) 23 24 It("errors on EOFs", func() { 25 data := []byte{0x10} 26 data = append(data, encodeVarInt(0xdecafbad1234567)...) // byte offset 27 _, err := parseMaxDataFrame(bytes.NewReader(data), versionIETFFrames) 28 Expect(err).NotTo(HaveOccurred()) 29 for i := range data { 30 _, err := parseMaxDataFrame(bytes.NewReader(data[0:i]), versionIETFFrames) 31 Expect(err).To(HaveOccurred()) 32 } 33 }) 34 }) 35 36 Context("writing", func() { 37 It("has proper min length", func() { 38 f := &MaxDataFrame{ 39 ByteOffset: 0xdeadbeef, 40 } 41 Expect(f.Length(versionIETFFrames)).To(Equal(1 + utils.VarIntLen(0xdeadbeef))) 42 }) 43 44 It("writes a MAX_DATA frame", func() { 45 b := &bytes.Buffer{} 46 f := &MaxDataFrame{ 47 ByteOffset: 0xdeadbeefcafe, 48 } 49 err := f.Write(b, versionIETFFrames) 50 Expect(err).ToNot(HaveOccurred()) 51 expected := []byte{0x10} 52 expected = append(expected, encodeVarInt(0xdeadbeefcafe)...) 53 Expect(b.Bytes()).To(Equal(expected)) 54 }) 55 }) 56}) 57