in RtcpTransceiver tests use dedicate RtcpParserTransport
class to pass packet to RtcpPacketParser This helpers make tests setup cleaner and makes explicit expectation on number of packets passed to the transport. Bug: webrtc:8239 Change-Id: I2d5975be59327cee440e87dbd0701b93514c9726 Reviewed-on: https://webrtc-review.googlesource.com/22460 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20911}
This commit is contained in:

committed by
Commit Bot

parent
4fa5da54d5
commit
979d6f96a8
@ -82,6 +82,28 @@ class FakeRtcpTransport : public webrtc::Transport {
|
||||
rtc::Event sent_rtcp_;
|
||||
};
|
||||
|
||||
class RtcpParserTransport : public webrtc::Transport {
|
||||
public:
|
||||
explicit RtcpParserTransport(RtcpPacketParser* parser) : parser_(parser) {}
|
||||
// Returns total number of rtcp packet received.
|
||||
int num_packets() const { return num_packets_; }
|
||||
|
||||
private:
|
||||
bool SendRtcp(const uint8_t* data, size_t size) override {
|
||||
++num_packets_;
|
||||
parser_->Parse(data, size);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SendRtp(const uint8_t*, size_t, const webrtc::PacketOptions&) override {
|
||||
ADD_FAILURE() << "RtcpTransciver shouldn't send rtp packets.";
|
||||
return true;
|
||||
}
|
||||
|
||||
RtcpPacketParser* const parser_;
|
||||
int num_packets_ = 0;
|
||||
};
|
||||
|
||||
TEST(RtcpTransceiverImplTest, DelaysSendingFirstCompondPacket) {
|
||||
rtc::TaskQueue queue("rtcp");
|
||||
FakeRtcpTransport transport;
|
||||
@ -186,17 +208,15 @@ TEST(RtcpTransceiverImplTest, SendCompoundPacketDelaysPeriodicSendPackets) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.cname = "cname";
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
// Minimal compound RTCP packet contains sender or receiver report and sdes
|
||||
@ -211,32 +231,29 @@ TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoRembInitially) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
EXPECT_EQ(transport.num_packets(), 1);
|
||||
EXPECT_EQ(rtcp_parser.remb()->num_packets(), 0);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembIncludesRembInNextCompoundPacket) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SetRemb(/*bitrate_bps=*/10000, /*ssrc=*/{54321, 64321});
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
@ -249,15 +266,13 @@ TEST(RtcpTransceiverImplTest, SetRembIncludesRembInNextCompoundPacket) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembUpdatesValuesToSend) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillRepeatedly(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SetRemb(/*bitrate_bps=*/10000, /*ssrc=*/{54321, 64321});
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
@ -276,53 +291,47 @@ TEST(RtcpTransceiverImplTest, SetRembUpdatesValuesToSend) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SetRembIncludesRembInAllCompoundPackets) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillRepeatedly(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SetRemb(/*bitrate_bps=*/10000, /*ssrc=*/{54321, 64321});
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
EXPECT_EQ(transport.num_packets(), 2);
|
||||
EXPECT_EQ(rtcp_parser.remb()->num_packets(), 2);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoRembAfterUnset) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillRepeatedly(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SetRemb(/*bitrate_bps=*/10000, /*ssrc=*/{54321, 64321});
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
EXPECT_EQ(transport.num_packets(), 1);
|
||||
ASSERT_EQ(rtcp_parser.remb()->num_packets(), 1);
|
||||
|
||||
rtcp_transceiver.UnsetRemb();
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
EXPECT_EQ(transport.num_packets(), 2);
|
||||
EXPECT_EQ(rtcp_parser.remb()->num_packets(), 1);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, ReceiverReportUsesReceiveStatistics) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
const uint32_t kMediaSsrc = 54321;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
MockReceiveStatisticsProvider receive_statistics;
|
||||
std::vector<ReportBlock> report_blocks(1);
|
||||
report_blocks[0].SetMediaSsrc(kMediaSsrc);
|
||||
@ -331,7 +340,9 @@ TEST(RtcpTransceiverImplTest, ReceiverReportUsesReceiveStatistics) {
|
||||
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.receive_statistics = &receive_statistics;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
@ -354,7 +365,6 @@ TEST(RtcpTransceiverImplTest,
|
||||
WhenSendsReceiverReportSetsLastSenderReportTimestampPerRemoteSsrc) {
|
||||
const uint32_t kRemoteSsrc1 = 4321;
|
||||
const uint32_t kRemoteSsrc2 = 5321;
|
||||
MockTransport outgoing_transport;
|
||||
std::vector<ReportBlock> statistics_report_blocks(2);
|
||||
statistics_report_blocks[0].SetMediaSsrc(kRemoteSsrc1);
|
||||
statistics_report_blocks[1].SetMediaSsrc(kRemoteSsrc2);
|
||||
@ -364,7 +374,9 @@ TEST(RtcpTransceiverImplTest,
|
||||
|
||||
RtcpTransceiverConfig config;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.receive_statistics = &receive_statistics;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
@ -377,9 +389,6 @@ TEST(RtcpTransceiverImplTest,
|
||||
rtcp_transceiver.ReceivePacket(raw_packet, /*now_us=*/0);
|
||||
|
||||
// Trigger sending ReceiverReport.
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
EXPECT_GT(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
@ -401,7 +410,6 @@ TEST(RtcpTransceiverImplTest,
|
||||
const uint32_t kRemoteSsrc1 = 4321;
|
||||
const uint32_t kRemoteSsrc2 = 5321;
|
||||
rtc::ScopedFakeClock clock;
|
||||
MockTransport outgoing_transport;
|
||||
std::vector<ReportBlock> statistics_report_blocks(2);
|
||||
statistics_report_blocks[0].SetMediaSsrc(kRemoteSsrc1);
|
||||
statistics_report_blocks[1].SetMediaSsrc(kRemoteSsrc2);
|
||||
@ -411,7 +419,9 @@ TEST(RtcpTransceiverImplTest,
|
||||
|
||||
RtcpTransceiverConfig config;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
config.receive_statistics = &receive_statistics;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
@ -429,9 +439,6 @@ TEST(RtcpTransceiverImplTest,
|
||||
clock.AdvanceTimeMicros(100 * rtc::kNumMicrosecsPerMillisec);
|
||||
|
||||
// Trigger ReceiverReport back.
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
EXPECT_GT(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
@ -451,15 +458,13 @@ TEST(RtcpTransceiverImplTest, SendsNack) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrc = 4321;
|
||||
std::vector<uint16_t> kMissingSequenceNumbers = {34, 37, 38};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
rtcp_transceiver.SendNack(kRemoteSsrc, kMissingSequenceNumbers);
|
||||
|
||||
@ -472,19 +477,18 @@ TEST(RtcpTransceiverImplTest, SendsNack) {
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithPictureLossIndication) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrcs[] = {4321, 5321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
rtcp_transceiver.SendPictureLossIndication(kRemoteSsrcs);
|
||||
|
||||
// Expect a pli packet per ssrc in the sent single compound packet.
|
||||
EXPECT_EQ(transport.num_packets(), 1);
|
||||
EXPECT_EQ(rtcp_parser.pli()->num_packets(), 2);
|
||||
EXPECT_EQ(rtcp_parser.pli()->sender_ssrc(), kSenderSsrc);
|
||||
// test::RtcpPacketParser overwrites first pli packet with second one.
|
||||
@ -494,15 +498,13 @@ TEST(RtcpTransceiverImplTest, RequestKeyFrameWithPictureLossIndication) {
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFullIntraRequest) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrcs[] = {4321, 5321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
rtcp_transceiver.SendFullIntraRequest(kRemoteSsrcs);
|
||||
|
||||
@ -513,14 +515,12 @@ TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFullIntraRequest) {
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFirIncreaseSeqNoPerSsrc) {
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillRepeatedly(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
const uint32_t kBothRemoteSsrcs[] = {4321, 5321};
|
||||
const uint32_t kOneRemoteSsrc[] = {4321};
|
||||
@ -546,44 +546,39 @@ TEST(RtcpTransceiverImplTest, RequestKeyFrameWithFirIncreaseSeqNoPerSsrc) {
|
||||
|
||||
TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesCompoundPacket) {
|
||||
const uint32_t kRemoteSsrcs[] = {4321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
// Turn periodic off to ensure sent rtcp packet is explicitly requested.
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
|
||||
config.rtcp_mode = webrtc::RtcpMode::kCompound;
|
||||
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SendFullIntraRequest(kRemoteSsrcs);
|
||||
|
||||
// Test sent packet is compound by expecting presense of receiver report.
|
||||
EXPECT_EQ(transport.num_packets(), 1);
|
||||
EXPECT_EQ(rtcp_parser.receiver_report()->num_packets(), 1);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesReducedSizePacket) {
|
||||
const uint32_t kRemoteSsrcs[] = {4321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
// Turn periodic off to ensure sent rtcp packet is explicitly requested.
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
config.outgoing_transport = &transport;
|
||||
|
||||
config.rtcp_mode = webrtc::RtcpMode::kReducedSize;
|
||||
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
// Expect some rtcp packet is triggered by the RequestKeyFrame.
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.SendFullIntraRequest(kRemoteSsrcs);
|
||||
|
||||
// Test sent packet is reduced size by expecting absense of receiver report.
|
||||
EXPECT_EQ(transport.num_packets(), 1);
|
||||
EXPECT_EQ(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user