mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-17 15:47:53 +01:00

In https://webrtc-review.googlesource.com/c/src/+/1560 we moved WebRTC from src/webrtc to src/ (in order to preserve an healthy git history). This CL takes care of fixing header guards, #include paths, etc... NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true TBR=tommi@webrtc.org Bug: chromium:611808 Change-Id: Iea91618212bee0af16aa3f05071eab8f93706578 Reviewed-on: https://webrtc-review.googlesource.com/1561 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Henrik Kjellander <kjellander@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/master@{#19846}
172 lines
5.3 KiB
C++
172 lines
5.3 KiB
C++
/*
|
|
* Copyright 2017 The WebRTC Project Authors. All rights reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include <utility>
|
|
|
|
#include "p2p/base/packetlossestimator.h"
|
|
#include "rtc_base/gunit.h"
|
|
|
|
using cricket::PacketLossEstimator;
|
|
|
|
class PacketLossEstimatorTest : public testing::Test {};
|
|
|
|
TEST_F(PacketLossEstimatorTest, InitialResponseRate) {
|
|
PacketLossEstimator ple(5, 100);
|
|
EXPECT_EQ(1.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, InitialUpdateResponseRate) {
|
|
PacketLossEstimator ple(5, 100);
|
|
ple.UpdateResponseRate(10);
|
|
EXPECT_EQ(1.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, ResponseReceived) {
|
|
PacketLossEstimator ple(5, 100);
|
|
|
|
ple.ExpectResponse("a", 0);
|
|
ple.ReceivedResponse("a", 1);
|
|
ple.UpdateResponseRate(2);
|
|
|
|
EXPECT_EQ(1.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, ResponseNotConsideredLostYet) {
|
|
PacketLossEstimator ple(5, 100);
|
|
|
|
ple.ExpectResponse("a", 0);
|
|
ple.UpdateResponseRate(2);
|
|
|
|
EXPECT_EQ(1.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, ResponseConsideredLost) {
|
|
PacketLossEstimator ple(5, 100);
|
|
|
|
ple.ExpectResponse("a", 0);
|
|
ple.UpdateResponseRate(10);
|
|
|
|
EXPECT_EQ(0.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, ResponseLate) {
|
|
PacketLossEstimator ple(5, 100);
|
|
|
|
ple.ExpectResponse("a", 0);
|
|
ple.ReceivedResponse("a", 6);
|
|
ple.UpdateResponseRate(10);
|
|
|
|
EXPECT_EQ(1.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, ResponseForgotten) {
|
|
PacketLossEstimator ple(5, 100);
|
|
ple.ExpectResponse("a", 0);
|
|
ple.UpdateResponseRate(101);
|
|
|
|
EXPECT_EQ(1.0, ple.get_response_rate());
|
|
}
|
|
|
|
TEST_F(PacketLossEstimatorTest, Lost1_Received1) {
|
|
PacketLossEstimator ple(5, 100);
|
|
|
|
ple.ExpectResponse("a", 0);
|
|
ple.ExpectResponse("b", 2);
|
|
ple.ReceivedResponse("b", 6);
|
|
ple.UpdateResponseRate(7);
|
|
|
|
EXPECT_EQ(0.5, ple.get_response_rate());
|
|
}
|
|
|
|
static const std::pair<std::string, int64_t> kFivePackets[5] = {{"a", 0},
|
|
{"b", 2},
|
|
{"c", 4},
|
|
{"d", 6},
|
|
{"e", 8}};
|
|
|
|
// Time: 0 1 2 3 4 5 6 7 8 9 10
|
|
// Sent: a b c d e |
|
|
// Recv: b |
|
|
// Wind: --------------> |
|
|
TEST_F(PacketLossEstimatorTest, Lost3_Received1_Waiting1) {
|
|
PacketLossEstimator ple(3, 100);
|
|
|
|
for (const auto& p : kFivePackets) {
|
|
ple.ExpectResponse(p.first, p.second);
|
|
}
|
|
ple.ReceivedResponse("b", 3);
|
|
ple.UpdateResponseRate(10);
|
|
EXPECT_EQ(0.25, ple.get_response_rate());
|
|
}
|
|
|
|
// Time: 0 1 2 3 4 5 6 7 8 9 10
|
|
// Sent: a b c d e |
|
|
// Recv: e |
|
|
// Wind: --------------> |
|
|
TEST_F(PacketLossEstimatorTest, Lost4_Early1) {
|
|
PacketLossEstimator ple(3, 100);
|
|
|
|
for (const auto& p : kFivePackets) {
|
|
ple.ExpectResponse(p.first, p.second);
|
|
}
|
|
ple.ReceivedResponse("e", 9);
|
|
ple.UpdateResponseRate(10);
|
|
// e should be considered, even though its response was received less than
|
|
// |consider_lost_after_ms| ago.
|
|
EXPECT_EQ(0.2, ple.get_response_rate());
|
|
}
|
|
|
|
// Time: 0 1 2 3 4 5 6 7 8 9 10
|
|
// Sent: a b c d e |
|
|
// Recv: c |
|
|
// Wind: <-------> |
|
|
TEST_F(PacketLossEstimatorTest, Forgot2_Received1_Lost1_Waiting1) {
|
|
PacketLossEstimator ple(3, 7);
|
|
|
|
for (const auto& p : kFivePackets) {
|
|
ple.ExpectResponse(p.first, p.second);
|
|
}
|
|
ple.ReceivedResponse("c", 5);
|
|
ple.UpdateResponseRate(10);
|
|
EXPECT_EQ(0.5, ple.get_response_rate());
|
|
}
|
|
|
|
// Tests that old messages are forgotten if ExpectResponse is called
|
|
// |forget_after_ms| after |last_forgot_at|. It is important that ExpectResponse
|
|
// and ReceivedResponse forget old messages to avoid |tracked_packets_| growing
|
|
// without bound if UpdateResponseRate is never called (or rarely called).
|
|
//
|
|
// Time: 0 1 2 3 4 5 6
|
|
// Sent: a b
|
|
// Wind: <------->
|
|
TEST_F(PacketLossEstimatorTest, ExpectResponseForgetsOldPackets) {
|
|
PacketLossEstimator ple(1, 5);
|
|
ple.ExpectResponse("a", 0); // This message will be forgotten.
|
|
ple.ExpectResponse("b", 6); // This call should trigger clean up.
|
|
// a should be forgotten, b should be tracked.
|
|
EXPECT_EQ(1u, ple.tracked_packet_count_for_testing());
|
|
}
|
|
|
|
// Tests that old messages are forgotten if ExpectResponse is called
|
|
// |forget_after_ms| after |last_forgot_at|. It is important that ExpectResponse
|
|
// and ReceivedResponse forget old messages to avoid |tracked_packets_| growing
|
|
// without bound if UpdateResponseRate is never called (or rarely called).
|
|
//
|
|
// Time: 0 1 2 3 4 5 6
|
|
// Sent: a
|
|
// Recv: b
|
|
// Wind: <------->
|
|
TEST_F(PacketLossEstimatorTest, ReceivedResponseForgetsOldPackets) {
|
|
PacketLossEstimator ple(1, 5);
|
|
ple.ExpectResponse("a", 0); // This message will be forgotten.
|
|
ple.ReceivedResponse("b", 6); // This call should trigger clean up.
|
|
// a should be forgoten, b should not be tracked (received but not sent).
|
|
EXPECT_EQ(0u, ple.tracked_packet_count_for_testing());
|
|
}
|