Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc

Issue 1582323005: [rtp_rtcp] Append functionality moved from base RtcpPacket class to CompoundPacket (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 11
12 /* 12 /*
13 * This file includes unit tests for the RTCPReceiver. 13 * This file includes unit tests for the RTCPReceiver.
14 */ 14 */
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 #include "webrtc/common_types.h" 18 #include "webrtc/common_types.h"
19 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra te_observer.h" 19 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra te_observer.h"
20 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl e_stream.h" 20 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl e_stream.h"
21 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 21 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" 26 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h"
27 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h" 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h"
28 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" 29 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h"
29 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" 30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h"
31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h" 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h"
32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h" 33 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
33 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" 34 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h"
34 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" 35 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 std::set<uint32_t> ssrcs; 997 std::set<uint32_t> ssrcs;
997 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 998 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
998 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 999 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
999 1000
1000 rtcp::Tmmbr tmmbr; 1001 rtcp::Tmmbr tmmbr;
1001 tmmbr.From(kSenderSsrc); 1002 tmmbr.From(kSenderSsrc);
1002 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); 1003 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0));
1003 1004
1004 rtcp::SenderReport sr; 1005 rtcp::SenderReport sr;
1005 sr.From(kSenderSsrc); 1006 sr.From(kSenderSsrc);
1006 sr.Append(&tmmbr); 1007 rtcp::CompoundPacket compound;
1007 rtc::Buffer packet = sr.Build(); 1008 compound.Append(&sr);
1009 compound.Append(&tmmbr);
1010 rtc::Buffer packet = compound.Build();
1008 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1011 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1009 1012
1010 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1013 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
1011 TMMBRSet candidate_set; 1014 TMMBRSet candidate_set;
1012 candidate_set.VerifyAndAllocateSet(1); 1015 candidate_set.VerifyAndAllocateSet(1);
1013 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); 1016 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set));
1014 EXPECT_LT(0U, candidate_set.Tmmbr(0)); 1017 EXPECT_LT(0U, candidate_set.Tmmbr(0));
1015 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); 1018 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0));
1016 } 1019 }
1017 1020
1018 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { 1021 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
1019 const uint32_t kMediaFlowSsrc = 0x2040608; 1022 const uint32_t kMediaFlowSsrc = 0x2040608;
1020 const uint32_t kSenderSsrc = 0x10203; 1023 const uint32_t kSenderSsrc = 0x10203;
1021 1024
1022 rtcp::Tmmbr tmmbr; 1025 rtcp::Tmmbr tmmbr;
1023 tmmbr.From(kSenderSsrc); 1026 tmmbr.From(kSenderSsrc);
1024 // This SSRC is not what we are sending. 1027 // This SSRC is not what we are sending.
1025 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); 1028 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0));
1026 1029
1027 rtcp::SenderReport sr; 1030 rtcp::SenderReport sr;
1028 sr.From(kSenderSsrc); 1031 sr.From(kSenderSsrc);
1029 sr.Append(&tmmbr); 1032 rtcp::CompoundPacket compound;
1030 rtc::Buffer packet = sr.Build(); 1033 compound.Append(&sr);
1034 compound.Append(&tmmbr);
1035 rtc::Buffer packet = compound.Build();
1031 1036
1032 std::set<uint32_t> ssrcs; 1037 std::set<uint32_t> ssrcs;
1033 ssrcs.insert(kMediaFlowSsrc); 1038 ssrcs.insert(kMediaFlowSsrc);
1034 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1039 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1035 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1040 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1036 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1041 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
1037 } 1042 }
1038 1043
1039 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { 1044 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) {
1040 const uint32_t kMediaFlowSsrc = 0x2040608; 1045 const uint32_t kMediaFlowSsrc = 0x2040608;
1041 const uint32_t kSenderSsrc = 0x10203; 1046 const uint32_t kSenderSsrc = 0x10203;
1042 std::set<uint32_t> ssrcs; 1047 std::set<uint32_t> ssrcs;
1043 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 1048 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
1044 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1049 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1045 1050
1046 rtcp::Tmmbr tmmbr; 1051 rtcp::Tmmbr tmmbr;
1047 tmmbr.From(kSenderSsrc); 1052 tmmbr.From(kSenderSsrc);
1048 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); 1053 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0));
1049 1054
1050 rtcp::SenderReport sr; 1055 rtcp::SenderReport sr;
1051 sr.From(kSenderSsrc); 1056 sr.From(kSenderSsrc);
1052 sr.Append(&tmmbr); 1057 rtcp::CompoundPacket compound;
1053 rtc::Buffer packet = sr.Build(); 1058 compound.Append(&sr);
1059 compound.Append(&tmmbr);
1060 rtc::Buffer packet = compound.Build();
1054 1061
1055 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1062 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1056 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1063 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
1057 } 1064 }
1058 1065
1059 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { 1066 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) {
1060 const uint32_t kMediaFlowSsrc = 0x2040608; 1067 const uint32_t kMediaFlowSsrc = 0x2040608;
1061 const uint32_t kSenderSsrc = 0x10203; 1068 const uint32_t kSenderSsrc = 0x10203;
1062 std::set<uint32_t> ssrcs; 1069 std::set<uint32_t> ssrcs;
1063 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 1070 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
1064 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1071 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1065 1072
1066 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. 1073 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2.
1067 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. 1074 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10.
1068 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { 1075 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) {
1069 rtcp::Tmmbr tmmbr; 1076 rtcp::Tmmbr tmmbr;
1070 tmmbr.From(ssrc); 1077 tmmbr.From(ssrc);
1071 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); 1078 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0));
1072 1079
1073 rtcp::SenderReport sr; 1080 rtcp::SenderReport sr;
1074 sr.From(ssrc); 1081 sr.From(ssrc);
1075 sr.Append(&tmmbr); 1082 rtcp::CompoundPacket compound;
1076 rtc::Buffer packet = sr.Build(); 1083 compound.Append(&sr);
1084 compound.Append(&tmmbr);
1085 rtc::Buffer packet = compound.Build();
1077 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1086 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1078 // 5 seconds between each packet. 1087 // 5 seconds between each packet.
1079 system_clock_.AdvanceTimeMilliseconds(5000); 1088 system_clock_.AdvanceTimeMilliseconds(5000);
1080 } 1089 }
1081 // It is now starttime + 15. 1090 // It is now starttime + 15.
1082 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1091 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
1083 TMMBRSet candidate_set; 1092 TMMBRSet candidate_set;
1084 candidate_set.VerifyAndAllocateSet(3); 1093 candidate_set.VerifyAndAllocateSet(3);
1085 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); 1094 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set));
1086 EXPECT_LT(0U, candidate_set.Tmmbr(0)); 1095 EXPECT_LT(0U, candidate_set.Tmmbr(0));
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 rtcp::TransportFeedback packet; 1211 rtcp::TransportFeedback packet;
1203 packet.WithMediaSourceSsrc(kSourceSsrc); 1212 packet.WithMediaSourceSsrc(kSourceSsrc);
1204 packet.WithPacketSenderSsrc(kSenderSsrc); 1213 packet.WithPacketSenderSsrc(kSenderSsrc);
1205 packet.WithBase(1, 1000); 1214 packet.WithBase(1, 1000);
1206 packet.WithReceivedPacket(1, 1000); 1215 packet.WithReceivedPacket(1, 1000);
1207 1216
1208 static uint32_t kBitrateBps = 50000; 1217 static uint32_t kBitrateBps = 50000;
1209 rtcp::Remb remb; 1218 rtcp::Remb remb;
1210 remb.From(kSourceSsrc); 1219 remb.From(kSourceSsrc);
1211 remb.WithBitrateBps(kBitrateBps); 1220 remb.WithBitrateBps(kBitrateBps);
1212 packet.Append(&remb); 1221 rtcp::CompoundPacket compound;
1213 1222 compound.Append(&packet);
1214 rtc::Buffer built_packet = packet.Build(); 1223 compound.Append(&remb);
1224 rtc::Buffer built_packet = compound.Build();
1215 1225
1216 // Modify the TransportFeedback packet so that it is invalid. 1226 // Modify the TransportFeedback packet so that it is invalid.
1217 const size_t kStatusCountOffset = 14; 1227 const size_t kStatusCountOffset = 14;
1218 ByteWriter<uint16_t>::WriteBigEndian( 1228 ByteWriter<uint16_t>::WriteBigEndian(
1219 &built_packet.data()[kStatusCountOffset], 42); 1229 &built_packet.data()[kStatusCountOffset], 42);
1220 1230
1221 EXPECT_EQ(0, InjectRtcpPacket(built_packet.data(), built_packet.size())); 1231 EXPECT_EQ(0, InjectRtcpPacket(built_packet.data(), built_packet.size()));
1222 1232
1223 // Transport feedback should be ignored, but next packet should work. 1233 // Transport feedback should be ignored, but next packet should work.
1224 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); 1234 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback);
1225 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); 1235 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb);
1226 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); 1236 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate);
1227 } 1237 }
1228 1238
1229 } // Anonymous namespace 1239 } // Anonymous namespace
1230 1240
1231 } // namespace webrtc 1241 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698