parse and write STOP_WAITING frames for packet number 0

This commit is contained in:
Marten Seemann
2017-12-04 12:43:39 +07:00
parent 6ce3336be5
commit a79e9ee35e
2 changed files with 35 additions and 19 deletions

View File

@@ -27,13 +27,20 @@ var _ = Describe("StopWaitingFrame", func() {
Expect(b.Len()).To(BeZero())
})
It("rejects frames that would have 0 as LeastUnacked", func() {
It("parses a frame with 0 as LeastUnacked", func() {
b := bytes.NewReader([]byte{0x6, 0x8})
_, err := ParseStopWaitingFrame(b, 8, 1, protocol.VersionWhatever)
Expect(err).To(HaveOccurred())
frame, err := ParseStopWaitingFrame(b, 8, 1, protocol.VersionWhatever)
Expect(err).ToNot(HaveOccurred())
Expect(frame.LeastUnacked).To(Equal(protocol.PacketNumber(0)))
Expect(b.Len()).To(BeZero())
})
It("rejects frames that underflow LeastUnacked", func() {
b := bytes.NewReader([]byte{0x6, 0x9})
_, err := ParseStopWaitingFrame(b, 8, 1, protocol.VersionWhatever)
Expect(err).To(MatchError("invalid LeastUnackedDelta"))
})
It("errors on EOFs", func() {
data := []byte{0x06, 0x03}
_, err := ParseStopWaitingFrame(bytes.NewReader(data), 5, 1, protocol.VersionWhatever)
@@ -46,19 +53,29 @@ var _ = Describe("StopWaitingFrame", func() {
})
Context("when writing", func() {
Context("in big endian", func() {
It("writes a sample frame", func() {
b := &bytes.Buffer{}
frame := &StopWaitingFrame{
LeastUnacked: 10,
PacketNumber: 13,
PacketNumberLen: protocol.PacketNumberLen6,
}
err := frame.Write(b, versionBigEndian)
Expect(err).ToNot(HaveOccurred())
Expect(b.Bytes()[0]).To(Equal(uint8(0x06)))
Expect(b.Bytes()[1:7]).To(Equal([]byte{0, 0, 0, 0, 0, 3}))
})
It("writes a sample frame", func() {
b := &bytes.Buffer{}
frame := &StopWaitingFrame{
LeastUnacked: 10,
PacketNumber: 13,
PacketNumberLen: protocol.PacketNumberLen6,
}
err := frame.Write(b, versionBigEndian)
Expect(err).ToNot(HaveOccurred())
Expect(b.Bytes()[0]).To(Equal(uint8(0x06)))
Expect(b.Bytes()[1:7]).To(Equal([]byte{0, 0, 0, 0, 0, 3}))
})
It("writes a frame for LeastUnacked = 0", func() {
b := &bytes.Buffer{}
frame := &StopWaitingFrame{
LeastUnacked: 0,
PacketNumber: 8,
PacketNumberLen: protocol.PacketNumberLen1,
}
err := frame.Write(b, versionBigEndian)
Expect(err).ToNot(HaveOccurred())
Expect(b.Bytes()).To(Equal([]byte{0x6, 0x8}))
})
It("errors when PacketNumber was not set", func() {