Use the injected clock in rtcp_transciever.
Bug: webrtc:11327 Change-Id: Idb02842f2eb679f972c0449a01a81a26ceb85827 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219789 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Paul Hallak <phallak@google.com> Cr-Commit-Position: refs/heads/master@{#34080}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
61a287a3cb
commit
fe3dd51f32
@ -16,6 +16,8 @@
|
||||
|
||||
#include "absl/memory/memory.h"
|
||||
#include "api/rtp_headers.h"
|
||||
#include "api/units/time_delta.h"
|
||||
#include "api/units/timestamp.h"
|
||||
#include "api/video/video_bitrate_allocation.h"
|
||||
#include "modules/rtp_rtcp/include/receive_statistics.h"
|
||||
#include "modules/rtp_rtcp/mocks/mock_rtcp_rtt_stats.h"
|
||||
@ -24,8 +26,9 @@
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/compound_packet.h"
|
||||
#include "modules/rtp_rtcp/source/time_util.h"
|
||||
#include "rtc_base/event.h"
|
||||
#include "rtc_base/fake_clock.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/time_utils.h"
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/mock_transport.h"
|
||||
@ -46,8 +49,10 @@ using ::webrtc::NtpTime;
|
||||
using ::webrtc::RtcpTransceiverConfig;
|
||||
using ::webrtc::RtcpTransceiverImpl;
|
||||
using ::webrtc::SaturatedUsToCompactNtp;
|
||||
using ::webrtc::SimulatedClock;
|
||||
using ::webrtc::TaskQueueForTest;
|
||||
using ::webrtc::TimeMicrosToNtp;
|
||||
using ::webrtc::TimeDelta;
|
||||
using ::webrtc::Timestamp;
|
||||
using ::webrtc::VideoBitrateAllocation;
|
||||
using ::webrtc::rtcp::Bye;
|
||||
using ::webrtc::rtcp::CompoundPacket;
|
||||
@ -142,9 +147,11 @@ RtcpTransceiverConfig DefaultTestConfig() {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, NeedToStopPeriodicTaskToDestroyOnTaskQueue) {
|
||||
SimulatedClock clock(0);
|
||||
FakeRtcpTransport transport;
|
||||
TaskQueueForTest queue("rtcp");
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.task_queue = queue.Get();
|
||||
config.schedule_periodic_compound_packets = true;
|
||||
config.outgoing_transport = &transport;
|
||||
@ -162,9 +169,11 @@ TEST(RtcpTransceiverImplTest, NeedToStopPeriodicTaskToDestroyOnTaskQueue) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CanDestroyAfterTaskQueue) {
|
||||
SimulatedClock clock(0);
|
||||
FakeRtcpTransport transport;
|
||||
auto* queue = new TaskQueueForTest("rtcp");
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.task_queue = queue->Get();
|
||||
config.schedule_periodic_compound_packets = true;
|
||||
config.outgoing_transport = &transport;
|
||||
@ -177,9 +186,11 @@ TEST(RtcpTransceiverImplTest, CanDestroyAfterTaskQueue) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, DelaysSendingFirstCompondPacket) {
|
||||
SimulatedClock clock(0);
|
||||
TaskQueueForTest queue("rtcp");
|
||||
FakeRtcpTransport transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.outgoing_transport = &transport;
|
||||
config.initial_report_delay_ms = 10;
|
||||
config.task_queue = queue.Get();
|
||||
@ -202,9 +213,11 @@ TEST(RtcpTransceiverImplTest, DelaysSendingFirstCompondPacket) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, PeriodicallySendsPackets) {
|
||||
SimulatedClock clock(0);
|
||||
TaskQueueForTest queue("rtcp");
|
||||
FakeRtcpTransport transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.outgoing_transport = &transport;
|
||||
config.initial_report_delay_ms = 0;
|
||||
config.report_period_ms = kReportPeriodMs;
|
||||
@ -236,9 +249,11 @@ TEST(RtcpTransceiverImplTest, PeriodicallySendsPackets) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendCompoundPacketDelaysPeriodicSendPackets) {
|
||||
SimulatedClock clock(0);
|
||||
TaskQueueForTest queue("rtcp");
|
||||
FakeRtcpTransport transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.outgoing_transport = &transport;
|
||||
config.initial_report_delay_ms = 0;
|
||||
config.report_period_ms = kReportPeriodMs;
|
||||
@ -282,8 +297,10 @@ TEST(RtcpTransceiverImplTest, SendCompoundPacketDelaysPeriodicSendPackets) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoRtcpWhenNetworkStateIsDown) {
|
||||
SimulatedClock clock(0);
|
||||
MockTransport mock_transport;
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.initial_ready_to_send = false;
|
||||
config.outgoing_transport = &mock_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
@ -301,8 +318,10 @@ TEST(RtcpTransceiverImplTest, SendsNoRtcpWhenNetworkStateIsDown) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsRtcpWhenNetworkStateIsUp) {
|
||||
SimulatedClock clock(0);
|
||||
MockTransport mock_transport;
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.initial_ready_to_send = false;
|
||||
config.outgoing_transport = &mock_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
@ -322,9 +341,11 @@ TEST(RtcpTransceiverImplTest, SendsRtcpWhenNetworkStateIsUp) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsPeriodicRtcpWhenNetworkStateIsUp) {
|
||||
SimulatedClock clock(0);
|
||||
TaskQueueForTest queue("rtcp");
|
||||
FakeRtcpTransport transport;
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.schedule_periodic_compound_packets = true;
|
||||
config.initial_ready_to_send = false;
|
||||
config.outgoing_transport = &transport;
|
||||
@ -348,7 +369,9 @@ TEST(RtcpTransceiverImplTest, SendsPeriodicRtcpWhenNetworkStateIsUp) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.cname = "cname";
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -371,7 +394,9 @@ TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoRembInitially) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -387,7 +412,9 @@ TEST(RtcpTransceiverImplTest, SendsNoRembInitially) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembIncludesRembInNextCompoundPacket) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -406,7 +433,9 @@ TEST(RtcpTransceiverImplTest, SetRembIncludesRembInNextCompoundPacket) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembUpdatesValuesToSend) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -431,7 +460,9 @@ TEST(RtcpTransceiverImplTest, SetRembUpdatesValuesToSend) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembSendsImmediatelyIfSendRembOnChange) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.send_remb_on_change = true;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -457,7 +488,9 @@ TEST(RtcpTransceiverImplTest, SetRembSendsImmediatelyIfSendRembOnChange) {
|
||||
TEST(RtcpTransceiverImplTest,
|
||||
SetRembSendsImmediatelyIfSendRembOnChangeReducedSize) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.send_remb_on_change = true;
|
||||
config.rtcp_mode = webrtc::RtcpMode::kReducedSize;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
@ -475,7 +508,9 @@ TEST(RtcpTransceiverImplTest,
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembIncludesRembInAllCompoundPackets) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -493,7 +528,9 @@ TEST(RtcpTransceiverImplTest, SetRembIncludesRembInAllCompoundPackets) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoRembAfterUnset) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -522,7 +559,9 @@ TEST(RtcpTransceiverImplTest, ReceiverReportUsesReceiveStatistics) {
|
||||
EXPECT_CALL(receive_statistics, RtcpReportBlocks(_))
|
||||
.WillRepeatedly(Return(report_blocks));
|
||||
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -543,9 +582,12 @@ TEST(RtcpTransceiverImplTest, ReceiverReportUsesReceiveStatistics) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, MultipleObserversOnSameSsrc) {
|
||||
const uint32_t kRemoteSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer1;
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer2;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer1);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer2);
|
||||
|
||||
@ -559,14 +601,17 @@ TEST(RtcpTransceiverImplTest, MultipleObserversOnSameSsrc) {
|
||||
|
||||
EXPECT_CALL(observer1, OnSenderReport(kRemoteSsrc, kRemoteNtp, kRemoteRtp));
|
||||
EXPECT_CALL(observer2, OnSenderReport(kRemoteSsrc, kRemoteNtp, kRemoteRtp));
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, DoesntCallsObserverAfterRemoved) {
|
||||
const uint32_t kRemoteSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer1;
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer2;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer1);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer2);
|
||||
|
||||
@ -578,15 +623,18 @@ TEST(RtcpTransceiverImplTest, DoesntCallsObserverAfterRemoved) {
|
||||
|
||||
EXPECT_CALL(observer1, OnSenderReport(_, _, _)).Times(0);
|
||||
EXPECT_CALL(observer2, OnSenderReport(_, _, _));
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CallsObserverOnSenderReportBySenderSsrc) {
|
||||
const uint32_t kRemoteSsrc1 = 12345;
|
||||
const uint32_t kRemoteSsrc2 = 22345;
|
||||
SimulatedClock clock(0);
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer1;
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer2;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc1, &observer1);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc2, &observer2);
|
||||
|
||||
@ -600,15 +648,18 @@ TEST(RtcpTransceiverImplTest, CallsObserverOnSenderReportBySenderSsrc) {
|
||||
|
||||
EXPECT_CALL(observer1, OnSenderReport(kRemoteSsrc1, kRemoteNtp, kRemoteRtp));
|
||||
EXPECT_CALL(observer2, OnSenderReport(_, _, _)).Times(0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CallsObserverOnByeBySenderSsrc) {
|
||||
const uint32_t kRemoteSsrc1 = 12345;
|
||||
const uint32_t kRemoteSsrc2 = 22345;
|
||||
SimulatedClock clock(0);
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer1;
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer2;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc1, &observer1);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc2, &observer2);
|
||||
|
||||
@ -618,15 +669,18 @@ TEST(RtcpTransceiverImplTest, CallsObserverOnByeBySenderSsrc) {
|
||||
|
||||
EXPECT_CALL(observer1, OnBye(kRemoteSsrc1));
|
||||
EXPECT_CALL(observer2, OnBye(_)).Times(0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CallsObserverOnTargetBitrateBySenderSsrc) {
|
||||
const uint32_t kRemoteSsrc1 = 12345;
|
||||
const uint32_t kRemoteSsrc2 = 22345;
|
||||
SimulatedClock clock(0);
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer1;
|
||||
StrictMock<MockMediaReceiverRtcpObserver> observer2;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc1, &observer1);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc2, &observer2);
|
||||
|
||||
@ -647,13 +701,16 @@ TEST(RtcpTransceiverImplTest, CallsObserverOnTargetBitrateBySenderSsrc) {
|
||||
bitrate_allocation.SetBitrate(1, 1, /*bitrate_bps=*/80000);
|
||||
EXPECT_CALL(observer1, OnBitrateAllocation(kRemoteSsrc1, bitrate_allocation));
|
||||
EXPECT_CALL(observer2, OnBitrateAllocation(_, _)).Times(0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SkipsIncorrectTargetBitrateEntries) {
|
||||
const uint32_t kRemoteSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
MockMediaReceiverRtcpObserver observer;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer);
|
||||
|
||||
webrtc::rtcp::TargetBitrate target_bitrate;
|
||||
@ -669,13 +726,16 @@ TEST(RtcpTransceiverImplTest, SkipsIncorrectTargetBitrateEntries) {
|
||||
VideoBitrateAllocation expected_allocation;
|
||||
expected_allocation.SetBitrate(0, 0, /*bitrate_bps=*/10000);
|
||||
EXPECT_CALL(observer, OnBitrateAllocation(kRemoteSsrc, expected_allocation));
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CallsObserverOnByeBehindSenderReport) {
|
||||
const uint32_t kRemoteSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
MockMediaReceiverRtcpObserver observer;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer);
|
||||
|
||||
CompoundPacket compound;
|
||||
@ -689,13 +749,16 @@ TEST(RtcpTransceiverImplTest, CallsObserverOnByeBehindSenderReport) {
|
||||
|
||||
EXPECT_CALL(observer, OnBye(kRemoteSsrc));
|
||||
EXPECT_CALL(observer, OnSenderReport(kRemoteSsrc, _, _));
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CallsObserverOnByeBehindUnknownRtcpPacket) {
|
||||
const uint32_t kRemoteSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
MockMediaReceiverRtcpObserver observer;
|
||||
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, &observer);
|
||||
|
||||
CompoundPacket compound;
|
||||
@ -708,7 +771,7 @@ TEST(RtcpTransceiverImplTest, CallsObserverOnByeBehindUnknownRtcpPacket) {
|
||||
auto raw_packet = compound.Build();
|
||||
|
||||
EXPECT_CALL(observer, OnBye(kRemoteSsrc));
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest,
|
||||
@ -722,7 +785,9 @@ TEST(RtcpTransceiverImplTest,
|
||||
EXPECT_CALL(receive_statistics, RtcpReportBlocks(_))
|
||||
.WillOnce(Return(statistics_report_blocks));
|
||||
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -736,7 +801,7 @@ TEST(RtcpTransceiverImplTest,
|
||||
sr.SetSenderSsrc(kRemoteSsrc1);
|
||||
sr.SetNtp(kRemoteNtp);
|
||||
auto raw_packet = sr.Build();
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, Timestamp::Micros(0));
|
||||
|
||||
// Trigger sending ReceiverReport.
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
@ -759,7 +824,7 @@ TEST(RtcpTransceiverImplTest,
|
||||
WhenSendsReceiverReportCalculatesDelaySinceLastSenderReport) {
|
||||
const uint32_t kRemoteSsrc1 = 4321;
|
||||
const uint32_t kRemoteSsrc2 = 5321;
|
||||
rtc::ScopedFakeClock clock;
|
||||
|
||||
std::vector<ReportBlock> statistics_report_blocks(2);
|
||||
statistics_report_blocks[0].SetMediaSsrc(kRemoteSsrc1);
|
||||
statistics_report_blocks[1].SetMediaSsrc(kRemoteSsrc2);
|
||||
@ -767,7 +832,9 @@ TEST(RtcpTransceiverImplTest,
|
||||
EXPECT_CALL(receive_statistics, RtcpReportBlocks(_))
|
||||
.WillOnce(Return(statistics_report_blocks));
|
||||
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -775,18 +842,19 @@ TEST(RtcpTransceiverImplTest,
|
||||
config.receive_statistics = &receive_statistics;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
auto receive_sender_report = [&rtcp_transceiver](uint32_t remote_ssrc) {
|
||||
auto receive_sender_report = [&rtcp_transceiver,
|
||||
&clock](uint32_t remote_ssrc) {
|
||||
SenderReport sr;
|
||||
sr.SetSenderSsrc(remote_ssrc);
|
||||
auto raw_packet = sr.Build();
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, rtc::TimeMicros());
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, clock.CurrentTime());
|
||||
};
|
||||
|
||||
receive_sender_report(kRemoteSsrc1);
|
||||
clock.AdvanceTime(webrtc::TimeDelta::Millis(100));
|
||||
clock.AdvanceTime(TimeDelta::Millis(100));
|
||||
|
||||
receive_sender_report(kRemoteSsrc2);
|
||||
clock.AdvanceTime(webrtc::TimeDelta::Millis(100));
|
||||
clock.AdvanceTime(TimeDelta::Millis(100));
|
||||
|
||||
// Trigger ReceiverReport back.
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
@ -808,7 +876,9 @@ TEST(RtcpTransceiverImplTest, SendsNack) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrc = 4321;
|
||||
std::vector<uint16_t> kMissingSequenceNumbers = {34, 37, 38};
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -827,7 +897,9 @@ TEST(RtcpTransceiverImplTest, SendsNack) {
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithPictureLossIndication) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrc = 4321;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -846,7 +918,9 @@ TEST(RtcpTransceiverImplTest, RequestKeyFrameWithPictureLossIndication) {
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFullIntraRequest) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrcs[] = {4321, 5321};
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -863,7 +937,9 @@ TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFullIntraRequest) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFirIncreaseSeqNoPerSsrc) {
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -893,7 +969,9 @@ TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFirIncreaseSeqNoPerSsrc) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendFirDoesNotIncreaseSeqNoIfOldRequest) {
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -919,7 +997,9 @@ TEST(RtcpTransceiverImplTest, SendFirDoesNotIncreaseSeqNoIfOldRequest) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesCompoundPacket) {
|
||||
const uint32_t kRemoteSsrcs[] = {4321};
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
// Turn periodic off to ensure sent rtcp packet is explicitly requested.
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -938,7 +1018,9 @@ TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesCompoundPacket) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesReducedSizePacket) {
|
||||
const uint32_t kRemoteSsrcs[] = {4321};
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
// Turn periodic off to ensure sent rtcp packet is explicitly requested.
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -957,8 +1039,9 @@ TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesReducedSizePacket) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsXrRrtrWhenEnabled) {
|
||||
const uint32_t kSenderSsrc = 4321;
|
||||
rtc::ScopedFakeClock clock;
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
@ -968,7 +1051,7 @@ TEST(RtcpTransceiverImplTest, SendsXrRrtrWhenEnabled) {
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
NtpTime ntp_time_now = TimeMicrosToNtp(rtc::TimeMicros());
|
||||
NtpTime ntp_time_now = clock.CurrentNtpTime();
|
||||
|
||||
EXPECT_EQ(rtcp_parser.xr()->num_packets(), 1);
|
||||
EXPECT_EQ(rtcp_parser.xr()->sender_ssrc(), kSenderSsrc);
|
||||
@ -977,7 +1060,9 @@ TEST(RtcpTransceiverImplTest, SendsXrRrtrWhenEnabled) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoXrRrtrWhenDisabled) {
|
||||
SimulatedClock clock(0);
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
@ -995,9 +1080,11 @@ TEST(RtcpTransceiverImplTest, SendsNoXrRrtrWhenDisabled) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CalculatesRoundTripTimeOnDlrr) {
|
||||
const uint32_t kSenderSsrc = 4321;
|
||||
SimulatedClock clock(0);
|
||||
MockRtcpRttStats rtt_observer;
|
||||
MockTransport null_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &null_transport;
|
||||
@ -1005,25 +1092,27 @@ TEST(RtcpTransceiverImplTest, CalculatesRoundTripTimeOnDlrr) {
|
||||
config.rtt_observer = &rtt_observer;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
int64_t time_us = 12345678;
|
||||
Timestamp time = Timestamp::Micros(12345678);
|
||||
webrtc::rtcp::ReceiveTimeInfo rti;
|
||||
rti.ssrc = kSenderSsrc;
|
||||
rti.last_rr = CompactNtp(TimeMicrosToNtp(time_us));
|
||||
rti.last_rr = CompactNtp(clock.ConvertTimestampToNtpTime(time));
|
||||
rti.delay_since_last_rr = SaturatedUsToCompactNtp(10 * 1000);
|
||||
webrtc::rtcp::ExtendedReports xr;
|
||||
xr.AddDlrrItem(rti);
|
||||
auto raw_packet = xr.Build();
|
||||
|
||||
EXPECT_CALL(rtt_observer, OnRttUpdate(100 /* rtt_ms */));
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, time_us + 110 * 1000);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, time + TimeDelta::Millis(110));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, IgnoresUnknownSsrcInDlrr) {
|
||||
const uint32_t kSenderSsrc = 4321;
|
||||
const uint32_t kUnknownSsrc = 4322;
|
||||
SimulatedClock clock(0);
|
||||
MockRtcpRttStats rtt_observer;
|
||||
MockTransport null_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.clock = &clock;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &null_transport;
|
||||
@ -1031,16 +1120,16 @@ TEST(RtcpTransceiverImplTest, IgnoresUnknownSsrcInDlrr) {
|
||||
config.rtt_observer = &rtt_observer;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
int64_t time_us = 12345678;
|
||||
Timestamp time = Timestamp::Micros(12345678);
|
||||
webrtc::rtcp::ReceiveTimeInfo rti;
|
||||
rti.ssrc = kUnknownSsrc;
|
||||
rti.last_rr = CompactNtp(TimeMicrosToNtp(time_us));
|
||||
rti.last_rr = CompactNtp(clock.ConvertTimestampToNtpTime(time));
|
||||
webrtc::rtcp::ExtendedReports xr;
|
||||
xr.AddDlrrItem(rti);
|
||||
auto raw_packet = xr.Build();
|
||||
|
||||
EXPECT_CALL(rtt_observer, OnRttUpdate(_)).Times(0);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, time_us + 100000);
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, time + TimeDelta::Millis(100));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user