From 979d6f96a81ed73fd02b601a07699c5e2a39e724 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Tue, 28 Nov 2017 14:06:35 +0100 Subject: [PATCH] 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 Reviewed-by: Niels Moller Cr-Commit-Position: refs/heads/master@{#20911} --- .../source/rtcp_transceiver_impl_unittest.cc | 153 +++++++++--------- 1 file changed, 74 insertions(+), 79 deletions(-) diff --git a/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc b/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc index 2d291b2a1e..9690506854 100644 --- a/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc +++ b/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc @@ -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 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 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 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 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); }