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

Side by Side Diff: talk/app/webrtc/peerconnection_unittest.cc

Issue 1453523002: Allow remote fingerprint update during a call (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Remove empty line Created 5 years 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
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 138
139 protected: 139 protected:
140 SignalingMessageReceiver() {} 140 SignalingMessageReceiver() {}
141 virtual ~SignalingMessageReceiver() {} 141 virtual ~SignalingMessageReceiver() {}
142 }; 142 };
143 143
144 class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, 144 class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
145 public SignalingMessageReceiver, 145 public SignalingMessageReceiver,
146 public ObserverInterface { 146 public ObserverInterface {
147 public: 147 public:
148 static PeerConnectionTestClient* CreateClient( 148 static PeerConnectionTestClient* CreateClientWithKeySpecified(
149 const std::string& id, 149 const std::string& id,
150 const MediaConstraintsInterface* constraints, 150 const MediaConstraintsInterface* constraints,
151 const PeerConnectionFactory::Options* options) { 151 const PeerConnectionFactory::Options* options,
152 bool use_alternate_key) {
juberti 2015/12/02 00:29:43 Instead of using a magic bool value, it seems like
guoweis_webrtc 2015/12/02 18:44:15 Will do.
guoweis_webrtc 2015/12/03 22:59:41 Done.
152 PeerConnectionTestClient* client(new PeerConnectionTestClient(id)); 153 PeerConnectionTestClient* client(new PeerConnectionTestClient(id));
153 if (!client->Init(constraints, options)) { 154 if (!client->Init(constraints, options, use_alternate_key)) {
154 delete client; 155 delete client;
155 return nullptr; 156 return nullptr;
156 } 157 }
157 return client; 158 return client;
158 } 159 }
159 160
161 static PeerConnectionTestClient* CreateClient(
162 const std::string& id,
163 const MediaConstraintsInterface* constraints,
164 const PeerConnectionFactory::Options* options) {
165 return CreateClientWithKeySpecified(id, constraints, options, false);
166 }
167
160 ~PeerConnectionTestClient() { 168 ~PeerConnectionTestClient() {
161 while (!fake_video_renderers_.empty()) { 169 while (!fake_video_renderers_.empty()) {
162 RenderMap::iterator it = fake_video_renderers_.begin(); 170 RenderMap::iterator it = fake_video_renderers_.begin();
163 delete it->second; 171 delete it->second;
164 fake_video_renderers_.erase(it); 172 fake_video_renderers_.erase(it);
165 } 173 }
166 } 174 }
167 175
168 void Negotiate() { Negotiate(true, true); } 176 void Negotiate() { Negotiate(true, true); }
169 177
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 bool completed() const { return completed_; } 706 bool completed() const { return completed_; }
699 707
700 private: 708 private:
701 bool completed_; 709 bool completed_;
702 std::vector<std::string> tones_; 710 std::vector<std::string> tones_;
703 }; 711 };
704 712
705 explicit PeerConnectionTestClient(const std::string& id) : id_(id) {} 713 explicit PeerConnectionTestClient(const std::string& id) : id_(id) {}
706 714
707 bool Init(const MediaConstraintsInterface* constraints, 715 bool Init(const MediaConstraintsInterface* constraints,
708 const PeerConnectionFactory::Options* options) { 716 const PeerConnectionFactory::Options* options,
717 bool use_alternate_key) {
709 EXPECT_TRUE(!peer_connection_); 718 EXPECT_TRUE(!peer_connection_);
710 EXPECT_TRUE(!peer_connection_factory_); 719 EXPECT_TRUE(!peer_connection_factory_);
711 allocator_factory_ = webrtc::FakePortAllocatorFactory::Create(); 720 allocator_factory_ = webrtc::FakePortAllocatorFactory::Create();
712 if (!allocator_factory_) { 721 if (!allocator_factory_) {
713 return false; 722 return false;
714 } 723 }
715 fake_audio_capture_module_ = FakeAudioCaptureModule::Create(); 724 fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
716 725
717 if (fake_audio_capture_module_ == nullptr) { 726 if (fake_audio_capture_module_ == nullptr) {
718 return false; 727 return false;
719 } 728 }
720 fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory(); 729 fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory();
721 fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory(); 730 fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory();
722 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( 731 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
723 rtc::Thread::Current(), rtc::Thread::Current(), 732 rtc::Thread::Current(), rtc::Thread::Current(),
724 fake_audio_capture_module_, fake_video_encoder_factory_, 733 fake_audio_capture_module_, fake_video_encoder_factory_,
725 fake_video_decoder_factory_); 734 fake_video_decoder_factory_);
726 if (!peer_connection_factory_) { 735 if (!peer_connection_factory_) {
727 return false; 736 return false;
728 } 737 }
729 if (options) { 738 if (options) {
730 peer_connection_factory_->SetOptions(*options); 739 peer_connection_factory_->SetOptions(*options);
731 } 740 }
732 peer_connection_ = CreatePeerConnection(allocator_factory_.get(), 741 peer_connection_ = CreatePeerConnection(allocator_factory_.get(),
733 constraints); 742 constraints, use_alternate_key);
734 return peer_connection_.get() != nullptr; 743 return peer_connection_.get() != nullptr;
735 } 744 }
736 745
737 rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection( 746 rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(
738 webrtc::PortAllocatorFactoryInterface* factory, 747 webrtc::PortAllocatorFactoryInterface* factory,
739 const MediaConstraintsInterface* constraints) { 748 const MediaConstraintsInterface* constraints,
749 bool use_alternate_key) {
740 // CreatePeerConnection with IceServers. 750 // CreatePeerConnection with IceServers.
741 webrtc::PeerConnectionInterface::IceServers ice_servers; 751 webrtc::PeerConnectionInterface::IceServers ice_servers;
742 webrtc::PeerConnectionInterface::IceServer ice_server; 752 webrtc::PeerConnectionInterface::IceServer ice_server;
743 ice_server.uri = "stun:stun.l.google.com:19302"; 753 ice_server.uri = "stun:stun.l.google.com:19302";
744 ice_servers.push_back(ice_server); 754 ice_servers.push_back(ice_server);
745 755
746 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store( 756 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store(
747 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() 757 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore()
748 : nullptr); 758 : nullptr);
759
760 if (use_alternate_key) {
761 dtls_identity_store->use_alternate_key();
762 } else {
763 dtls_identity_store->use_original_key();
764 }
749 return peer_connection_factory_->CreatePeerConnection( 765 return peer_connection_factory_->CreatePeerConnection(
750 ice_servers, constraints, factory, dtls_identity_store.Pass(), this); 766 ice_servers, constraints, factory, dtls_identity_store.Pass(), this);
751 } 767 }
752 768
753 void HandleIncomingOffer(const std::string& msg) { 769 void HandleIncomingOffer(const std::string& msg) {
754 LOG(INFO) << id_ << "HandleIncomingOffer "; 770 LOG(INFO) << id_ << "HandleIncomingOffer ";
755 if (NumberOfLocalMediaStreams() == 0 && auto_add_stream_) { 771 if (NumberOfLocalMediaStreams() == 0 && auto_add_stream_) {
756 // If we are not sending any streams ourselves it is time to add some. 772 // If we are not sending any streams ourselves it is time to add some.
757 AddMediaStream(true, true); 773 AddMediaStream(true, true);
758 } 774 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 } 988 }
973 989
974 bool CreateTestClients() { return CreateTestClients(nullptr, nullptr); } 990 bool CreateTestClients() { return CreateTestClients(nullptr, nullptr); }
975 991
976 bool CreateTestClients(MediaConstraintsInterface* init_constraints, 992 bool CreateTestClients(MediaConstraintsInterface* init_constraints,
977 MediaConstraintsInterface* recv_constraints) { 993 MediaConstraintsInterface* recv_constraints) {
978 return CreateTestClients(init_constraints, nullptr, recv_constraints, 994 return CreateTestClients(init_constraints, nullptr, recv_constraints,
979 nullptr); 995 nullptr);
980 } 996 }
981 997
998 void SetSignalingReceivers() {
999 initiating_client_->set_signaling_message_receiver(receiving_client_.get());
1000 receiving_client_->set_signaling_message_receiver(initiating_client_.get());
1001 }
1002
982 bool CreateTestClients(MediaConstraintsInterface* init_constraints, 1003 bool CreateTestClients(MediaConstraintsInterface* init_constraints,
983 PeerConnectionFactory::Options* init_options, 1004 PeerConnectionFactory::Options* init_options,
984 MediaConstraintsInterface* recv_constraints, 1005 MediaConstraintsInterface* recv_constraints,
985 PeerConnectionFactory::Options* recv_options) { 1006 PeerConnectionFactory::Options* recv_options) {
986 initiating_client_.reset(PeerConnectionTestClient::CreateClient( 1007 initiating_client_.reset(PeerConnectionTestClient::CreateClient(
987 "Caller: ", init_constraints, init_options)); 1008 "Caller: ", init_constraints, init_options));
988 receiving_client_.reset(PeerConnectionTestClient::CreateClient( 1009 receiving_client_.reset(PeerConnectionTestClient::CreateClient(
989 "Callee: ", recv_constraints, recv_options)); 1010 "Callee: ", recv_constraints, recv_options));
990 if (!initiating_client_ || !receiving_client_) { 1011 if (!initiating_client_ || !receiving_client_) {
991 return false; 1012 return false;
992 } 1013 }
993 initiating_client_->set_signaling_message_receiver(receiving_client_.get()); 1014 SetSignalingReceivers();
994 receiving_client_->set_signaling_message_receiver(initiating_client_.get());
995 return true; 1015 return true;
996 } 1016 }
997 1017
998 void SetVideoConstraints(const webrtc::FakeConstraints& init_constraints, 1018 void SetVideoConstraints(const webrtc::FakeConstraints& init_constraints,
999 const webrtc::FakeConstraints& recv_constraints) { 1019 const webrtc::FakeConstraints& recv_constraints) {
1000 initiating_client_->SetVideoConstraints(init_constraints); 1020 initiating_client_->SetVideoConstraints(init_constraints);
1001 receiving_client_->SetVideoConstraints(recv_constraints); 1021 receiving_client_->SetVideoConstraints(recv_constraints);
1002 } 1022 }
1003 1023
1004 void EnableVideoDecoderFactory() { 1024 void EnableVideoDecoderFactory() {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 receiving_client_->can_receive_video()) { 1081 receiving_client_->can_receive_video()) {
1062 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceGatheringComplete, 1082 EXPECT_EQ_WAIT(webrtc::PeerConnectionInterface::kIceGatheringComplete,
1063 receiving_client_->ice_gathering_state(), 1083 receiving_client_->ice_gathering_state(),
1064 kMaxWaitForFramesMs); 1084 kMaxWaitForFramesMs);
1065 } 1085 }
1066 1086
1067 EXPECT_TRUE_WAIT(FramesNotPending(audio_frame_count, video_frame_count), 1087 EXPECT_TRUE_WAIT(FramesNotPending(audio_frame_count, video_frame_count),
1068 kMaxWaitForFramesMs); 1088 kMaxWaitForFramesMs);
1069 } 1089 }
1070 1090
1091 void SetupAndVerifyDtlsCall() {
1092 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1093 FakeConstraints setup_constraints;
1094 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1095 true);
1096 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1097 LocalP2PTest();
1098 VerifyRenderedSize(640, 480);
1099 }
1100
1101 PeerConnectionTestClient* CreateDtlsClientWithAlternateKey() {
1102 FakeConstraints setup_constraints;
1103 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1104 true);
1105
1106 // Make sure the new client is using a different certificate.
1107 return PeerConnectionTestClient::CreateClientWithKeySpecified(
1108 "New Peer: ", &setup_constraints, nullptr, true);
1109 }
1110
1071 void SendRtpData(webrtc::DataChannelInterface* dc, const std::string& data) { 1111 void SendRtpData(webrtc::DataChannelInterface* dc, const std::string& data) {
1072 // Messages may get lost on the unreliable DataChannel, so we send multiple 1112 // Messages may get lost on the unreliable DataChannel, so we send multiple
1073 // times to avoid test flakiness. 1113 // times to avoid test flakiness.
1074 static const size_t kSendAttempts = 5; 1114 static const size_t kSendAttempts = 5;
1075 1115
1076 for (size_t i = 0; i < kSendAttempts; ++i) { 1116 for (size_t i = 0; i < kSendAttempts; ++i) {
1077 dc->Send(DataBuffer(data)); 1117 dc->Send(DataBuffer(data));
1078 } 1118 }
1079 } 1119 }
1080 1120
1081 PeerConnectionTestClient* initializing_client() { 1121 PeerConnectionTestClient* initializing_client() {
1082 return initiating_client_.get(); 1122 return initiating_client_.get();
1083 } 1123 }
1124
1125 // Set the |initiating_client_| to the |client| passed in and return the
1126 // original |initiating_client_|.
1127 PeerConnectionTestClient* set_initializing_client(
1128 PeerConnectionTestClient* client) {
1129 PeerConnectionTestClient* old = initiating_client_.release();
1130 initiating_client_.reset(client);
1131 return old;
1132 }
1133
1084 PeerConnectionTestClient* receiving_client() { 1134 PeerConnectionTestClient* receiving_client() {
1085 return receiving_client_.get(); 1135 return receiving_client_.get();
1086 } 1136 }
1087 1137
1138 // Set the |receiving_client_| to the |client| passed in and return the
1139 // original |receiving_client_|.
1140 PeerConnectionTestClient* set_receiving_client(
1141 PeerConnectionTestClient* client) {
1142 PeerConnectionTestClient* old = receiving_client_.release();
1143 receiving_client_.reset(client);
1144 return old;
1145 }
1146
1088 private: 1147 private:
1089 rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; 1148 rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_;
1090 rtc::scoped_ptr<rtc::VirtualSocketServer> ss_; 1149 rtc::scoped_ptr<rtc::VirtualSocketServer> ss_;
1091 rtc::SocketServerScope ss_scope_; 1150 rtc::SocketServerScope ss_scope_;
1092 rtc::scoped_ptr<PeerConnectionTestClient> initiating_client_; 1151 rtc::scoped_ptr<PeerConnectionTestClient> initiating_client_;
1093 rtc::scoped_ptr<PeerConnectionTestClient> receiving_client_; 1152 rtc::scoped_ptr<PeerConnectionTestClient> receiving_client_;
1094 }; 1153 };
1095 1154
1096 // Disable for TSan v2, see 1155 // Disable for TSan v2, see
1097 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details. 1156 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 constraint.SetMandatoryMinWidth(1280); 1198 constraint.SetMandatoryMinWidth(1280);
1140 constraint.SetMandatoryMinHeight(720); 1199 constraint.SetMandatoryMinHeight(720);
1141 SetVideoConstraints(constraint, constraint); 1200 SetVideoConstraints(constraint, constraint);
1142 LocalP2PTest(); 1201 LocalP2PTest();
1143 VerifyRenderedSize(1280, 720); 1202 VerifyRenderedSize(1280, 720);
1144 } 1203 }
1145 1204
1146 // This test sets up a call between two endpoints that are configured to use 1205 // This test sets up a call between two endpoints that are configured to use
1147 // DTLS key agreement. As a result, DTLS is negotiated and used for transport. 1206 // DTLS key agreement. As a result, DTLS is negotiated and used for transport.
1148 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, LocalP2PTestDtls) { 1207 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, LocalP2PTestDtls) {
1149 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1208 SetupAndVerifyDtlsCall();
1150 FakeConstraints setup_constraints;
1151 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1152 true);
1153 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1154 LocalP2PTest();
1155 VerifyRenderedSize(640, 480);
1156 } 1209 }
1157 1210
1158 // This test sets up a audio call initially and then upgrades to audio/video, 1211 // This test sets up a audio call initially and then upgrades to audio/video,
1159 // using DTLS. 1212 // using DTLS.
1160 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsRenegotiate) { 1213 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsRenegotiate) {
1161 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1214 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1162 FakeConstraints setup_constraints; 1215 FakeConstraints setup_constraints;
1163 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1216 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1164 true); 1217 true);
1165 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1218 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1166 receiving_client()->SetReceiveAudioVideo(true, false); 1219 receiving_client()->SetReceiveAudioVideo(true, false);
1167 LocalP2PTest(); 1220 LocalP2PTest();
1168 receiving_client()->SetReceiveAudioVideo(true, true); 1221 receiving_client()->SetReceiveAudioVideo(true, true);
1169 receiving_client()->Negotiate(); 1222 receiving_client()->Negotiate();
1170 } 1223 }
1171 1224
1225 // This test sets up a call transfer to a new caller with a different DTLS
1226 // fingerprint.
1227 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsTransferCallee) {
1228 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1229 SetupAndVerifyDtlsCall();
1230
1231 // Keeping the original peer around which will still send packets to the
1232 // receiving client. These SRTP packets will be dropped.
1233 rtc::scoped_ptr<PeerConnectionTestClient> original_peer(
1234 set_initializing_client(CreateDtlsClientWithAlternateKey()));
1235
1236 SetSignalingReceivers();
1237 receiving_client()->SetExpectIceRestart(true);
1238 LocalP2PTest();
1239 VerifyRenderedSize(640, 480);
1240 }
1241
1242 // This test sets up a call transfer to a new callee with a different DTLS
1243 // fingerprint.
1244 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsTransferCaller) {
1245 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1246 SetupAndVerifyDtlsCall();
1247
1248 // Keeping the original peer around which will still send packets to the
1249 // receiving client. These SRTP packets will be dropped.
1250 rtc::scoped_ptr<PeerConnectionTestClient> original_peer(
1251 set_receiving_client(CreateDtlsClientWithAlternateKey()));
1252
1253 SetSignalingReceivers();
1254 initializing_client()->IceRestart();
1255 LocalP2PTest();
1256 VerifyRenderedSize(640, 480);
1257 }
1258
1172 // This test sets up a call between two endpoints that are configured to use 1259 // This test sets up a call between two endpoints that are configured to use
1173 // DTLS key agreement. The offerer don't support SDES. As a result, DTLS is 1260 // DTLS key agreement. The offerer don't support SDES. As a result, DTLS is
1174 // negotiated and used for transport. 1261 // negotiated and used for transport.
1175 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient, 1262 TEST_F(MAYBE_JsepPeerConnectionP2PTestClient,
1176 MAYBE_LocalP2PTestOfferDtlsButNotSdes) { 1263 MAYBE_LocalP2PTestOfferDtlsButNotSdes) {
1177 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1264 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1178 FakeConstraints setup_constraints; 1265 FakeConstraints setup_constraints;
1179 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1266 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1180 true); 1267 true);
1181 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1268 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
1883 server.urls.push_back("stun:hostname"); 1970 server.urls.push_back("stun:hostname");
1884 server.urls.push_back("turn:hostname"); 1971 server.urls.push_back("turn:hostname");
1885 servers.push_back(server); 1972 servers.push_back(server);
1886 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_configurations_, 1973 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_configurations_,
1887 &turn_configurations_)); 1974 &turn_configurations_));
1888 EXPECT_EQ(1U, stun_configurations_.size()); 1975 EXPECT_EQ(1U, stun_configurations_.size());
1889 EXPECT_EQ(1U, turn_configurations_.size()); 1976 EXPECT_EQ(1U, turn_configurations_.size());
1890 } 1977 }
1891 1978
1892 #endif // if !defined(THREAD_SANITIZER) 1979 #endif // if !defined(THREAD_SANITIZER)
OLDNEW
« no previous file with comments | « no previous file | talk/app/webrtc/test/fakedtlsidentitystore.h » ('j') | talk/session/media/channel.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698