Files
quic-go/ackhandler/ack_handler_test.go
2016-04-21 18:42:52 +07:00

85 lines
2.9 KiB
Go

package ackhandler
import (
"github.com/lucas-clemente/quic-go/protocol"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("AckHandler", func() {
It("Returns no NACK ranges for continously received packets", func() {
ackHandler, _ := NewAckHandler()
for i := 0; i < 100; i++ {
ackHandler.HandlePacket(protocol.PacketNumber(i))
}
Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(99)))
Expect(len(ackHandler.GetNackRanges())).To(Equal(0))
})
It("handles a single lost package", func() {
ackHandler, _ := NewAckHandler()
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
ackHandler.HandlePacket(protocol.PacketNumber(i))
}
Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9)))
nackRanges := ackHandler.GetNackRanges()
Expect(len(nackRanges)).To(Equal(1))
Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(5)))
Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(5)))
})
It("handles two consecutive lost packages", func() {
ackHandler, _ := NewAckHandler()
for i := 0; i < 10; i++ {
if i == 5 || i == 6 {
continue
}
ackHandler.HandlePacket(protocol.PacketNumber(i))
}
Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9)))
nackRanges := ackHandler.GetNackRanges()
Expect(len(nackRanges)).To(Equal(1))
Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(5)))
Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(6)))
})
It("handles two non-consecutively lost packages", func() {
ackHandler, _ := NewAckHandler()
for i := 0; i < 10; i++ {
if i == 3 || i == 7 {
continue
}
ackHandler.HandlePacket(protocol.PacketNumber(i))
}
Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9)))
nackRanges := ackHandler.GetNackRanges()
Expect(len(nackRanges)).To(Equal(2))
Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(3)))
Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(3)))
Expect(nackRanges[1].FirstPacketNumber).To(Equal(protocol.PacketNumber(7)))
Expect(nackRanges[1].LastPacketNumber).To(Equal(protocol.PacketNumber(7)))
})
It("handles two sequences of lost packages", func() {
ackHandler, _ := NewAckHandler()
for i := 0; i < 10; i++ {
if i == 2 || i == 3 || i == 4 || i == 7 || i == 8 {
continue
}
ackHandler.HandlePacket(protocol.PacketNumber(i))
}
Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9)))
nackRanges := ackHandler.GetNackRanges()
Expect(len(nackRanges)).To(Equal(2))
Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(2)))
Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(4)))
Expect(nackRanges[1].FirstPacketNumber).To(Equal(protocol.PacketNumber(7)))
Expect(nackRanges[1].LastPacketNumber).To(Equal(protocol.PacketNumber(8)))
})
})