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

Side by Side Diff: webrtc/api/peerconnection_unittest.cc

Issue 1772353002: Adds a test for an one-way media PeerConnection. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Bug fix 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 | « no previous file | 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 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 using webrtc::MockCreateSessionDescriptionObserver; 67 using webrtc::MockCreateSessionDescriptionObserver;
68 using webrtc::MockDataChannelObserver; 68 using webrtc::MockDataChannelObserver;
69 using webrtc::MockSetSessionDescriptionObserver; 69 using webrtc::MockSetSessionDescriptionObserver;
70 using webrtc::MockStatsObserver; 70 using webrtc::MockStatsObserver;
71 using webrtc::ObserverInterface; 71 using webrtc::ObserverInterface;
72 using webrtc::PeerConnectionInterface; 72 using webrtc::PeerConnectionInterface;
73 using webrtc::PeerConnectionFactory; 73 using webrtc::PeerConnectionFactory;
74 using webrtc::SessionDescriptionInterface; 74 using webrtc::SessionDescriptionInterface;
75 using webrtc::StreamCollectionInterface; 75 using webrtc::StreamCollectionInterface;
76 76
77 namespace {
78
77 static const int kMaxWaitMs = 10000; 79 static const int kMaxWaitMs = 10000;
78 // Disable for TSan v2, see 80 // Disable for TSan v2, see
79 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details. 81 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details.
80 // This declaration is also #ifdef'd as it causes uninitialized-variable 82 // This declaration is also #ifdef'd as it causes uninitialized-variable
81 // warnings. 83 // warnings.
82 #if !defined(THREAD_SANITIZER) 84 #if !defined(THREAD_SANITIZER)
83 static const int kMaxWaitForStatsMs = 3000; 85 static const int kMaxWaitForStatsMs = 3000;
84 #endif 86 #endif
85 static const int kMaxWaitForActivationMs = 5000; 87 static const int kMaxWaitForActivationMs = 5000;
86 static const int kMaxWaitForFramesMs = 10000; 88 static const int kMaxWaitForFramesMs = 10000;
(...skipping 18 matching lines...) Expand all
105 std::string* sdp) { 107 std::string* sdp) {
106 const char kSdpLineEnd[] = "\r\n"; 108 const char kSdpLineEnd[] = "\r\n";
107 size_t ssrc_pos = 0; 109 size_t ssrc_pos = 0;
108 while ((ssrc_pos = sdp->find(line_start, ssrc_pos)) != 110 while ((ssrc_pos = sdp->find(line_start, ssrc_pos)) !=
109 std::string::npos) { 111 std::string::npos) {
110 size_t end_ssrc = sdp->find(kSdpLineEnd, ssrc_pos); 112 size_t end_ssrc = sdp->find(kSdpLineEnd, ssrc_pos);
111 sdp->erase(ssrc_pos, end_ssrc - ssrc_pos + strlen(kSdpLineEnd)); 113 sdp->erase(ssrc_pos, end_ssrc - ssrc_pos + strlen(kSdpLineEnd));
112 } 114 }
113 } 115 }
114 116
117 bool StreamsHaveAudioTrack(StreamCollectionInterface* streams) {
118 for (size_t idx = 0; idx < streams->count(); idx++) {
119 auto stream = streams->at(idx);
120 if (stream->GetAudioTracks().size() > 0) {
121 return true;
122 }
123 }
124 return false;
125 }
126
127 bool StreamsHaveVideoTrack(StreamCollectionInterface* streams) {
128 for (size_t idx = 0; idx < streams->count(); idx++) {
129 auto stream = streams->at(idx);
130 if (stream->GetVideoTracks().size() > 0) {
131 return true;
132 }
133 }
134 return false;
135 }
136
115 class SignalingMessageReceiver { 137 class SignalingMessageReceiver {
116 public: 138 public:
117 virtual void ReceiveSdpMessage(const std::string& type, 139 virtual void ReceiveSdpMessage(const std::string& type,
118 std::string& msg) = 0; 140 std::string& msg) = 0;
119 virtual void ReceiveIceMessage(const std::string& sdp_mid, 141 virtual void ReceiveIceMessage(const std::string& sdp_mid,
120 int sdp_mline_index, 142 int sdp_mline_index,
121 const std::string& msg) = 0; 143 const std::string& msg) = 0;
122 144
123 protected: 145 protected:
124 SignalingMessageReceiver() {} 146 SignalingMessageReceiver() {}
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 &source_constraints); 430 &source_constraints);
409 std::string label = stream_label + kVideoTrackLabelBase; 431 std::string label = stream_label + kVideoTrackLabelBase;
410 return peer_connection_factory_->CreateVideoTrack(label, source); 432 return peer_connection_factory_->CreateVideoTrack(label, source);
411 } 433 }
412 434
413 DataChannelInterface* data_channel() { return data_channel_; } 435 DataChannelInterface* data_channel() { return data_channel_; }
414 const MockDataChannelObserver* data_observer() const { 436 const MockDataChannelObserver* data_observer() const {
415 return data_observer_.get(); 437 return data_observer_.get();
416 } 438 }
417 439
418 webrtc::PeerConnectionInterface* pc() { return peer_connection_.get(); } 440 webrtc::PeerConnectionInterface* pc() const { return peer_connection_.get(); }
419 441
420 void StopVideoCapturers() { 442 void StopVideoCapturers() {
421 for (std::vector<cricket::VideoCapturer*>::iterator it = 443 for (std::vector<cricket::VideoCapturer*>::iterator it =
422 video_capturers_.begin(); 444 video_capturers_.begin();
423 it != video_capturers_.end(); ++it) { 445 it != video_capturers_.end(); ++it) {
424 (*it)->Stop(); 446 (*it)->Stop();
425 } 447 }
426 } 448 }
427 449
428 bool AudioFramesReceivedCheck(int number_of_frames) const { 450 bool AudioFramesReceivedCheck(int number_of_frames) const {
429 return number_of_frames <= fake_audio_capture_module_->frames_received(); 451 return number_of_frames <= fake_audio_capture_module_->frames_received();
430 } 452 }
431 453
432 int audio_frames_received() const { 454 int audio_frames_received() const {
433 return fake_audio_capture_module_->frames_received(); 455 return fake_audio_capture_module_->frames_received();
434 } 456 }
435 457
436 bool VideoFramesReceivedCheck(int number_of_frames) { 458 bool VideoFramesReceivedCheck(int number_of_frames) {
437 if (video_decoder_factory_enabled_) { 459 if (video_decoder_factory_enabled_) {
438 const std::vector<FakeWebRtcVideoDecoder*>& decoders 460 const std::vector<FakeWebRtcVideoDecoder*>& decoders
439 = fake_video_decoder_factory_->decoders(); 461 = fake_video_decoder_factory_->decoders();
440 if (decoders.empty()) { 462 if (decoders.empty()) {
441 return number_of_frames <= 0; 463 return number_of_frames <= 0;
442 } 464 }
443 465 // Note - this checks that EACH decoder has the requisite number
466 // of frames. The video_frames_received() function sums them.
444 for (FakeWebRtcVideoDecoder* decoder : decoders) { 467 for (FakeWebRtcVideoDecoder* decoder : decoders) {
445 if (number_of_frames > decoder->GetNumFramesReceived()) { 468 if (number_of_frames > decoder->GetNumFramesReceived()) {
446 return false; 469 return false;
447 } 470 }
448 } 471 }
449 return true; 472 return true;
450 } else { 473 } else {
451 if (fake_video_renderers_.empty()) { 474 if (fake_video_renderers_.empty()) {
452 return number_of_frames <= 0; 475 return number_of_frames <= 0;
453 } 476 }
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 return fake_video_renderers_.empty() ? 1 : 676 return fake_video_renderers_.empty() ? 1 :
654 fake_video_renderers_.begin()->second->height(); 677 fake_video_renderers_.begin()->second->height();
655 } 678 }
656 679
657 size_t number_of_remote_streams() { 680 size_t number_of_remote_streams() {
658 if (!pc()) 681 if (!pc())
659 return 0; 682 return 0;
660 return pc()->remote_streams()->count(); 683 return pc()->remote_streams()->count();
661 } 684 }
662 685
663 StreamCollectionInterface* remote_streams() { 686 StreamCollectionInterface* remote_streams() const {
664 if (!pc()) { 687 if (!pc()) {
665 ADD_FAILURE(); 688 ADD_FAILURE();
666 return nullptr; 689 return nullptr;
667 } 690 }
668 return pc()->remote_streams(); 691 return pc()->remote_streams();
669 } 692 }
670 693
671 StreamCollectionInterface* local_streams() { 694 StreamCollectionInterface* local_streams() {
672 if (!pc()) { 695 if (!pc()) {
673 ADD_FAILURE(); 696 ADD_FAILURE();
674 return nullptr; 697 return nullptr;
675 } 698 }
676 return pc()->local_streams(); 699 return pc()->local_streams();
677 } 700 }
678 701
702 bool HasLocalAudioTrack() { return StreamsHaveAudioTrack(local_streams()); }
703
704 bool HasLocalVideoTrack() { return StreamsHaveVideoTrack(local_streams()); }
705
679 webrtc::PeerConnectionInterface::SignalingState signaling_state() { 706 webrtc::PeerConnectionInterface::SignalingState signaling_state() {
680 return pc()->signaling_state(); 707 return pc()->signaling_state();
681 } 708 }
682 709
683 webrtc::PeerConnectionInterface::IceConnectionState ice_connection_state() { 710 webrtc::PeerConnectionInterface::IceConnectionState ice_connection_state() {
684 return pc()->ice_connection_state(); 711 return pc()->ice_connection_state();
685 } 712 }
686 713
687 webrtc::PeerConnectionInterface::IceGatheringState ice_gathering_state() { 714 webrtc::PeerConnectionInterface::IceGatheringState ice_gathering_state() {
688 return pc()->ice_gathering_state(); 715 return pc()->ice_gathering_state();
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 P2PTestConductor() 939 P2PTestConductor()
913 : pss_(new rtc::PhysicalSocketServer), 940 : pss_(new rtc::PhysicalSocketServer),
914 ss_(new rtc::VirtualSocketServer(pss_.get())), 941 ss_(new rtc::VirtualSocketServer(pss_.get())),
915 ss_scope_(ss_.get()) {} 942 ss_scope_(ss_.get()) {}
916 943
917 bool SessionActive() { 944 bool SessionActive() {
918 return initiating_client_->SessionActive() && 945 return initiating_client_->SessionActive() &&
919 receiving_client_->SessionActive(); 946 receiving_client_->SessionActive();
920 } 947 }
921 948
922 // Return true if the number of frames provided have been received or it is 949 // Return true if the number of frames provided have been received
923 // known that that will never occur (e.g. no frames will be sent or 950 // on the video and audio tracks provided.
924 // captured). 951 bool FramesHaveArrived(int audio_frames_to_receive,
925 bool FramesNotPending(int audio_frames_to_receive, 952 int video_frames_to_receive) {
926 int video_frames_to_receive) { 953 bool all_good = true;
927 return VideoFramesReceivedCheck(video_frames_to_receive) && 954 if (initiating_client_->HasLocalAudioTrack() &&
928 AudioFramesReceivedCheck(audio_frames_to_receive); 955 receiving_client_->can_receive_audio()) {
956 all_good &=
957 receiving_client_->AudioFramesReceivedCheck(audio_frames_to_receive);
958 }
959 if (initiating_client_->HasLocalVideoTrack() &&
960 receiving_client_->can_receive_video()) {
961 all_good &=
962 receiving_client_->VideoFramesReceivedCheck(video_frames_to_receive);
963 }
964 if (receiving_client_->HasLocalAudioTrack() &&
965 initiating_client_->can_receive_audio()) {
966 all_good &=
967 initiating_client_->AudioFramesReceivedCheck(audio_frames_to_receive);
968 }
969 if (receiving_client_->HasLocalVideoTrack() &&
970 initiating_client_->can_receive_video()) {
971 all_good &=
972 initiating_client_->VideoFramesReceivedCheck(video_frames_to_receive);
973 }
974 return all_good;
929 } 975 }
930 bool AudioFramesReceivedCheck(int frames_received) { 976
931 return initiating_client_->AudioFramesReceivedCheck(frames_received) &&
932 receiving_client_->AudioFramesReceivedCheck(frames_received);
933 }
934 bool VideoFramesReceivedCheck(int frames_received) {
935 return initiating_client_->VideoFramesReceivedCheck(frames_received) &&
936 receiving_client_->VideoFramesReceivedCheck(frames_received);
937 }
938 void VerifyDtmf() { 977 void VerifyDtmf() {
939 initiating_client_->VerifyDtmf(); 978 initiating_client_->VerifyDtmf();
940 receiving_client_->VerifyDtmf(); 979 receiving_client_->VerifyDtmf();
941 } 980 }
942 981
943 void TestUpdateOfferWithRejectedContent() { 982 void TestUpdateOfferWithRejectedContent() {
944 // Renegotiate, rejecting the video m-line. 983 // Renegotiate, rejecting the video m-line.
945 initiating_client_->Negotiate(true, false); 984 initiating_client_->Negotiate(true, false);
946 ASSERT_TRUE_WAIT(SessionActive(), kMaxWaitForActivationMs); 985 ASSERT_TRUE_WAIT(SessionActive(), kMaxWaitForActivationMs);
947 986
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 if (initiating_client_->NumberOfLocalMediaStreams() == 0) { 1071 if (initiating_client_->NumberOfLocalMediaStreams() == 0) {
1033 initiating_client_->AddMediaStream(true, true); 1072 initiating_client_->AddMediaStream(true, true);
1034 } 1073 }
1035 initiating_client_->Negotiate(); 1074 initiating_client_->Negotiate();
1036 // Assert true is used here since next tests are guaranteed to fail and 1075 // Assert true is used here since next tests are guaranteed to fail and
1037 // would eat up 5 seconds. 1076 // would eat up 5 seconds.
1038 ASSERT_TRUE_WAIT(SessionActive(), kMaxWaitForActivationMs); 1077 ASSERT_TRUE_WAIT(SessionActive(), kMaxWaitForActivationMs);
1039 VerifySessionDescriptions(); 1078 VerifySessionDescriptions();
1040 1079
1041 int audio_frame_count = kEndAudioFrameCount; 1080 int audio_frame_count = kEndAudioFrameCount;
1081 int video_frame_count = kEndVideoFrameCount;
1042 // TODO(ronghuawu): Add test to cover the case of sendonly and recvonly. 1082 // TODO(ronghuawu): Add test to cover the case of sendonly and recvonly.
1043 if (!initiating_client_->can_receive_audio() || 1083
1044 !receiving_client_->can_receive_audio()) { 1084 if ((!initiating_client_->can_receive_audio() &&
1045 audio_frame_count = -1; 1085 !initiating_client_->can_receive_video()) ||
1046 } 1086 (!receiving_client_->can_receive_audio() &&
1047 int video_frame_count = kEndVideoFrameCount; 1087 !receiving_client_->can_receive_video())) {
1048 if (!initiating_client_->can_receive_video() || 1088 // Neither audio nor video will flow, so connections won't be
1049 !receiving_client_->can_receive_video()) { 1089 // established. There's nothing more to check.
1050 video_frame_count = -1; 1090 // TODO(hta): Check connection if there's a data channel.
1091 return;
1051 } 1092 }
1052 1093
1053 if (audio_frame_count != -1 || video_frame_count != -1) { 1094 // Audio or video is expected to flow, so both clients should reach the
1054 // Audio or video is expected to flow, so both clients should reach the 1095 // Connected state, and the offerer (ICE controller) should proceed to
1055 // Connected state, and the offerer (ICE controller) should proceed to 1096 // Completed.
1056 // Completed. 1097 // Note: These tests have been observed to fail under heavy load at
1057 // Note: These tests have been observed to fail under heavy load at 1098 // shorter timeouts, so they may be flaky.
1058 // shorter timeouts, so they may be flaky. 1099 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceConnectionCompleted,
1059 EXPECT_EQ_WAIT( 1100 initiating_client_->ice_connection_state(),
1060 webrtc::PeerConnectionInterface::kIceConnectionCompleted, 1101 kMaxWaitForFramesMs);
1061 initiating_client_->ice_connection_state(), 1102 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceConnectionConnected,
1062 kMaxWaitForFramesMs); 1103 receiving_client_->ice_connection_state(),
1063 EXPECT_EQ_WAIT( 1104 kMaxWaitForFramesMs);
1064 webrtc::PeerConnectionInterface::kIceConnectionConnected,
1065 receiving_client_->ice_connection_state(),
1066 kMaxWaitForFramesMs);
1067 }
1068 1105
1069 if (initiating_client_->can_receive_audio() || 1106 // The ICE gathering state should end up in kIceGatheringComplete,
1070 initiating_client_->can_receive_video()) { 1107 // but there's a bug that prevents this at the moment, and the state
1071 // The initiating client can receive media, so it must produce candidates 1108 // machine is being updated by the WEBRTC WG.
1072 // that will serve as destinations for that media. 1109 // TODO(hta): Update this check when spec revisions finish.
1073 // TODO(bemasc): Understand why the state is not already Complete here, as 1110 EXPECT_NE(webrtc::PeerConnectionInterface::kIceGatheringNew,
1074 // seems to be the case for the receiving client. This may indicate a bug 1111 initiating_client_->ice_gathering_state());
1075 // in the ICE gathering system. 1112 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceGatheringComplete,
1076 EXPECT_NE(webrtc::PeerConnectionInterface::kIceGatheringNew, 1113 receiving_client_->ice_gathering_state(),
1077 initiating_client_->ice_gathering_state()); 1114 kMaxWaitForFramesMs);
1078 }
1079 if (receiving_client_->can_receive_audio() ||
1080 receiving_client_->can_receive_video()) {
1081 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceGatheringComplete,
1082 receiving_client_->ice_gathering_state(),
1083 kMaxWaitForFramesMs);
1084 }
1085 1115
1086 EXPECT_TRUE_WAIT(FramesNotPending(audio_frame_count, video_frame_count), 1116 // Check that the expected number of frames have arrived.
1117 EXPECT_TRUE_WAIT(FramesHaveArrived(audio_frame_count, video_frame_count),
1087 kMaxWaitForFramesMs); 1118 kMaxWaitForFramesMs);
1088 } 1119 }
1089 1120
1090 void SetupAndVerifyDtlsCall() { 1121 void SetupAndVerifyDtlsCall() {
1091 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1122 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1092 FakeConstraints setup_constraints; 1123 FakeConstraints setup_constraints;
1093 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1124 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1094 true); 1125 true);
1095 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1126 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1096 LocalP2PTest(); 1127 LocalP2PTest();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 LocalP2PTest(); 1237 LocalP2PTest();
1207 VerifyRenderedSize(1280, 720); 1238 VerifyRenderedSize(1280, 720);
1208 } 1239 }
1209 1240
1210 // This test sets up a call between two endpoints that are configured to use 1241 // This test sets up a call between two endpoints that are configured to use
1211 // DTLS key agreement. As a result, DTLS is negotiated and used for transport. 1242 // DTLS key agreement. As a result, DTLS is negotiated and used for transport.
1212 TEST_F(P2PTestConductor, LocalP2PTestDtls) { 1243 TEST_F(P2PTestConductor, LocalP2PTestDtls) {
1213 SetupAndVerifyDtlsCall(); 1244 SetupAndVerifyDtlsCall();
1214 } 1245 }
1215 1246
1247 // This test sets up an one-way call, with media only from initiator to
1248 // responder.
1249 TEST_F(P2PTestConductor, OneWayMediaCall) {
1250 ASSERT_TRUE(CreateTestClients());
1251 receiving_client()->set_auto_add_stream(false);
1252 LocalP2PTest();
1253 }
1254
1216 // This test sets up a audio call initially and then upgrades to audio/video, 1255 // This test sets up a audio call initially and then upgrades to audio/video,
1217 // using DTLS. 1256 // using DTLS.
1218 TEST_F(P2PTestConductor, LocalP2PTestDtlsRenegotiate) { 1257 TEST_F(P2PTestConductor, LocalP2PTestDtlsRenegotiate) {
1219 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1258 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1220 FakeConstraints setup_constraints; 1259 FakeConstraints setup_constraints;
1221 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1260 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1222 true); 1261 true);
1223 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1262 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1224 receiving_client()->SetReceiveAudioVideo(true, false); 1263 receiving_client()->SetReceiveAudioVideo(true, false);
1225 LocalP2PTest(); 1264 LocalP2PTest();
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
1812 initializing_client()->ice_connection_state(), 1851 initializing_client()->ice_connection_state(),
1813 kMaxWaitForFramesMs); 1852 kMaxWaitForFramesMs);
1814 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceConnectionConnected, 1853 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceConnectionConnected,
1815 receiving_client()->ice_connection_state(), 1854 receiving_client()->ice_connection_state(),
1816 kMaxWaitForFramesMs); 1855 kMaxWaitForFramesMs);
1817 // Now set the tracks, and expect frames to immediately start flowing. 1856 // Now set the tracks, and expect frames to immediately start flowing.
1818 EXPECT_TRUE( 1857 EXPECT_TRUE(
1819 audio_sender->SetTrack(initializing_client()->CreateLocalAudioTrack(""))); 1858 audio_sender->SetTrack(initializing_client()->CreateLocalAudioTrack("")));
1820 EXPECT_TRUE( 1859 EXPECT_TRUE(
1821 video_sender->SetTrack(initializing_client()->CreateLocalVideoTrack(""))); 1860 video_sender->SetTrack(initializing_client()->CreateLocalVideoTrack("")));
1822 EXPECT_TRUE_WAIT(FramesNotPending(kEndAudioFrameCount, kEndVideoFrameCount), 1861 EXPECT_TRUE_WAIT(FramesHaveArrived(kEndAudioFrameCount, kEndVideoFrameCount),
1823 kMaxWaitForFramesMs); 1862 kMaxWaitForFramesMs);
1824 } 1863 }
1825 1864
1826 class IceServerParsingTest : public testing::Test { 1865 class IceServerParsingTest : public testing::Test {
1827 public: 1866 public:
1828 // Convenience for parsing a single URL. 1867 // Convenience for parsing a single URL.
1829 bool ParseUrl(const std::string& url) { 1868 bool ParseUrl(const std::string& url) {
1830 return ParseUrl(url, std::string(), std::string()); 1869 return ParseUrl(url, std::string(), std::string());
1831 } 1870 }
1832 1871
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
2006 PeerConnectionInterface::IceServer server; 2045 PeerConnectionInterface::IceServer server;
2007 server.urls.push_back("turn:hostname"); 2046 server.urls.push_back("turn:hostname");
2008 server.urls.push_back("turn:hostname2"); 2047 server.urls.push_back("turn:hostname2");
2009 servers.push_back(server); 2048 servers.push_back(server);
2010 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); 2049 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_));
2011 EXPECT_EQ(2U, turn_servers_.size()); 2050 EXPECT_EQ(2U, turn_servers_.size());
2012 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); 2051 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority);
2013 } 2052 }
2014 2053
2015 #endif // if !defined(THREAD_SANITIZER) 2054 #endif // if !defined(THREAD_SANITIZER)
2055
2056 } // namespace
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698