| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" | 21 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" |
| 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h" | 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h" |
| 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" |
| 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" | 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" |
| 25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h" | 25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h" |
| 26 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h" | 26 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h" |
| 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" | 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" |
| 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h" | 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h" |
| 29 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" | 29 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" |
| 30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" | 30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" |
| 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rpsi.h" | |
| 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h" | 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h" |
| 33 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h" | 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h" |
| 34 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" | |
| 35 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" | 33 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" |
| 36 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" | 34 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" |
| 37 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" | 35 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" |
| 38 #include "webrtc/modules/rtp_rtcp/source/time_util.h" | 36 #include "webrtc/modules/rtp_rtcp/source/time_util.h" |
| 39 #include "webrtc/system_wrappers/include/ntp_time.h" | 37 #include "webrtc/system_wrappers/include/ntp_time.h" |
| 40 #include "webrtc/test/gmock.h" | 38 #include "webrtc/test/gmock.h" |
| 41 #include "webrtc/test/gtest.h" | 39 #include "webrtc/test/gtest.h" |
| 42 | 40 |
| 43 namespace webrtc { | 41 namespace webrtc { |
| 44 namespace { | 42 namespace { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 58 | 56 |
| 59 class MockRtcpPacketTypeCounterObserver : public RtcpPacketTypeCounterObserver { | 57 class MockRtcpPacketTypeCounterObserver : public RtcpPacketTypeCounterObserver { |
| 60 public: | 58 public: |
| 61 MOCK_METHOD2(RtcpPacketTypesCounterUpdated, | 59 MOCK_METHOD2(RtcpPacketTypesCounterUpdated, |
| 62 void(uint32_t, const RtcpPacketTypeCounter&)); | 60 void(uint32_t, const RtcpPacketTypeCounter&)); |
| 63 }; | 61 }; |
| 64 | 62 |
| 65 class MockRtcpIntraFrameObserver : public RtcpIntraFrameObserver { | 63 class MockRtcpIntraFrameObserver : public RtcpIntraFrameObserver { |
| 66 public: | 64 public: |
| 67 MOCK_METHOD1(OnReceivedIntraFrameRequest, void(uint32_t)); | 65 MOCK_METHOD1(OnReceivedIntraFrameRequest, void(uint32_t)); |
| 68 MOCK_METHOD2(OnReceivedSLI, void(uint32_t, uint8_t)); | |
| 69 MOCK_METHOD2(OnReceivedRPSI, void(uint32_t, uint64_t)); | |
| 70 }; | 66 }; |
| 71 | 67 |
| 72 class MockRtcpCallbackImpl : public RtcpStatisticsCallback { | 68 class MockRtcpCallbackImpl : public RtcpStatisticsCallback { |
| 73 public: | 69 public: |
| 74 MOCK_METHOD2(StatisticsUpdated, void(const RtcpStatistics&, uint32_t)); | 70 MOCK_METHOD2(StatisticsUpdated, void(const RtcpStatistics&, uint32_t)); |
| 75 MOCK_METHOD2(CNameChanged, void(const char*, uint32_t)); | 71 MOCK_METHOD2(CNameChanged, void(const char*, uint32_t)); |
| 76 }; | 72 }; |
| 77 | 73 |
| 78 class MockTransportFeedbackObserver : public TransportFeedbackObserver { | 74 class MockTransportFeedbackObserver : public TransportFeedbackObserver { |
| 79 public: | 75 public: |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 TEST_F(RtcpReceiverTest, InvalidFeedbackPacketIsIgnored) { | 165 TEST_F(RtcpReceiverTest, InvalidFeedbackPacketIsIgnored) { |
| 170 // Too short feedback packet. | 166 // Too short feedback packet. |
| 171 const uint8_t bad_packet[] = {0x81, rtcp::Rtpfb::kPacketType, 0, 0}; | 167 const uint8_t bad_packet[] = {0x81, rtcp::Rtpfb::kPacketType, 0, 0}; |
| 172 | 168 |
| 173 // TODO(danilchap): Add expectation RtcpPacketTypesCounterUpdated | 169 // TODO(danilchap): Add expectation RtcpPacketTypesCounterUpdated |
| 174 // is not called once parser would be adjusted to avoid that callback on | 170 // is not called once parser would be adjusted to avoid that callback on |
| 175 // semi-valid packets. | 171 // semi-valid packets. |
| 176 InjectRtcpPacket(bad_packet); | 172 InjectRtcpPacket(bad_packet); |
| 177 } | 173 } |
| 178 | 174 |
| 179 TEST_F(RtcpReceiverTest, RpsiWithFractionalPaddingIsIgnored) { | |
| 180 // Padding size represent fractional number of bytes. | |
| 181 const uint8_t kPaddingSizeBits = 0x0b; | |
| 182 // clang-format off | |
| 183 const uint8_t bad_packet[] = {0x80 | rtcp::Rpsi::kFeedbackMessageType, | |
| 184 rtcp::Rpsi::kPacketType, 0, 3, | |
| 185 0x12, 0x34, 0x56, 0x78, | |
| 186 0x98, 0x76, 0x54, 0x32, | |
| 187 kPaddingSizeBits, 0x00, 0x00, 0x00}; | |
| 188 // clang-format on | |
| 189 EXPECT_CALL(intra_frame_observer_, OnReceivedRPSI(_, _)).Times(0); | |
| 190 InjectRtcpPacket(bad_packet); | |
| 191 } | |
| 192 | |
| 193 TEST_F(RtcpReceiverTest, RpsiWithTooLargePaddingIsIgnored) { | |
| 194 // Padding size exceeds packet size. | |
| 195 const uint8_t kPaddingSizeBits = 0xa8; | |
| 196 // clang-format off | |
| 197 const uint8_t bad_packet[] = {0x80 | rtcp::Rpsi::kFeedbackMessageType, | |
| 198 rtcp::Rpsi::kPacketType, 0, 3, | |
| 199 0x12, 0x34, 0x56, 0x78, | |
| 200 0x98, 0x76, 0x54, 0x32, | |
| 201 kPaddingSizeBits, 0x00, 0x00, 0x00}; | |
| 202 // clang-format on | |
| 203 EXPECT_CALL(intra_frame_observer_, OnReceivedRPSI(_, _)).Times(0); | |
| 204 InjectRtcpPacket(bad_packet); | |
| 205 } | |
| 206 | |
| 207 // With parsing using rtcp classes this test will make no sense. | |
| 208 // With current stateful parser this test was failing. | |
| 209 TEST_F(RtcpReceiverTest, TwoHalfValidRpsiAreIgnored) { | |
| 210 // clang-format off | |
| 211 const uint8_t bad_packet[] = {0x80 | rtcp::Rpsi::kFeedbackMessageType, | |
| 212 rtcp::Rpsi::kPacketType, 0, 2, | |
| 213 0x12, 0x34, 0x56, 0x78, | |
| 214 0x98, 0x76, 0x54, 0x32, | |
| 215 0x80 | rtcp::Rpsi::kFeedbackMessageType, | |
| 216 rtcp::Rpsi::kPacketType, 0, 2, | |
| 217 0x12, 0x34, 0x56, 0x78, | |
| 218 0x98, 0x76, 0x54, 0x32}; | |
| 219 // clang-format on | |
| 220 EXPECT_CALL(intra_frame_observer_, OnReceivedRPSI(_, _)).Times(0); | |
| 221 InjectRtcpPacket(bad_packet); | |
| 222 } | |
| 223 | |
| 224 TEST_F(RtcpReceiverTest, InjectRpsiPacket) { | |
| 225 const uint64_t kPictureId = 0x123456789; | |
| 226 rtcp::Rpsi rpsi; | |
| 227 rpsi.SetPictureId(kPictureId); | |
| 228 | |
| 229 EXPECT_CALL(intra_frame_observer_, OnReceivedRPSI(_, kPictureId)); | |
| 230 InjectRtcpPacket(rpsi); | |
| 231 } | |
| 232 | |
| 233 TEST_F(RtcpReceiverTest, InjectSrPacket) { | 175 TEST_F(RtcpReceiverTest, InjectSrPacket) { |
| 234 RTCPSenderInfo info; | 176 RTCPSenderInfo info; |
| 235 EXPECT_EQ(-1, rtcp_receiver_.SenderInfoReceived(&info)); | 177 EXPECT_EQ(-1, rtcp_receiver_.SenderInfoReceived(&info)); |
| 236 | 178 |
| 237 int64_t now = system_clock_.TimeInMilliseconds(); | 179 int64_t now = system_clock_.TimeInMilliseconds(); |
| 238 rtcp::SenderReport sr; | 180 rtcp::SenderReport sr; |
| 239 sr.SetSenderSsrc(kSenderSsrc); | 181 sr.SetSenderSsrc(kSenderSsrc); |
| 240 | 182 |
| 241 EXPECT_CALL(rtp_rtcp_impl_, OnReceivedRtcpReportBlocks(IsEmpty())); | 183 EXPECT_CALL(rtp_rtcp_impl_, OnReceivedRtcpReportBlocks(IsEmpty())); |
| 242 EXPECT_CALL(bandwidth_observer_, | 184 EXPECT_CALL(bandwidth_observer_, |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 } | 619 } |
| 678 | 620 |
| 679 TEST_F(RtcpReceiverTest, FirPacketNotToUsIgnored) { | 621 TEST_F(RtcpReceiverTest, FirPacketNotToUsIgnored) { |
| 680 rtcp::Fir fir; | 622 rtcp::Fir fir; |
| 681 fir.AddRequestTo(kNotToUsSsrc, 13); | 623 fir.AddRequestTo(kNotToUsSsrc, 13); |
| 682 | 624 |
| 683 EXPECT_CALL(intra_frame_observer_, OnReceivedIntraFrameRequest(_)).Times(0); | 625 EXPECT_CALL(intra_frame_observer_, OnReceivedIntraFrameRequest(_)).Times(0); |
| 684 InjectRtcpPacket(fir); | 626 InjectRtcpPacket(fir); |
| 685 } | 627 } |
| 686 | 628 |
| 687 TEST_F(RtcpReceiverTest, InjectSliPacket) { | |
| 688 const uint8_t kPictureId = 40; | |
| 689 rtcp::Sli sli; | |
| 690 sli.AddPictureId(kPictureId); | |
| 691 | |
| 692 EXPECT_CALL(intra_frame_observer_, OnReceivedSLI(_, kPictureId)); | |
| 693 InjectRtcpPacket(sli); | |
| 694 } | |
| 695 | |
| 696 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) { | 629 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) { |
| 697 rtcp::ExtendedReports xr; | 630 rtcp::ExtendedReports xr; |
| 698 xr.SetSenderSsrc(kSenderSsrc); | 631 xr.SetSenderSsrc(kSenderSsrc); |
| 699 | 632 |
| 700 InjectRtcpPacket(xr); | 633 InjectRtcpPacket(xr); |
| 701 } | 634 } |
| 702 | 635 |
| 703 // VOiP reports are ignored. | 636 // VOiP reports are ignored. |
| 704 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) { | 637 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) { |
| 705 const uint8_t kLossRate = 123; | 638 const uint8_t kLossRate = 123; |
| (...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1309 | 1242 |
| 1310 rtcp::ExtendedReports xr; | 1243 rtcp::ExtendedReports xr; |
| 1311 xr.SetTargetBitrate(bitrate); | 1244 xr.SetTargetBitrate(bitrate); |
| 1312 | 1245 |
| 1313 EXPECT_CALL(bitrate_allocation_observer_, | 1246 EXPECT_CALL(bitrate_allocation_observer_, |
| 1314 OnBitrateAllocationUpdated(expected_allocation)); | 1247 OnBitrateAllocationUpdated(expected_allocation)); |
| 1315 InjectRtcpPacket(xr); | 1248 InjectRtcpPacket(xr); |
| 1316 } | 1249 } |
| 1317 | 1250 |
| 1318 } // namespace webrtc | 1251 } // namespace webrtc |
| OLD | NEW |