From 56e1491f8bab304dcd91b3eba31c35427f3a51fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Cervi=C3=B1o?= Date: Wed, 1 Mar 2017 09:18:49 +0100 Subject: [PATCH] Fix several loops in SequenceNumberTranslator (#784) --- .../erizo/rtp/SequenceNumberTranslator.cpp | 2 +- .../test/rtp/SequenceNumberTranslatorTest.cpp | 30 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/erizo/src/erizo/rtp/SequenceNumberTranslator.cpp b/erizo/src/erizo/rtp/SequenceNumberTranslator.cpp index f2d091c95c..82eea4fbed 100644 --- a/erizo/src/erizo/rtp/SequenceNumberTranslator.cpp +++ b/erizo/src/erizo/rtp/SequenceNumberTranslator.cpp @@ -84,7 +84,7 @@ SequenceNumber SequenceNumberTranslator::get(uint16_t input_sequence_number, boo add(SequenceNumber{input_sequence_number, output_sequence_number, type}); last_input_sequence_number_ = input_sequence_number; - if (last_input_sequence_number_ - kMaxDistance > first_input_sequence_number_) { + if (RtpUtils::sequenceNumberLessThan(first_input_sequence_number_, last_input_sequence_number_ - kMaxDistance)) { first_input_sequence_number_ = last_input_sequence_number_ - kMaxDistance; } SequenceNumber info = get(input_sequence_number); diff --git a/erizo/src/test/rtp/SequenceNumberTranslatorTest.cpp b/erizo/src/test/rtp/SequenceNumberTranslatorTest.cpp index b7fb977e8b..7f679c53bf 100644 --- a/erizo/src/test/rtp/SequenceNumberTranslatorTest.cpp +++ b/erizo/src/test/rtp/SequenceNumberTranslatorTest.cpp @@ -57,24 +57,21 @@ TEST_P(SequenceNumberTranslatorTest, shouldReturnRightOutputSequenceNumbers) { SequenceNumber output = translator.get(packet.sequence_number, skip); EXPECT_THAT(output.output, Eq(packet.expected_output)); EXPECT_THAT(output.type, Eq(packet.expected_type)); - } -} -TEST_P(SequenceNumberTranslatorTest, shouldReturnRightInputSequenceNumbers) { - for (Packet packet : queue) { - bool skip = packet.state == PacketState::Skip; - translator.get(packet.sequence_number, skip); + translator.reverse(packet.expected_output); + ASSERT_THAT(output.input, Eq(packet.sequence_number)); + ASSERT_THAT(output.type, Eq(packet.expected_type)); } +} - // Reverse look-up - for (Packet packet : queue) { - if (packet.expected_type != SequenceNumberType::Valid) { - continue; - } - SequenceNumber output = translator.reverse(packet.expected_output); - EXPECT_THAT(output.input, Eq(packet.sequence_number)); - EXPECT_THAT(output.type, Eq(packet.expected_type)); +std::vector getLongQueue(int size) { + std::vector queue; + for (int i = 0; i <= size; i++) { + int input_sequence_number = i % 65535; + queue.push_back(Packet{input_sequence_number, PacketState::Forward, + input_sequence_number, SequenceNumberType::Valid}); } + return queue; } INSTANTIATE_TEST_CASE_P( @@ -139,4 +136,7 @@ INSTANTIATE_TEST_CASE_P( std::vector({{ 65535, PacketState::Forward, 65535, SequenceNumberType::Valid}, { 1, PacketState::Forward, 1, SequenceNumberType::Valid}, { 0, PacketState::Skip, 0, SequenceNumberType::Discard}, - { 2, PacketState::Forward, 2, SequenceNumberType::Valid}}))); + { 2, PacketState::Forward, 2, SequenceNumberType::Valid}}), + + // Support multiple loops + getLongQueue(65535 * 2)));