webrtc_m130/modules/congestion_controller/bbr/data_transfer_tracker_unittest.cc
Danil Chapovalov 5528402ef8 Use newer version of TimeDelta and TimeStamp factories in modules/
This change generated with following commands:
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/TimeDelta::Micros<\(.*\)>()/TimeDelta::Micros(\1)/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/TimeDelta::Millis<\(.*\)>()/TimeDelta::Millis(\1)/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/TimeDelta::Seconds<\(.*\)>()/TimeDelta::Seconds(\1)/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/TimeDelta::us/TimeDelta::Micros/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/TimeDelta::ms/TimeDelta::Millis/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/TimeDelta::seconds/TimeDelta::Seconds/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/Timestamp::Micros<\(.*\)>()/Timestamp::Micros(\1)/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/Timestamp::Millis<\(.*\)>()/Timestamp::Millis(\1)/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/Timestamp::Seconds<\(.*\)>()/Timestamp::Seconds(\1)/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/Timestamp::us/Timestamp::Micros/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/Timestamp::ms/Timestamp::Millis/g"
find modules -type f \( -name "*.h" -o -name "*.cc" \) | xargs sed -i -e "s/Timestamp::seconds/Timestamp::Seconds/g"
git cl format

Bug: None
Change-Id: I117d64a54950be040d996035c54bc0043310943a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168340
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30489}
2020-02-10 11:49:57 +00:00

135 lines
4.4 KiB
C++

/*
* Copyright (c) 2018 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 "modules/congestion_controller/bbr/data_transfer_tracker.h"
#include <stdint.h>
#include "test/gtest.h"
namespace webrtc {
namespace bbr {
namespace test {
namespace {
struct ResultForTest {
int64_t ack_span_ms;
int64_t send_span_ms;
int64_t acked_bytes;
};
class DataTransferTrackerForTest : public DataTransferTracker {
public:
void AddSample(int bytes, int send_time_ms, int ack_time_ms) {
DataTransferTracker::AddSample(DataSize::bytes(bytes),
Timestamp::Millis(send_time_ms),
Timestamp::Millis(ack_time_ms));
}
void ClearOldSamples(int excluding_end_ms) {
DataTransferTracker::ClearOldSamples(Timestamp::Millis(excluding_end_ms));
}
ResultForTest GetRatesByAckTime(int covered_start_ms, int including_end_ms) {
auto result = DataTransferTracker::GetRatesByAckTime(
Timestamp::Millis(covered_start_ms),
Timestamp::Millis(including_end_ms));
return ResultForTest{result.ack_timespan.ms(), result.send_timespan.ms(),
result.acked_data.bytes()};
}
};
} // namespace
TEST(DataTransferTrackerTest, TracksData) {
DataTransferTrackerForTest calc;
// Since we dont have any previous reference for the first packet, it won't be
// counted.
calc.AddSample(5555, 100000, 100100);
calc.AddSample(1000, 100020, 100120);
calc.AddSample(1000, 100040, 100140);
calc.AddSample(1000, 100060, 100160);
auto result = calc.GetRatesByAckTime(100000, 100200);
EXPECT_EQ(result.acked_bytes, 3000);
EXPECT_EQ(result.ack_span_ms, 60);
EXPECT_EQ(result.send_span_ms, 60);
}
TEST(DataTransferTrackerTest, CoversStartTime) {
DataTransferTrackerForTest calc;
calc.AddSample(5555, 100000, 100100);
calc.AddSample(1000, 100020, 100120);
calc.AddSample(1000, 100040, 100140);
calc.AddSample(1000, 100060, 100160);
calc.AddSample(1000, 100080, 100180);
auto result = calc.GetRatesByAckTime(100140, 100200);
EXPECT_EQ(result.acked_bytes, 3000);
EXPECT_EQ(result.ack_span_ms, 60);
EXPECT_EQ(result.send_span_ms, 60);
}
TEST(DataTransferTrackerTest, IncludesEndExcludesPastEnd) {
DataTransferTrackerForTest calc;
calc.AddSample(5555, 100000, 100100);
calc.AddSample(1000, 100020, 100120);
calc.AddSample(1000, 100040, 100140);
calc.AddSample(1000, 100060, 100160);
calc.AddSample(1000, 100080, 100180);
auto result = calc.GetRatesByAckTime(100120, 100160);
EXPECT_EQ(result.acked_bytes, 3000);
EXPECT_EQ(result.ack_span_ms, 60);
EXPECT_EQ(result.send_span_ms, 60);
}
TEST(DataTransferTrackerTest, AccumulatesDuplicates) {
DataTransferTrackerForTest calc;
calc.AddSample(5555, 100000, 100100);
// Two packets at same time, should be accumulated.
calc.AddSample(1000, 100020, 100120);
calc.AddSample(1000, 100020, 100120);
calc.AddSample(1000, 100060, 100160);
// Two packets at same time, should be accumulated.
calc.AddSample(1000, 100100, 100200);
calc.AddSample(1000, 100100, 100200);
calc.AddSample(1000, 100120, 100220);
auto result = calc.GetRatesByAckTime(100120, 100200);
EXPECT_EQ(result.acked_bytes, 5000);
EXPECT_EQ(result.ack_span_ms, 100);
EXPECT_EQ(result.send_span_ms, 100);
}
TEST(DataTransferTrackerTest, RemovesOldData) {
DataTransferTrackerForTest calc;
calc.AddSample(5555, 100000, 100100);
calc.AddSample(1000, 100020, 100120);
calc.AddSample(1000, 100040, 100140);
calc.AddSample(1000, 100060, 100160);
calc.AddSample(1000, 100080, 100180);
{
auto result = calc.GetRatesByAckTime(100120, 100200);
EXPECT_EQ(result.acked_bytes, 4000);
EXPECT_EQ(result.ack_span_ms, 80);
EXPECT_EQ(result.send_span_ms, 80);
}
// Note that this operation means that the packet acked at 100140 will not be
// counted any more, just used as time reference.
calc.ClearOldSamples(100140);
{
auto result = calc.GetRatesByAckTime(100120, 100200);
EXPECT_EQ(result.acked_bytes, 2000);
EXPECT_EQ(result.ack_span_ms, 40);
EXPECT_EQ(result.send_span_ms, 40);
}
}
} // namespace test
} // namespace bbr
} // namespace webrtc