forked from quic-go/quic-go
drop support for QUIC 37 and 38
This commit is contained in:
@@ -12,58 +12,6 @@ import (
|
||||
|
||||
var _ = Describe("StreamFrame", func() {
|
||||
Context("when parsing", func() {
|
||||
Context("in little endian", func() {
|
||||
It("accepts a sample frame", func() {
|
||||
// a STREAM frame, plus 3 additional bytes, not belonging to this frame
|
||||
b := bytes.NewReader([]byte{0x80 ^ 0x20,
|
||||
0x1, // stream id
|
||||
0x6, 0x0, // data length
|
||||
'f', 'o', 'o', 'b', 'a', 'r',
|
||||
'f', 'o', 'o', // additional bytes
|
||||
})
|
||||
frame, err := ParseStreamFrame(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(frame.FinBit).To(BeFalse())
|
||||
Expect(frame.StreamID).To(Equal(protocol.StreamID(1)))
|
||||
Expect(frame.Offset).To(BeZero())
|
||||
Expect(frame.DataLenPresent).To(BeTrue())
|
||||
Expect(frame.Data).To(Equal([]byte("foobar")))
|
||||
Expect(b.Len()).To(Equal(3))
|
||||
})
|
||||
|
||||
It("accepts frames with offsets", func() {
|
||||
b := bytes.NewReader([]byte{0x80 ^ 0x20 /* 2 byte offset */ ^ 0x4,
|
||||
0x1, // stream id
|
||||
0x42, 0x0, // offset
|
||||
0x6, 0x0, // data length
|
||||
'f', 'o', 'o', 'b', 'a', 'r',
|
||||
})
|
||||
frame, err := ParseStreamFrame(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(frame.FinBit).To(BeFalse())
|
||||
Expect(frame.StreamID).To(Equal(protocol.StreamID(1)))
|
||||
Expect(frame.Offset).To(Equal(protocol.ByteCount(0x42)))
|
||||
Expect(frame.DataLenPresent).To(BeTrue())
|
||||
Expect(frame.Data).To(Equal([]byte("foobar")))
|
||||
Expect(b.Len()).To(BeZero())
|
||||
})
|
||||
|
||||
It("errors on EOFs", func() {
|
||||
data := []byte{0x80 ^ 0x20 ^ 0x4,
|
||||
0x1, // stream id
|
||||
0x2a, 0x0, // offset
|
||||
0x6, 0x0, // data length,
|
||||
'f', 'o', 'o', 'b', 'a', 'r',
|
||||
}
|
||||
_, err := ParseStreamFrame(bytes.NewReader(data), versionLittleEndian)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
for i := range data {
|
||||
_, err := ParseStreamFrame(bytes.NewReader(data[0:i]), versionLittleEndian)
|
||||
Expect(err).To(HaveOccurred())
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Context("in big endian", func() {
|
||||
It("accepts a sample frame", func() {
|
||||
// a STREAM frame, plus 3 additional bytes, not belonging to this frame
|
||||
@@ -190,23 +138,6 @@ var _ = Describe("StreamFrame", func() {
|
||||
})
|
||||
|
||||
Context("when writing", func() {
|
||||
Context("in little endian", func() {
|
||||
It("writes sample frame", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
DataLenPresent: true,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()).To(Equal([]byte{0x80 ^ 0x20,
|
||||
0x1, // stream id
|
||||
0x6, 0x0, // data length
|
||||
'f', 'o', 'o', 'b', 'a', 'r',
|
||||
}))
|
||||
})
|
||||
})
|
||||
|
||||
Context("in big endian", func() {
|
||||
It("writes sample frame", func() {
|
||||
b := &bytes.Buffer{}
|
||||
@@ -214,11 +145,11 @@ var _ = Describe("StreamFrame", func() {
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
DataLenPresent: true,
|
||||
}).Write(b, versionLittleEndian)
|
||||
}).Write(b, versionBigEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()).To(Equal([]byte{0x80 ^ 0x20,
|
||||
0x1, // stream id
|
||||
0x6, 0x0, // data length
|
||||
0x0, 0x6, // data length
|
||||
'f', 'o', 'o', 'b', 'a', 'r',
|
||||
}))
|
||||
})
|
||||
@@ -270,24 +201,6 @@ var _ = Describe("StreamFrame", func() {
|
||||
})
|
||||
|
||||
Context("data length field", func() {
|
||||
Context("in little endian", func() {
|
||||
It("writes the data length", func() {
|
||||
dataLen := 0x1337
|
||||
b := &bytes.Buffer{}
|
||||
f := &StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: bytes.Repeat([]byte{'f'}, dataLen),
|
||||
DataLenPresent: true,
|
||||
Offset: 0,
|
||||
}
|
||||
err := f.Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
minLength, _ := f.MinLength(0)
|
||||
Expect(b.Bytes()[0] & 0x20).To(Equal(uint8(0x20)))
|
||||
Expect(b.Bytes()[minLength-2 : minLength]).To(Equal([]byte{0x37, 0x13}))
|
||||
})
|
||||
})
|
||||
|
||||
Context("in big endian", func() {
|
||||
It("writes the data length", func() {
|
||||
dataLen := 0x1337
|
||||
@@ -339,102 +252,6 @@ var _ = Describe("StreamFrame", func() {
|
||||
})
|
||||
|
||||
Context("offset lengths", func() {
|
||||
Context("in little endian", func() {
|
||||
It("does not write an offset if the offset is 0", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x0)))
|
||||
})
|
||||
|
||||
It("writes a 2-byte offset if the offset is larger than 0", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0x1337,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x1 << 2)))
|
||||
Expect(b.Bytes()[2:4]).To(Equal([]byte{0x37, 0x13}))
|
||||
})
|
||||
|
||||
It("writes a 3-byte offset if the offset", func() {
|
||||
b := &bytes.Buffer{}
|
||||
(&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0x13cafe,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x2 << 2)))
|
||||
Expect(b.Bytes()[2:5]).To(Equal([]byte{0xfe, 0xca, 0x13}))
|
||||
})
|
||||
|
||||
It("writes a 4-byte offset if the offset", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0xdeadbeef,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x3 << 2)))
|
||||
Expect(b.Bytes()[2:6]).To(Equal([]byte{0xef, 0xbe, 0xad, 0xde}))
|
||||
})
|
||||
|
||||
It("writes a 5-byte offset if the offset", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0x13deadbeef,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x4 << 2)))
|
||||
Expect(b.Bytes()[2:7]).To(Equal([]byte{0xef, 0xbe, 0xad, 0xde, 0x13}))
|
||||
})
|
||||
|
||||
It("writes a 6-byte offset if the offset", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0xdeadbeefcafe,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x5 << 2)))
|
||||
Expect(b.Bytes()[2:8]).To(Equal([]byte{0xfe, 0xca, 0xef, 0xbe, 0xad, 0xde}))
|
||||
})
|
||||
|
||||
It("writes a 7-byte offset if the offset", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0x13deadbeefcafe,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x6 << 2)))
|
||||
Expect(b.Bytes()[2:9]).To(Equal([]byte{0xfe, 0xca, 0xef, 0xbe, 0xad, 0xde, 0x13}))
|
||||
})
|
||||
|
||||
It("writes a 8-byte offset if the offset", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 1,
|
||||
Data: []byte("foobar"),
|
||||
Offset: 0x1337deadbeefcafe,
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x1c).To(Equal(uint8(0x7 << 2)))
|
||||
Expect(b.Bytes()[2:10]).To(Equal([]byte{0xfe, 0xca, 0xef, 0xbe, 0xad, 0xde, 0x37, 0x13}))
|
||||
})
|
||||
})
|
||||
|
||||
Context("in big endian", func() {
|
||||
It("does not write an offset if the offset is 0", func() {
|
||||
b := &bytes.Buffer{}
|
||||
@@ -533,65 +350,6 @@ var _ = Describe("StreamFrame", func() {
|
||||
})
|
||||
|
||||
Context("lengths of StreamIDs", func() {
|
||||
Context("in little endian", func() {
|
||||
It("writes a 1 byte StreamID", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 13,
|
||||
Data: []byte("foobar"),
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x3).To(Equal(uint8(0x0)))
|
||||
Expect(b.Bytes()[1]).To(Equal(uint8(13)))
|
||||
})
|
||||
|
||||
It("writes a 2 byte StreamID", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 0xcafe,
|
||||
Data: []byte("foobar"),
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x3).To(Equal(uint8(0x1)))
|
||||
Expect(b.Bytes()[1:3]).To(Equal([]byte{0xfe, 0xca}))
|
||||
})
|
||||
|
||||
It("writes a 3 byte StreamID", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 0x13beef,
|
||||
Data: []byte("foobar"),
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x3).To(Equal(uint8(0x2)))
|
||||
Expect(b.Bytes()[1:4]).To(Equal([]byte{0xef, 0xbe, 0x13}))
|
||||
})
|
||||
|
||||
It("writes a 4 byte StreamID", func() {
|
||||
b := &bytes.Buffer{}
|
||||
err := (&StreamFrame{
|
||||
StreamID: 0xdecafbad,
|
||||
Data: []byte("foobar"),
|
||||
}).Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x3).To(Equal(uint8(0x3)))
|
||||
Expect(b.Bytes()[1:5]).To(Equal([]byte{0xad, 0xfb, 0xca, 0xde}))
|
||||
})
|
||||
|
||||
It("writes a multiple byte StreamID, after the Stream length was already determined by MinLenght()", func() {
|
||||
b := &bytes.Buffer{}
|
||||
frame := &StreamFrame{
|
||||
StreamID: 0xdecafbad,
|
||||
Data: []byte("foobar"),
|
||||
}
|
||||
frame.MinLength(0)
|
||||
err := frame.Write(b, versionLittleEndian)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()[0] & 0x3).To(Equal(uint8(0x3)))
|
||||
Expect(b.Bytes()[1:5]).To(Equal([]byte{0xad, 0xfb, 0xca, 0xde}))
|
||||
})
|
||||
})
|
||||
|
||||
Context("in big endian", func() {
|
||||
It("writes a 1 byte StreamID", func() {
|
||||
b := &bytes.Buffer{}
|
||||
|
||||
Reference in New Issue
Block a user