From 3e5f43f45ae27a47c73b9cd06be789ba1eb20889 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 22 Apr 2016 17:50:04 +0700 Subject: [PATCH] calculate the Entropy byte for the highest in order received packet --- ackhandler/incoming_packet_ack_handler.go | 8 +++-- .../incoming_packet_ack_handler_test.go | 34 ++++++++++++++++++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/ackhandler/incoming_packet_ack_handler.go b/ackhandler/incoming_packet_ack_handler.go index 5203ed906..702d7d127 100644 --- a/ackhandler/incoming_packet_ack_handler.go +++ b/ackhandler/incoming_packet_ack_handler.go @@ -11,9 +11,10 @@ var ErrDuplicatePacket = errors.New("Duplicate Packet") // The AckHandler handles ACKs type incomingPacketAckHandler struct { - highestInOrderObserved protocol.PacketNumber - largestObserved protocol.PacketNumber - packetHistory map[protocol.PacketNumber]bool + highestInOrderObserved protocol.PacketNumber + highestInOrderObservedEntropy EntropyAccumulator + largestObserved protocol.PacketNumber + packetHistory map[protocol.PacketNumber]bool } // NewIncomingPacketAckHandler creates a new outgoingPacketAckHandler @@ -37,6 +38,7 @@ func (h *incomingPacketAckHandler) ReceivedPacket(packetNumber protocol.PacketNu if packetNumber == h.highestInOrderObserved+1 { h.highestInOrderObserved = packetNumber + h.highestInOrderObservedEntropy.Add(packetNumber, entropyBit) } h.packetHistory[packetNumber] = true diff --git a/ackhandler/incoming_packet_ack_handler_test.go b/ackhandler/incoming_packet_ack_handler_test.go index 62393f7ed..a1b7057eb 100644 --- a/ackhandler/incoming_packet_ack_handler_test.go +++ b/ackhandler/incoming_packet_ack_handler_test.go @@ -48,7 +48,39 @@ var _ = Describe("incomingPacketAckHandler", func() { }) Context("Entropy calculation", func() { - // It("calculates the entropy f") + It("calculates the entropy for continously received packets", func() { + entropy := EntropyAccumulator(0) + for i := 1; i < 100; i++ { + entropyBit := false + if i%3 == 0 || i%5 == 0 { + entropyBit = true + } + entropy.Add(protocol.PacketNumber(i), entropyBit) + err := handler.ReceivedPacket(protocol.PacketNumber(i), entropyBit) + Expect(err).ToNot(HaveOccurred()) + } + Expect(handler.highestInOrderObservedEntropy).To(Equal(entropy)) + }) + + It("calculates the entropy if there is a NACK range", func() { + entropy := EntropyAccumulator(0) + for i := 1; i < 100; i++ { + entropyBit := false + if i%3 == 0 || i%5 == 0 { + entropyBit = true + } + + if i == 10 || i == 11 || i == 12 { + continue + } + if i < 10 { + entropy.Add(protocol.PacketNumber(i), entropyBit) + } + err := handler.ReceivedPacket(protocol.PacketNumber(i), entropyBit) + Expect(err).ToNot(HaveOccurred()) + } + Expect(handler.highestInOrderObservedEntropy).To(Equal(entropy)) + }) }) Context("NACK range calculation", func() {