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

Side by Side Diff: webrtc/pc/channel_unittest.cc

Issue 2815513012: Negotiate the same SRTP crypto suites for every DTLS association formed. (Closed)
Patch Set: Merge with master Created 3 years, 8 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/pc/channel.cc ('k') | webrtc/pc/channelmanager.h » ('j') | 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 2009 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2009 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 // Base class for Voice/Video/RtpDataChannel tests 90 // Base class for Voice/Video/RtpDataChannel tests
91 template<class T> 91 template<class T>
92 class ChannelTest : public testing::Test, public sigslot::has_slots<> { 92 class ChannelTest : public testing::Test, public sigslot::has_slots<> {
93 public: 93 public:
94 enum Flags { 94 enum Flags {
95 RTCP_MUX = 0x1, 95 RTCP_MUX = 0x1,
96 RTCP_MUX_REQUIRED = 0x2, 96 RTCP_MUX_REQUIRED = 0x2,
97 SECURE = 0x4, 97 SECURE = 0x4,
98 SSRC_MUX = 0x8, 98 SSRC_MUX = 0x8,
99 DTLS = 0x10, 99 DTLS = 0x10,
100 GCM_CIPHER = 0x20,
101 // Use BaseChannel with PacketTransportInternal rather than 100 // Use BaseChannel with PacketTransportInternal rather than
102 // DtlsTransportInternal. 101 // DtlsTransportInternal.
103 RAW_PACKET_TRANSPORT = 0x40, 102 RAW_PACKET_TRANSPORT = 0x20,
104 }; 103 };
105 104
106 ChannelTest(bool verify_playout, 105 ChannelTest(bool verify_playout,
107 rtc::ArrayView<const uint8_t> rtp_data, 106 rtc::ArrayView<const uint8_t> rtp_data,
108 rtc::ArrayView<const uint8_t> rtcp_data, 107 rtc::ArrayView<const uint8_t> rtcp_data,
109 NetworkIsWorker network_is_worker) 108 NetworkIsWorker network_is_worker)
110 : verify_playout_(verify_playout), 109 : verify_playout_(verify_playout),
111 rtp_packet_(rtp_data.data(), rtp_data.size()), 110 rtp_packet_(rtp_data.data(), rtp_data.size()),
112 rtcp_packet_(rtcp_data.data(), rtcp_data.size()) { 111 rtcp_packet_(rtcp_data.data(), rtcp_data.size()) {
113 if (network_is_worker == NetworkIsWorker::Yes) { 112 if (network_is_worker == NetworkIsWorker::Yes) {
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 cricket::DtlsTransportInternal* fake_rtp_dtls_transport, 255 cricket::DtlsTransportInternal* fake_rtp_dtls_transport,
257 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport, 256 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport,
258 rtc::PacketTransportInternal* fake_rtp_packet_transport, 257 rtc::PacketTransportInternal* fake_rtp_packet_transport,
259 rtc::PacketTransportInternal* fake_rtcp_packet_transport, 258 rtc::PacketTransportInternal* fake_rtcp_packet_transport,
260 int flags) { 259 int flags) {
261 rtc::Thread* signaling_thread = rtc::Thread::Current(); 260 rtc::Thread* signaling_thread = rtc::Thread::Current();
262 typename T::Channel* channel = new typename T::Channel( 261 typename T::Channel* channel = new typename T::Channel(
263 worker_thread, network_thread, signaling_thread, engine, ch, 262 worker_thread, network_thread, signaling_thread, engine, ch,
264 cricket::CN_AUDIO, (flags & RTCP_MUX_REQUIRED) != 0, 263 cricket::CN_AUDIO, (flags & RTCP_MUX_REQUIRED) != 0,
265 (flags & SECURE) != 0); 264 (flags & SECURE) != 0);
266 rtc::CryptoOptions crypto_options;
267 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0;
268 channel->SetCryptoOptions(crypto_options);
269 if (!channel->NeedsRtcpTransport()) { 265 if (!channel->NeedsRtcpTransport()) {
270 fake_rtcp_dtls_transport = nullptr; 266 fake_rtcp_dtls_transport = nullptr;
271 } 267 }
272 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, 268 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
273 fake_rtp_packet_transport, 269 fake_rtp_packet_transport,
274 fake_rtcp_packet_transport)) { 270 fake_rtcp_packet_transport)) {
275 delete channel; 271 delete channel;
276 channel = NULL; 272 channel = NULL;
277 } 273 }
278 return channel; 274 return channel;
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 } 458 }
463 bool CheckNoRtp2() { 459 bool CheckNoRtp2() {
464 return media_channel2_->CheckNoRtp(); 460 return media_channel2_->CheckNoRtp();
465 } 461 }
466 bool CheckNoRtcp1() { 462 bool CheckNoRtcp1() {
467 return media_channel1_->CheckNoRtcp(); 463 return media_channel1_->CheckNoRtcp();
468 } 464 }
469 bool CheckNoRtcp2() { 465 bool CheckNoRtcp2() {
470 return media_channel2_->CheckNoRtcp(); 466 return media_channel2_->CheckNoRtcp();
471 } 467 }
472 // Checks that the channel is using GCM iff GCM_CIPHER is set in flags.
473 // Returns true if so.
474 bool CheckGcmCipher(typename T::Channel* channel, int flags) {
475 int suite;
476 cricket::FakeDtlsTransport* transport =
477 (channel == channel1_.get()) ? fake_rtp_dtls_transport1_.get()
478 : fake_rtp_dtls_transport2_.get();
479 RTC_DCHECK(transport);
480 if (!transport->GetSrtpCryptoSuite(&suite)) {
481 return false;
482 }
483
484 if (flags & GCM_CIPHER) {
485 return rtc::IsGcmCryptoSuite(suite);
486 } else {
487 return (suite != rtc::SRTP_INVALID_CRYPTO_SUITE &&
488 !rtc::IsGcmCryptoSuite(suite));
489 }
490 }
491 468
492 void CreateContent(int flags, 469 void CreateContent(int flags,
493 const cricket::AudioCodec& audio_codec, 470 const cricket::AudioCodec& audio_codec,
494 const cricket::VideoCodec& video_codec, 471 const cricket::VideoCodec& video_codec,
495 typename T::Content* content) { 472 typename T::Content* content) {
496 // overridden in specialized classes 473 // overridden in specialized classes
497 } 474 }
498 void CopyContent(const typename T::Content& source, 475 void CopyContent(const typename T::Content& source,
499 typename T::Content* content) { 476 typename T::Content* content) {
500 // overridden in specialized classes 477 // overridden in specialized classes
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 EXPECT_FALSE(channel1_->NeedsRtcpTransport()); 1309 EXPECT_FALSE(channel1_->NeedsRtcpTransport());
1333 EXPECT_EQ(1, rtcp_mux_activated_callbacks1_); 1310 EXPECT_EQ(1, rtcp_mux_activated_callbacks1_);
1334 SendRtcp1(); 1311 SendRtcp1();
1335 SendRtcp2(); 1312 SendRtcp2();
1336 WaitForThreads(); 1313 WaitForThreads();
1337 EXPECT_TRUE(CheckRtcp2()); 1314 EXPECT_TRUE(CheckRtcp2());
1338 EXPECT_TRUE(CheckRtcp1()); 1315 EXPECT_TRUE(CheckRtcp1());
1339 } 1316 }
1340 1317
1341 // Test that we properly send SRTP with RTCP in both directions. 1318 // Test that we properly send SRTP with RTCP in both directions.
1342 // You can pass in DTLS, RTCP_MUX, GCM_CIPHER and RAW_PACKET_TRANSPORT as 1319 // You can pass in DTLS, RTCP_MUX, and RAW_PACKET_TRANSPORT as flags.
1343 // flags.
1344 void SendSrtpToSrtp(int flags1_in = 0, int flags2_in = 0) { 1320 void SendSrtpToSrtp(int flags1_in = 0, int flags2_in = 0) {
1345 RTC_CHECK((flags1_in & 1321 RTC_CHECK((flags1_in & ~(RTCP_MUX | DTLS | RAW_PACKET_TRANSPORT)) == 0);
1346 ~(RTCP_MUX | DTLS | GCM_CIPHER | RAW_PACKET_TRANSPORT)) == 0); 1322 RTC_CHECK((flags2_in & ~(RTCP_MUX | DTLS | RAW_PACKET_TRANSPORT)) == 0);
1347 RTC_CHECK((flags2_in &
1348 ~(RTCP_MUX | DTLS | GCM_CIPHER | RAW_PACKET_TRANSPORT)) == 0);
1349 1323
1350 int flags1 = SECURE | flags1_in; 1324 int flags1 = SECURE | flags1_in;
1351 int flags2 = SECURE | flags2_in; 1325 int flags2 = SECURE | flags2_in;
1352 bool dtls1 = !!(flags1_in & DTLS); 1326 bool dtls1 = !!(flags1_in & DTLS);
1353 bool dtls2 = !!(flags2_in & DTLS); 1327 bool dtls2 = !!(flags2_in & DTLS);
1354 CreateChannels(flags1, flags2); 1328 CreateChannels(flags1, flags2);
1355 EXPECT_FALSE(channel1_->secure()); 1329 EXPECT_FALSE(channel1_->secure());
1356 EXPECT_FALSE(channel2_->secure()); 1330 EXPECT_FALSE(channel2_->secure());
1357 EXPECT_TRUE(SendInitiate()); 1331 EXPECT_TRUE(SendInitiate());
1358 WaitForThreads(); 1332 WaitForThreads();
1359 EXPECT_TRUE(channel1_->writable()); 1333 EXPECT_TRUE(channel1_->writable());
1360 EXPECT_TRUE(channel2_->writable()); 1334 EXPECT_TRUE(channel2_->writable());
1361 EXPECT_TRUE(SendAccept()); 1335 EXPECT_TRUE(SendAccept());
1362 EXPECT_TRUE(channel1_->secure()); 1336 EXPECT_TRUE(channel1_->secure());
1363 EXPECT_TRUE(channel2_->secure()); 1337 EXPECT_TRUE(channel2_->secure());
1364 EXPECT_EQ(dtls1 && dtls2, channel1_->secure_dtls()); 1338 EXPECT_EQ(dtls1 && dtls2, channel1_->secure_dtls());
1365 EXPECT_EQ(dtls1 && dtls2, channel2_->secure_dtls()); 1339 EXPECT_EQ(dtls1 && dtls2, channel2_->secure_dtls());
1366 // We can only query the negotiated cipher suite for DTLS-SRTP transport
1367 // channels.
1368 if (dtls1 && dtls2) {
1369 // A GCM cipher is only used if both channels support GCM ciphers.
1370 int common_gcm_flags = flags1 & flags2 & GCM_CIPHER;
1371 EXPECT_TRUE(CheckGcmCipher(channel1_.get(), common_gcm_flags));
1372 EXPECT_TRUE(CheckGcmCipher(channel2_.get(), common_gcm_flags));
1373 }
1374 SendRtp1(); 1340 SendRtp1();
1375 SendRtp2(); 1341 SendRtp2();
1376 SendRtcp1(); 1342 SendRtcp1();
1377 SendRtcp2(); 1343 SendRtcp2();
1378 WaitForThreads(); 1344 WaitForThreads();
1379 EXPECT_TRUE(CheckRtp1()); 1345 EXPECT_TRUE(CheckRtp1());
1380 EXPECT_TRUE(CheckRtp2()); 1346 EXPECT_TRUE(CheckRtp2());
1381 EXPECT_TRUE(CheckNoRtp1()); 1347 EXPECT_TRUE(CheckNoRtp1());
1382 EXPECT_TRUE(CheckNoRtp2()); 1348 EXPECT_TRUE(CheckNoRtp2());
1383 EXPECT_TRUE(CheckRtcp1()); 1349 EXPECT_TRUE(CheckRtcp1());
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
2117 cricket::FakeVideoMediaChannel* ch, 2083 cricket::FakeVideoMediaChannel* ch,
2118 cricket::DtlsTransportInternal* fake_rtp_dtls_transport, 2084 cricket::DtlsTransportInternal* fake_rtp_dtls_transport,
2119 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport, 2085 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport,
2120 rtc::PacketTransportInternal* fake_rtp_packet_transport, 2086 rtc::PacketTransportInternal* fake_rtp_packet_transport,
2121 rtc::PacketTransportInternal* fake_rtcp_packet_transport, 2087 rtc::PacketTransportInternal* fake_rtcp_packet_transport,
2122 int flags) { 2088 int flags) {
2123 rtc::Thread* signaling_thread = rtc::Thread::Current(); 2089 rtc::Thread* signaling_thread = rtc::Thread::Current();
2124 cricket::VideoChannel* channel = new cricket::VideoChannel( 2090 cricket::VideoChannel* channel = new cricket::VideoChannel(
2125 worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO, 2091 worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO,
2126 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); 2092 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0);
2127 rtc::CryptoOptions crypto_options;
2128 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0;
2129 channel->SetCryptoOptions(crypto_options);
2130 if (!channel->NeedsRtcpTransport()) { 2093 if (!channel->NeedsRtcpTransport()) {
2131 fake_rtcp_dtls_transport = nullptr; 2094 fake_rtcp_dtls_transport = nullptr;
2132 } 2095 }
2133 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, 2096 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
2134 fake_rtp_packet_transport, fake_rtcp_packet_transport)) { 2097 fake_rtp_packet_transport, fake_rtcp_packet_transport)) {
2135 delete channel; 2098 delete channel;
2136 channel = NULL; 2099 channel = NULL;
2137 } 2100 }
2138 return channel; 2101 return channel;
2139 } 2102 }
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
2342 } 2305 }
2343 2306
2344 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToSrtp) { 2307 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToSrtp) {
2345 Base::SendSrtpToSrtp(DTLS, 0); 2308 Base::SendSrtpToSrtp(DTLS, 0);
2346 } 2309 }
2347 2310
2348 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtp) { 2311 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtp) {
2349 Base::SendSrtpToSrtp(DTLS, DTLS); 2312 Base::SendSrtpToSrtp(DTLS, DTLS);
2350 } 2313 }
2351 2314
2352 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtpGcmBoth) {
2353 Base::SendSrtpToSrtp(DTLS | GCM_CIPHER, DTLS | GCM_CIPHER);
2354 }
2355
2356 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtpGcmOne) {
2357 Base::SendSrtpToSrtp(DTLS | GCM_CIPHER, DTLS);
2358 }
2359
2360 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtpGcmTwo) {
2361 Base::SendSrtpToSrtp(DTLS, DTLS | GCM_CIPHER);
2362 }
2363
2364 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtpRtcpMux) { 2315 TEST_F(VoiceChannelSingleThreadTest, SendDtlsSrtpToDtlsSrtpRtcpMux) {
2365 Base::SendSrtpToSrtp(DTLS | RTCP_MUX, DTLS | RTCP_MUX); 2316 Base::SendSrtpToSrtp(DTLS | RTCP_MUX, DTLS | RTCP_MUX);
2366 } 2317 }
2367 2318
2368 // Test using the channel with a raw packet interface, as opposed to a DTLS 2319 // Test using the channel with a raw packet interface, as opposed to a DTLS
2369 // transport interface. 2320 // transport interface.
2370 TEST_F(VoiceChannelSingleThreadTest, SendSrtpToSrtpWithRawPacketTransport) { 2321 TEST_F(VoiceChannelSingleThreadTest, SendSrtpToSrtpWithRawPacketTransport) {
2371 Base::SendSrtpToSrtp(RAW_PACKET_TRANSPORT, RAW_PACKET_TRANSPORT); 2322 Base::SendSrtpToSrtp(RAW_PACKET_TRANSPORT, RAW_PACKET_TRANSPORT);
2372 } 2323 }
2373 2324
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
2675 } 2626 }
2676 2627
2677 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToSrtp) { 2628 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToSrtp) {
2678 Base::SendSrtpToSrtp(DTLS, 0); 2629 Base::SendSrtpToSrtp(DTLS, 0);
2679 } 2630 }
2680 2631
2681 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtp) { 2632 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtp) {
2682 Base::SendSrtpToSrtp(DTLS, DTLS); 2633 Base::SendSrtpToSrtp(DTLS, DTLS);
2683 } 2634 }
2684 2635
2685 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtpGcmBoth) {
2686 Base::SendSrtpToSrtp(DTLS | GCM_CIPHER, DTLS | GCM_CIPHER);
2687 }
2688
2689 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtpGcmOne) {
2690 Base::SendSrtpToSrtp(DTLS | GCM_CIPHER, DTLS);
2691 }
2692
2693 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtpGcmTwo) {
2694 Base::SendSrtpToSrtp(DTLS, DTLS | GCM_CIPHER);
2695 }
2696
2697 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtpRtcpMux) { 2636 TEST_F(VoiceChannelDoubleThreadTest, SendDtlsSrtpToDtlsSrtpRtcpMux) {
2698 Base::SendSrtpToSrtp(DTLS | RTCP_MUX, DTLS | RTCP_MUX); 2637 Base::SendSrtpToSrtp(DTLS | RTCP_MUX, DTLS | RTCP_MUX);
2699 } 2638 }
2700 2639
2701 // Test using the channel with a raw packet interface, as opposed to a DTLS 2640 // Test using the channel with a raw packet interface, as opposed to a DTLS
2702 // transport interface. 2641 // transport interface.
2703 TEST_F(VoiceChannelDoubleThreadTest, SendSrtpToSrtpWithRawPacketTransport) { 2642 TEST_F(VoiceChannelDoubleThreadTest, SendSrtpToSrtpWithRawPacketTransport) {
2704 Base::SendSrtpToSrtp(RAW_PACKET_TRANSPORT, RAW_PACKET_TRANSPORT); 2643 Base::SendSrtpToSrtp(RAW_PACKET_TRANSPORT, RAW_PACKET_TRANSPORT);
2705 } 2644 }
2706 2645
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
3361 cricket::FakeDataMediaChannel* ch, 3300 cricket::FakeDataMediaChannel* ch,
3362 cricket::DtlsTransportInternal* fake_rtp_dtls_transport, 3301 cricket::DtlsTransportInternal* fake_rtp_dtls_transport,
3363 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport, 3302 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport,
3364 rtc::PacketTransportInternal* fake_rtp_packet_transport, 3303 rtc::PacketTransportInternal* fake_rtp_packet_transport,
3365 rtc::PacketTransportInternal* fake_rtcp_packet_transport, 3304 rtc::PacketTransportInternal* fake_rtcp_packet_transport,
3366 int flags) { 3305 int flags) {
3367 rtc::Thread* signaling_thread = rtc::Thread::Current(); 3306 rtc::Thread* signaling_thread = rtc::Thread::Current();
3368 cricket::RtpDataChannel* channel = new cricket::RtpDataChannel( 3307 cricket::RtpDataChannel* channel = new cricket::RtpDataChannel(
3369 worker_thread, network_thread, signaling_thread, ch, cricket::CN_DATA, 3308 worker_thread, network_thread, signaling_thread, ch, cricket::CN_DATA,
3370 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); 3309 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0);
3371 rtc::CryptoOptions crypto_options;
3372 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0;
3373 channel->SetCryptoOptions(crypto_options);
3374 if (!channel->NeedsRtcpTransport()) { 3310 if (!channel->NeedsRtcpTransport()) {
3375 fake_rtcp_dtls_transport = nullptr; 3311 fake_rtcp_dtls_transport = nullptr;
3376 } 3312 }
3377 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, 3313 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
3378 fake_rtp_packet_transport, fake_rtcp_packet_transport)) { 3314 fake_rtp_packet_transport, fake_rtcp_packet_transport)) {
3379 delete channel; 3315 delete channel;
3380 channel = NULL; 3316 channel = NULL;
3381 } 3317 }
3382 return channel; 3318 return channel;
3383 } 3319 }
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
3785 ASSERT_TRUE(voice_channel_.Init_w(nullptr, nullptr, &fake_rtp_dtls_transport_, 3721 ASSERT_TRUE(voice_channel_.Init_w(nullptr, nullptr, &fake_rtp_dtls_transport_,
3786 &fake_rtcp_dtls_transport_)); 3722 &fake_rtcp_dtls_transport_));
3787 EXPECT_DEATH(voice_channel_.SetTransports(&fake_rtp_dtls_transport_, 3723 EXPECT_DEATH(voice_channel_.SetTransports(&fake_rtp_dtls_transport_,
3788 &fake_rtp_dtls_transport_), 3724 &fake_rtp_dtls_transport_),
3789 ""); 3725 "");
3790 } 3726 }
3791 3727
3792 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) 3728 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
3793 3729
3794 // TODO(pthatcher): TestSetReceiver? 3730 // TODO(pthatcher): TestSetReceiver?
OLDNEW
« no previous file with comments | « webrtc/pc/channel.cc ('k') | webrtc/pc/channelmanager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698