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 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11) 12 13var _ = Describe("STREAM_DATA_BLOCKED frame", func() { 14 Context("parsing", func() { 15 It("accepts sample frame", func() { 16 data := []byte{0x15} 17 data = append(data, encodeVarInt(0xdeadbeef)...) // stream ID 18 data = append(data, encodeVarInt(0xdecafbad)...) // offset 19 b := bytes.NewReader(data) 20 frame, err := parseStreamDataBlockedFrame(b, versionIETFFrames) 21 Expect(err).ToNot(HaveOccurred()) 22 Expect(frame.StreamID).To(Equal(protocol.StreamID(0xdeadbeef))) 23 Expect(frame.DataLimit).To(Equal(protocol.ByteCount(0xdecafbad))) 24 Expect(b.Len()).To(BeZero()) 25 }) 26 27 It("errors on EOFs", func() { 28 data := []byte{0x15} 29 data = append(data, encodeVarInt(0xdeadbeef)...) 30 data = append(data, encodeVarInt(0xc0010ff)...) 31 _, err := parseStreamDataBlockedFrame(bytes.NewReader(data), versionIETFFrames) 32 Expect(err).NotTo(HaveOccurred()) 33 for i := range data { 34 _, err := parseStreamDataBlockedFrame(bytes.NewReader(data[0:i]), versionIETFFrames) 35 Expect(err).To(HaveOccurred()) 36 } 37 }) 38 }) 39 40 Context("writing", func() { 41 It("has proper min length", func() { 42 f := &StreamDataBlockedFrame{ 43 StreamID: 0x1337, 44 DataLimit: 0xdeadbeef, 45 } 46 Expect(f.Length(0)).To(Equal(1 + utils.VarIntLen(0x1337) + utils.VarIntLen(0xdeadbeef))) 47 }) 48 49 It("writes a sample frame", func() { 50 b := &bytes.Buffer{} 51 f := &StreamDataBlockedFrame{ 52 StreamID: 0xdecafbad, 53 DataLimit: 0x1337, 54 } 55 err := f.Write(b, versionIETFFrames) 56 Expect(err).ToNot(HaveOccurred()) 57 expected := []byte{0x15} 58 expected = append(expected, encodeVarInt(uint64(f.StreamID))...) 59 expected = append(expected, encodeVarInt(uint64(f.DataLimit))...) 60 Expect(b.Bytes()).To(Equal(expected)) 61 }) 62 }) 63}) 64