From 634d2dc6b7254233ae9e263477b9f3869af02d5e Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 8 Jan 2017 19:36:59 +0700 Subject: [PATCH] add a function to get the highest ACK range in receivedPacketHistory --- ackhandler/received_packet_history.go | 10 ++++++++++ ackhandler/received_packet_history_test.go | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/ackhandler/received_packet_history.go b/ackhandler/received_packet_history.go index 2c3b2cbd..d45fe6fd 100644 --- a/ackhandler/received_packet_history.go +++ b/ackhandler/received_packet_history.go @@ -133,3 +133,13 @@ func (h *receivedPacketHistory) GetAckRanges() []frames.AckRange { return ackRanges } + +func (h *receivedPacketHistory) GetHighestAckRange() frames.AckRange { + ackRange := frames.AckRange{} + if h.ranges.Len() > 0 { + r := h.ranges.Back().Value + ackRange.FirstPacketNumber = r.Start + ackRange.LastPacketNumber = r.End + } + return ackRange +} diff --git a/ackhandler/received_packet_history_test.go b/ackhandler/received_packet_history_test.go index ed421e25..0f794e1e 100644 --- a/ackhandler/received_packet_history_test.go +++ b/ackhandler/received_packet_history_test.go @@ -315,4 +315,23 @@ var _ = Describe("receivedPacketHistory", func() { Expect(ackRanges[2]).To(Equal(frames.AckRange{FirstPacketNumber: 1, LastPacketNumber: 2})) }) }) + + Context("Getting the highest ACK range", func() { + It("returns the zero value if there are no ranges", func() { + Expect(hist.GetHighestAckRange()).To(BeZero()) + }) + + It("gets a single ACK range", func() { + hist.ReceivedPacket(4) + hist.ReceivedPacket(5) + Expect(hist.GetHighestAckRange()).To(Equal(frames.AckRange{FirstPacketNumber: 4, LastPacketNumber: 5})) + }) + + It("gets the highest of multiple ACK ranges", func() { + hist.ReceivedPacket(3) + hist.ReceivedPacket(6) + hist.ReceivedPacket(7) + Expect(hist.GetHighestAckRange()).To(Equal(frames.AckRange{FirstPacketNumber: 6, LastPacketNumber: 7})) + }) + }) })