OLD | NEW |
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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 if (network_is_worker == NetworkIsWorker::Yes) { | 113 if (network_is_worker == NetworkIsWorker::Yes) { |
114 network_thread_ = rtc::Thread::Current(); | 114 network_thread_ = rtc::Thread::Current(); |
115 } else { | 115 } else { |
116 network_thread_keeper_ = rtc::Thread::Create(); | 116 network_thread_keeper_ = rtc::Thread::Create(); |
117 network_thread_keeper_->SetName("Network", nullptr); | 117 network_thread_keeper_->SetName("Network", nullptr); |
118 network_thread_ = network_thread_keeper_.get(); | 118 network_thread_ = network_thread_keeper_.get(); |
119 } | 119 } |
120 } | 120 } |
121 | 121 |
122 void CreateChannels(int flags1, int flags2) { | 122 void CreateChannels(int flags1, int flags2) { |
123 CreateChannels(new typename T::MediaChannel(NULL, typename T::Options()), | 123 CreateChannels(new typename T::MediaChannel(nullptr, typename T::Options()), |
124 new typename T::MediaChannel(NULL, typename T::Options()), | 124 new typename T::MediaChannel(nullptr, typename T::Options()), |
125 flags1, flags2); | 125 flags1, flags2); |
126 } | 126 } |
127 void CreateChannels(typename T::MediaChannel* ch1, | 127 void CreateChannels(typename T::MediaChannel* ch1, |
128 typename T::MediaChannel* ch2, | 128 typename T::MediaChannel* ch2, |
129 int flags1, | 129 int flags1, |
130 int flags2) { | 130 int flags2) { |
131 // Network thread is started in CreateChannels, to allow the test to | 131 // Network thread is started in CreateChannels, to allow the test to |
132 // configure a fake clock before any threads are spawned and attempt to | 132 // configure a fake clock before any threads are spawned and attempt to |
133 // access the time. | 133 // access the time. |
134 if (network_thread_keeper_) { | 134 if (network_thread_keeper_) { |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 rtc::CryptoOptions crypto_options; | 266 rtc::CryptoOptions crypto_options; |
267 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; | 267 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; |
268 channel->SetCryptoOptions(crypto_options); | 268 channel->SetCryptoOptions(crypto_options); |
269 if (!channel->NeedsRtcpTransport()) { | 269 if (!channel->NeedsRtcpTransport()) { |
270 fake_rtcp_dtls_transport = nullptr; | 270 fake_rtcp_dtls_transport = nullptr; |
271 } | 271 } |
272 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, | 272 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, |
273 fake_rtp_packet_transport, | 273 fake_rtp_packet_transport, |
274 fake_rtcp_packet_transport)) { | 274 fake_rtcp_packet_transport)) { |
275 delete channel; | 275 delete channel; |
276 channel = NULL; | 276 channel = nullptr; |
277 } | 277 } |
278 return channel; | 278 return channel; |
279 } | 279 } |
280 | 280 |
281 void ConnectFakeTransports() { | 281 void ConnectFakeTransports() { |
282 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { | 282 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { |
283 bool asymmetric = false; | 283 bool asymmetric = false; |
284 // Depending on test flags, could be using DTLS or raw packet transport. | 284 // Depending on test flags, could be using DTLS or raw packet transport. |
285 if (fake_rtp_dtls_transport1_ && fake_rtp_dtls_transport2_) { | 285 if (fake_rtp_dtls_transport1_ && fake_rtp_dtls_transport2_) { |
286 fake_rtp_dtls_transport1_->SetDestination( | 286 fake_rtp_dtls_transport1_->SetDestination( |
287 fake_rtp_dtls_transport2_.get(), asymmetric); | 287 fake_rtp_dtls_transport2_.get(), asymmetric); |
288 } | 288 } |
289 if (fake_rtcp_dtls_transport1_ && fake_rtcp_dtls_transport2_) { | 289 if (fake_rtcp_dtls_transport1_ && fake_rtcp_dtls_transport2_) { |
290 fake_rtcp_dtls_transport1_->SetDestination( | 290 fake_rtcp_dtls_transport1_->SetDestination( |
291 fake_rtcp_dtls_transport2_.get(), asymmetric); | 291 fake_rtcp_dtls_transport2_.get(), asymmetric); |
292 } | 292 } |
293 if (fake_rtp_packet_transport1_ && fake_rtp_packet_transport2_) { | 293 if (fake_rtp_packet_transport1_ && fake_rtp_packet_transport2_) { |
294 fake_rtp_packet_transport1_->SetDestination( | 294 fake_rtp_packet_transport1_->SetDestination( |
295 fake_rtp_packet_transport2_.get(), asymmetric); | 295 fake_rtp_packet_transport2_.get(), asymmetric); |
296 } | 296 } |
297 if (fake_rtcp_packet_transport1_ && fake_rtcp_packet_transport2_) { | 297 if (fake_rtcp_packet_transport1_ && fake_rtcp_packet_transport2_) { |
298 fake_rtcp_packet_transport1_->SetDestination( | 298 fake_rtcp_packet_transport1_->SetDestination( |
299 fake_rtcp_packet_transport2_.get(), asymmetric); | 299 fake_rtcp_packet_transport2_.get(), asymmetric); |
300 } | 300 } |
301 }); | 301 }); |
302 } | 302 } |
303 | 303 |
304 bool SendInitiate() { | 304 bool SendInitiate() { |
305 bool result = channel1_->SetLocalContent(&local_media_content1_, | 305 bool result = |
306 CA_OFFER, NULL); | 306 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, nullptr); |
307 if (result) { | 307 if (result) { |
308 channel1_->Enable(true); | 308 channel1_->Enable(true); |
309 result = channel2_->SetRemoteContent(&remote_media_content1_, | 309 result = channel2_->SetRemoteContent(&remote_media_content1_, CA_OFFER, |
310 CA_OFFER, NULL); | 310 nullptr); |
311 if (result) { | 311 if (result) { |
312 ConnectFakeTransports(); | 312 ConnectFakeTransports(); |
313 result = channel2_->SetLocalContent(&local_media_content2_, | 313 result = channel2_->SetLocalContent(&local_media_content2_, CA_ANSWER, |
314 CA_ANSWER, NULL); | 314 nullptr); |
315 } | 315 } |
316 } | 316 } |
317 return result; | 317 return result; |
318 } | 318 } |
319 | 319 |
320 bool SendAccept() { | 320 bool SendAccept() { |
321 channel2_->Enable(true); | 321 channel2_->Enable(true); |
322 return channel1_->SetRemoteContent(&remote_media_content2_, | 322 return channel1_->SetRemoteContent(&remote_media_content2_, CA_ANSWER, |
323 CA_ANSWER, NULL); | 323 nullptr); |
324 } | 324 } |
325 | 325 |
326 bool SendOffer() { | 326 bool SendOffer() { |
327 bool result = channel1_->SetLocalContent(&local_media_content1_, | 327 bool result = |
328 CA_OFFER, NULL); | 328 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, nullptr); |
329 if (result) { | 329 if (result) { |
330 channel1_->Enable(true); | 330 channel1_->Enable(true); |
331 result = channel2_->SetRemoteContent(&remote_media_content1_, | 331 result = channel2_->SetRemoteContent(&remote_media_content1_, CA_OFFER, |
332 CA_OFFER, NULL); | 332 nullptr); |
333 } | 333 } |
334 return result; | 334 return result; |
335 } | 335 } |
336 | 336 |
337 bool SendProvisionalAnswer() { | 337 bool SendProvisionalAnswer() { |
338 bool result = channel2_->SetLocalContent(&local_media_content2_, | 338 bool result = channel2_->SetLocalContent(&local_media_content2_, |
339 CA_PRANSWER, NULL); | 339 CA_PRANSWER, nullptr); |
340 if (result) { | 340 if (result) { |
341 channel2_->Enable(true); | 341 channel2_->Enable(true); |
342 result = channel1_->SetRemoteContent(&remote_media_content2_, | 342 result = channel1_->SetRemoteContent(&remote_media_content2_, CA_PRANSWER, |
343 CA_PRANSWER, NULL); | 343 nullptr); |
344 ConnectFakeTransports(); | 344 ConnectFakeTransports(); |
345 } | 345 } |
346 return result; | 346 return result; |
347 } | 347 } |
348 | 348 |
349 bool SendFinalAnswer() { | 349 bool SendFinalAnswer() { |
350 bool result = channel2_->SetLocalContent(&local_media_content2_, | 350 bool result = |
351 CA_ANSWER, NULL); | 351 channel2_->SetLocalContent(&local_media_content2_, CA_ANSWER, nullptr); |
352 if (result) | 352 if (result) |
353 result = channel1_->SetRemoteContent(&remote_media_content2_, | 353 result = channel1_->SetRemoteContent(&remote_media_content2_, CA_ANSWER, |
354 CA_ANSWER, NULL); | 354 nullptr); |
355 return result; | 355 return result; |
356 } | 356 } |
357 | 357 |
358 bool Terminate() { | 358 bool Terminate() { |
359 channel1_.reset(); | 359 channel1_.reset(); |
360 channel2_.reset(); | 360 channel2_.reset(); |
361 fake_rtp_dtls_transport1_.reset(); | 361 fake_rtp_dtls_transport1_.reset(); |
362 fake_rtcp_dtls_transport1_.reset(); | 362 fake_rtcp_dtls_transport1_.reset(); |
363 fake_rtp_dtls_transport2_.reset(); | 363 fake_rtp_dtls_transport2_.reset(); |
364 fake_rtcp_dtls_transport2_.reset(); | 364 fake_rtcp_dtls_transport2_.reset(); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 EXPECT_TRUE(media_channel1_->rtp_packets().empty()); | 580 EXPECT_TRUE(media_channel1_->rtp_packets().empty()); |
581 EXPECT_TRUE(media_channel1_->rtcp_packets().empty()); | 581 EXPECT_TRUE(media_channel1_->rtcp_packets().empty()); |
582 } | 582 } |
583 | 583 |
584 // Test that SetLocalContent and SetRemoteContent properly configure | 584 // Test that SetLocalContent and SetRemoteContent properly configure |
585 // the codecs. | 585 // the codecs. |
586 void TestSetContents() { | 586 void TestSetContents() { |
587 CreateChannels(0, 0); | 587 CreateChannels(0, 0); |
588 typename T::Content content; | 588 typename T::Content content; |
589 CreateContent(0, kPcmuCodec, kH264Codec, &content); | 589 CreateContent(0, kPcmuCodec, kH264Codec, &content); |
590 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); | 590 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, nullptr)); |
591 EXPECT_EQ(0U, media_channel1_->codecs().size()); | 591 EXPECT_EQ(0U, media_channel1_->codecs().size()); |
592 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 592 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
593 ASSERT_EQ(1U, media_channel1_->codecs().size()); | 593 ASSERT_EQ(1U, media_channel1_->codecs().size()); |
594 EXPECT_TRUE(CodecMatches(content.codecs()[0], | 594 EXPECT_TRUE(CodecMatches(content.codecs()[0], |
595 media_channel1_->codecs()[0])); | 595 media_channel1_->codecs()[0])); |
596 } | 596 } |
597 | 597 |
598 // Test that SetLocalContent and SetRemoteContent properly deals | 598 // Test that SetLocalContent and SetRemoteContent properly deals |
599 // with an empty offer. | 599 // with an empty offer. |
600 void TestSetContentsNullOffer() { | 600 void TestSetContentsNullOffer() { |
601 CreateChannels(0, 0); | 601 CreateChannels(0, 0); |
602 typename T::Content content; | 602 typename T::Content content; |
603 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); | 603 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, nullptr)); |
604 CreateContent(0, kPcmuCodec, kH264Codec, &content); | 604 CreateContent(0, kPcmuCodec, kH264Codec, &content); |
605 EXPECT_EQ(0U, media_channel1_->codecs().size()); | 605 EXPECT_EQ(0U, media_channel1_->codecs().size()); |
606 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 606 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
607 ASSERT_EQ(1U, media_channel1_->codecs().size()); | 607 ASSERT_EQ(1U, media_channel1_->codecs().size()); |
608 EXPECT_TRUE(CodecMatches(content.codecs()[0], | 608 EXPECT_TRUE(CodecMatches(content.codecs()[0], |
609 media_channel1_->codecs()[0])); | 609 media_channel1_->codecs()[0])); |
610 } | 610 } |
611 | 611 |
612 // Test that SetLocalContent and SetRemoteContent properly set RTCP | 612 // Test that SetLocalContent and SetRemoteContent properly set RTCP |
613 // mux. | 613 // mux. |
614 void TestSetContentsRtcpMux() { | 614 void TestSetContentsRtcpMux() { |
615 CreateChannels(0, 0); | 615 CreateChannels(0, 0); |
616 typename T::Content content; | 616 typename T::Content content; |
617 CreateContent(0, kPcmuCodec, kH264Codec, &content); | 617 CreateContent(0, kPcmuCodec, kH264Codec, &content); |
618 // Both sides agree on mux. Should no longer be a separate RTCP channel. | 618 // Both sides agree on mux. Should no longer be a separate RTCP channel. |
619 content.set_rtcp_mux(true); | 619 content.set_rtcp_mux(true); |
620 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); | 620 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, nullptr)); |
621 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 621 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
622 // Only initiator supports mux. Should still have a separate RTCP channel. | 622 // Only initiator supports mux. Should still have a separate RTCP channel. |
623 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL)); | 623 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, nullptr)); |
624 content.set_rtcp_mux(false); | 624 content.set_rtcp_mux(false); |
625 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 625 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
626 } | 626 } |
627 | 627 |
628 // Test that SetLocalContent and SetRemoteContent properly set RTCP | 628 // Test that SetLocalContent and SetRemoteContent properly set RTCP |
629 // mux when a provisional answer is received. | 629 // mux when a provisional answer is received. |
630 void TestSetContentsRtcpMuxWithPrAnswer() { | 630 void TestSetContentsRtcpMuxWithPrAnswer() { |
631 CreateChannels(0, 0); | 631 CreateChannels(0, 0); |
632 typename T::Content content; | 632 typename T::Content content; |
633 CreateContent(0, kPcmuCodec, kH264Codec, &content); | 633 CreateContent(0, kPcmuCodec, kH264Codec, &content); |
634 content.set_rtcp_mux(true); | 634 content.set_rtcp_mux(true); |
635 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); | 635 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, nullptr)); |
636 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_PRANSWER, NULL)); | 636 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_PRANSWER, nullptr)); |
637 // Both sides agree on mux. Should signal RTCP mux as fully activated. | 637 // Both sides agree on mux. Should signal RTCP mux as fully activated. |
638 EXPECT_EQ(0, rtcp_mux_activated_callbacks1_); | 638 EXPECT_EQ(0, rtcp_mux_activated_callbacks1_); |
639 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 639 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
640 EXPECT_EQ(1, rtcp_mux_activated_callbacks1_); | 640 EXPECT_EQ(1, rtcp_mux_activated_callbacks1_); |
641 // Only initiator supports mux. Should still have a separate RTCP channel. | 641 // Only initiator supports mux. Should still have a separate RTCP channel. |
642 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL)); | 642 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, nullptr)); |
643 content.set_rtcp_mux(false); | 643 content.set_rtcp_mux(false); |
644 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_PRANSWER, NULL)); | 644 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_PRANSWER, nullptr)); |
645 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 645 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
646 EXPECT_EQ(0, rtcp_mux_activated_callbacks2_); | 646 EXPECT_EQ(0, rtcp_mux_activated_callbacks2_); |
647 } | 647 } |
648 | 648 |
649 // Test that SetRemoteContent properly deals with a content update. | 649 // Test that SetRemoteContent properly deals with a content update. |
650 void TestSetRemoteContentUpdate() { | 650 void TestSetRemoteContentUpdate() { |
651 CreateChannels(0, 0); | 651 CreateChannels(0, 0); |
652 typename T::Content content; | 652 typename T::Content content; |
653 CreateContent(RTCP_MUX | SECURE, kPcmuCodec, kH264Codec, &content); | 653 CreateContent(RTCP_MUX | SECURE, kPcmuCodec, kH264Codec, &content); |
654 EXPECT_EQ(0U, media_channel1_->codecs().size()); | 654 EXPECT_EQ(0U, media_channel1_->codecs().size()); |
655 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); | 655 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, nullptr)); |
656 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 656 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
657 ASSERT_EQ(1U, media_channel1_->codecs().size()); | 657 ASSERT_EQ(1U, media_channel1_->codecs().size()); |
658 EXPECT_TRUE(CodecMatches(content.codecs()[0], | 658 EXPECT_TRUE(CodecMatches(content.codecs()[0], |
659 media_channel1_->codecs()[0])); | 659 media_channel1_->codecs()[0])); |
660 // Now update with other codecs. | 660 // Now update with other codecs. |
661 typename T::Content update_content; | 661 typename T::Content update_content; |
662 update_content.set_partial(true); | 662 update_content.set_partial(true); |
663 CreateContent(0, kIsacCodec, kH264SvcCodec, | 663 CreateContent(0, kIsacCodec, kH264SvcCodec, |
664 &update_content); | 664 &update_content); |
665 EXPECT_TRUE(channel1_->SetRemoteContent(&update_content, CA_UPDATE, NULL)); | 665 EXPECT_TRUE( |
| 666 channel1_->SetRemoteContent(&update_content, CA_UPDATE, nullptr)); |
666 ASSERT_EQ(1U, media_channel1_->codecs().size()); | 667 ASSERT_EQ(1U, media_channel1_->codecs().size()); |
667 EXPECT_TRUE(CodecMatches(update_content.codecs()[0], | 668 EXPECT_TRUE(CodecMatches(update_content.codecs()[0], |
668 media_channel1_->codecs()[0])); | 669 media_channel1_->codecs()[0])); |
669 // Now update without any codecs. This is ignored. | 670 // Now update without any codecs. This is ignored. |
670 typename T::Content empty_content; | 671 typename T::Content empty_content; |
671 empty_content.set_partial(true); | 672 empty_content.set_partial(true); |
672 EXPECT_TRUE(channel1_->SetRemoteContent(&empty_content, CA_UPDATE, NULL)); | 673 EXPECT_TRUE( |
| 674 channel1_->SetRemoteContent(&empty_content, CA_UPDATE, nullptr)); |
673 ASSERT_EQ(1U, media_channel1_->codecs().size()); | 675 ASSERT_EQ(1U, media_channel1_->codecs().size()); |
674 EXPECT_TRUE(CodecMatches(update_content.codecs()[0], | 676 EXPECT_TRUE(CodecMatches(update_content.codecs()[0], |
675 media_channel1_->codecs()[0])); | 677 media_channel1_->codecs()[0])); |
676 } | 678 } |
677 | 679 |
678 // Test that Add/RemoveStream properly forward to the media channel. | 680 // Test that Add/RemoveStream properly forward to the media channel. |
679 void TestStreams() { | 681 void TestStreams() { |
680 CreateChannels(0, 0); | 682 CreateChannels(0, 0); |
681 EXPECT_TRUE(AddStream1(1)); | 683 EXPECT_TRUE(AddStream1(1)); |
682 EXPECT_TRUE(AddStream1(2)); | 684 EXPECT_TRUE(AddStream1(2)); |
(...skipping 25 matching lines...) Expand all Loading... |
708 stream3.groupid = "group3"; | 710 stream3.groupid = "group3"; |
709 stream3.id = "stream3"; | 711 stream3.id = "stream3"; |
710 stream3.ssrcs.push_back(kSsrc3); | 712 stream3.ssrcs.push_back(kSsrc3); |
711 stream3.cname = "stream3_cname"; | 713 stream3.cname = "stream3_cname"; |
712 | 714 |
713 CreateChannels(0, 0); | 715 CreateChannels(0, 0); |
714 typename T::Content content1; | 716 typename T::Content content1; |
715 CreateContent(0, kPcmuCodec, kH264Codec, &content1); | 717 CreateContent(0, kPcmuCodec, kH264Codec, &content1); |
716 content1.AddStream(stream1); | 718 content1.AddStream(stream1); |
717 EXPECT_EQ(0u, media_channel1_->send_streams().size()); | 719 EXPECT_EQ(0u, media_channel1_->send_streams().size()); |
718 EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, NULL)); | 720 EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, nullptr)); |
719 | 721 |
720 ASSERT_EQ(1u, media_channel1_->send_streams().size()); | 722 ASSERT_EQ(1u, media_channel1_->send_streams().size()); |
721 EXPECT_EQ(stream1, media_channel1_->send_streams()[0]); | 723 EXPECT_EQ(stream1, media_channel1_->send_streams()[0]); |
722 | 724 |
723 // Update the local streams by adding another sending stream. | 725 // Update the local streams by adding another sending stream. |
724 // Use a partial updated session description. | 726 // Use a partial updated session description. |
725 typename T::Content content2; | 727 typename T::Content content2; |
726 content2.AddStream(stream2); | 728 content2.AddStream(stream2); |
727 content2.AddStream(stream3); | 729 content2.AddStream(stream3); |
728 content2.set_partial(true); | 730 content2.set_partial(true); |
729 EXPECT_TRUE(channel1_->SetLocalContent(&content2, CA_UPDATE, NULL)); | 731 EXPECT_TRUE(channel1_->SetLocalContent(&content2, CA_UPDATE, nullptr)); |
730 ASSERT_EQ(3u, media_channel1_->send_streams().size()); | 732 ASSERT_EQ(3u, media_channel1_->send_streams().size()); |
731 EXPECT_EQ(stream1, media_channel1_->send_streams()[0]); | 733 EXPECT_EQ(stream1, media_channel1_->send_streams()[0]); |
732 EXPECT_EQ(stream2, media_channel1_->send_streams()[1]); | 734 EXPECT_EQ(stream2, media_channel1_->send_streams()[1]); |
733 EXPECT_EQ(stream3, media_channel1_->send_streams()[2]); | 735 EXPECT_EQ(stream3, media_channel1_->send_streams()[2]); |
734 | 736 |
735 // Update the local streams by removing the first sending stream. | 737 // Update the local streams by removing the first sending stream. |
736 // This is done by removing all SSRCS for this particular stream. | 738 // This is done by removing all SSRCS for this particular stream. |
737 typename T::Content content3; | 739 typename T::Content content3; |
738 stream1.ssrcs.clear(); | 740 stream1.ssrcs.clear(); |
739 content3.AddStream(stream1); | 741 content3.AddStream(stream1); |
740 content3.set_partial(true); | 742 content3.set_partial(true); |
741 EXPECT_TRUE(channel1_->SetLocalContent(&content3, CA_UPDATE, NULL)); | 743 EXPECT_TRUE(channel1_->SetLocalContent(&content3, CA_UPDATE, nullptr)); |
742 ASSERT_EQ(2u, media_channel1_->send_streams().size()); | 744 ASSERT_EQ(2u, media_channel1_->send_streams().size()); |
743 EXPECT_EQ(stream2, media_channel1_->send_streams()[0]); | 745 EXPECT_EQ(stream2, media_channel1_->send_streams()[0]); |
744 EXPECT_EQ(stream3, media_channel1_->send_streams()[1]); | 746 EXPECT_EQ(stream3, media_channel1_->send_streams()[1]); |
745 | 747 |
746 // Update the local streams with a stream that does not change. | 748 // Update the local streams with a stream that does not change. |
747 // THe update is ignored. | 749 // THe update is ignored. |
748 typename T::Content content4; | 750 typename T::Content content4; |
749 content4.AddStream(stream2); | 751 content4.AddStream(stream2); |
750 content4.set_partial(true); | 752 content4.set_partial(true); |
751 EXPECT_TRUE(channel1_->SetLocalContent(&content4, CA_UPDATE, NULL)); | 753 EXPECT_TRUE(channel1_->SetLocalContent(&content4, CA_UPDATE, nullptr)); |
752 ASSERT_EQ(2u, media_channel1_->send_streams().size()); | 754 ASSERT_EQ(2u, media_channel1_->send_streams().size()); |
753 EXPECT_EQ(stream2, media_channel1_->send_streams()[0]); | 755 EXPECT_EQ(stream2, media_channel1_->send_streams()[0]); |
754 EXPECT_EQ(stream3, media_channel1_->send_streams()[1]); | 756 EXPECT_EQ(stream3, media_channel1_->send_streams()[1]); |
755 } | 757 } |
756 | 758 |
757 // Test that SetRemoteContent properly handles adding and removing | 759 // Test that SetRemoteContent properly handles adding and removing |
758 // StreamParams to the remote content description. | 760 // StreamParams to the remote content description. |
759 // This test uses the CA_UPDATE action that don't require a full | 761 // This test uses the CA_UPDATE action that don't require a full |
760 // MediaContentDescription to do an update. | 762 // MediaContentDescription to do an update. |
761 void TestUpdateStreamsInRemoteContent() { | 763 void TestUpdateStreamsInRemoteContent() { |
(...skipping 13 matching lines...) Expand all Loading... |
775 stream3.id = "Stream3"; | 777 stream3.id = "Stream3"; |
776 stream3.groupid = "3"; | 778 stream3.groupid = "3"; |
777 stream3.ssrcs.push_back(kSsrc3); | 779 stream3.ssrcs.push_back(kSsrc3); |
778 stream3.cname = "stream3_cname"; | 780 stream3.cname = "stream3_cname"; |
779 | 781 |
780 CreateChannels(0, 0); | 782 CreateChannels(0, 0); |
781 typename T::Content content1; | 783 typename T::Content content1; |
782 CreateContent(0, kPcmuCodec, kH264Codec, &content1); | 784 CreateContent(0, kPcmuCodec, kH264Codec, &content1); |
783 content1.AddStream(stream1); | 785 content1.AddStream(stream1); |
784 EXPECT_EQ(0u, media_channel1_->recv_streams().size()); | 786 EXPECT_EQ(0u, media_channel1_->recv_streams().size()); |
785 EXPECT_TRUE(channel1_->SetRemoteContent(&content1, CA_OFFER, NULL)); | 787 EXPECT_TRUE(channel1_->SetRemoteContent(&content1, CA_OFFER, nullptr)); |
786 | 788 |
787 ASSERT_EQ(1u, media_channel1_->codecs().size()); | 789 ASSERT_EQ(1u, media_channel1_->codecs().size()); |
788 ASSERT_EQ(1u, media_channel1_->recv_streams().size()); | 790 ASSERT_EQ(1u, media_channel1_->recv_streams().size()); |
789 EXPECT_EQ(stream1, media_channel1_->recv_streams()[0]); | 791 EXPECT_EQ(stream1, media_channel1_->recv_streams()[0]); |
790 | 792 |
791 // Update the remote streams by adding another sending stream. | 793 // Update the remote streams by adding another sending stream. |
792 // Use a partial updated session description. | 794 // Use a partial updated session description. |
793 typename T::Content content2; | 795 typename T::Content content2; |
794 content2.AddStream(stream2); | 796 content2.AddStream(stream2); |
795 content2.AddStream(stream3); | 797 content2.AddStream(stream3); |
796 content2.set_partial(true); | 798 content2.set_partial(true); |
797 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_UPDATE, NULL)); | 799 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_UPDATE, nullptr)); |
798 ASSERT_EQ(3u, media_channel1_->recv_streams().size()); | 800 ASSERT_EQ(3u, media_channel1_->recv_streams().size()); |
799 EXPECT_EQ(stream1, media_channel1_->recv_streams()[0]); | 801 EXPECT_EQ(stream1, media_channel1_->recv_streams()[0]); |
800 EXPECT_EQ(stream2, media_channel1_->recv_streams()[1]); | 802 EXPECT_EQ(stream2, media_channel1_->recv_streams()[1]); |
801 EXPECT_EQ(stream3, media_channel1_->recv_streams()[2]); | 803 EXPECT_EQ(stream3, media_channel1_->recv_streams()[2]); |
802 | 804 |
803 // Update the remote streams by removing the first stream. | 805 // Update the remote streams by removing the first stream. |
804 // This is done by removing all SSRCS for this particular stream. | 806 // This is done by removing all SSRCS for this particular stream. |
805 typename T::Content content3; | 807 typename T::Content content3; |
806 stream1.ssrcs.clear(); | 808 stream1.ssrcs.clear(); |
807 content3.AddStream(stream1); | 809 content3.AddStream(stream1); |
808 content3.set_partial(true); | 810 content3.set_partial(true); |
809 EXPECT_TRUE(channel1_->SetRemoteContent(&content3, CA_UPDATE, NULL)); | 811 EXPECT_TRUE(channel1_->SetRemoteContent(&content3, CA_UPDATE, nullptr)); |
810 ASSERT_EQ(2u, media_channel1_->recv_streams().size()); | 812 ASSERT_EQ(2u, media_channel1_->recv_streams().size()); |
811 EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); | 813 EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); |
812 EXPECT_EQ(stream3, media_channel1_->recv_streams()[1]); | 814 EXPECT_EQ(stream3, media_channel1_->recv_streams()[1]); |
813 | 815 |
814 // Update the remote streams with a stream that does not change. | 816 // Update the remote streams with a stream that does not change. |
815 // The update is ignored. | 817 // The update is ignored. |
816 typename T::Content content4; | 818 typename T::Content content4; |
817 content4.AddStream(stream2); | 819 content4.AddStream(stream2); |
818 content4.set_partial(true); | 820 content4.set_partial(true); |
819 EXPECT_TRUE(channel1_->SetRemoteContent(&content4, CA_UPDATE, NULL)); | 821 EXPECT_TRUE(channel1_->SetRemoteContent(&content4, CA_UPDATE, nullptr)); |
820 ASSERT_EQ(2u, media_channel1_->recv_streams().size()); | 822 ASSERT_EQ(2u, media_channel1_->recv_streams().size()); |
821 EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); | 823 EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); |
822 EXPECT_EQ(stream3, media_channel1_->recv_streams()[1]); | 824 EXPECT_EQ(stream3, media_channel1_->recv_streams()[1]); |
823 } | 825 } |
824 | 826 |
825 // Test that SetLocalContent and SetRemoteContent properly | 827 // Test that SetLocalContent and SetRemoteContent properly |
826 // handles adding and removing StreamParams when the action is a full | 828 // handles adding and removing StreamParams when the action is a full |
827 // CA_OFFER / CA_ANSWER. | 829 // CA_OFFER / CA_ANSWER. |
828 void TestChangeStreamParamsInContent() { | 830 void TestChangeStreamParamsInContent() { |
829 cricket::StreamParams stream1; | 831 cricket::StreamParams stream1; |
830 stream1.groupid = "group1"; | 832 stream1.groupid = "group1"; |
831 stream1.id = "stream1"; | 833 stream1.id = "stream1"; |
832 stream1.ssrcs.push_back(kSsrc1); | 834 stream1.ssrcs.push_back(kSsrc1); |
833 stream1.cname = "stream1_cname"; | 835 stream1.cname = "stream1_cname"; |
834 | 836 |
835 cricket::StreamParams stream2; | 837 cricket::StreamParams stream2; |
836 stream2.groupid = "group1"; | 838 stream2.groupid = "group1"; |
837 stream2.id = "stream2"; | 839 stream2.id = "stream2"; |
838 stream2.ssrcs.push_back(kSsrc2); | 840 stream2.ssrcs.push_back(kSsrc2); |
839 stream2.cname = "stream2_cname"; | 841 stream2.cname = "stream2_cname"; |
840 | 842 |
841 // Setup a call where channel 1 send |stream1| to channel 2. | 843 // Setup a call where channel 1 send |stream1| to channel 2. |
842 CreateChannels(0, 0); | 844 CreateChannels(0, 0); |
843 typename T::Content content1; | 845 typename T::Content content1; |
844 CreateContent(0, kPcmuCodec, kH264Codec, &content1); | 846 CreateContent(0, kPcmuCodec, kH264Codec, &content1); |
845 content1.AddStream(stream1); | 847 content1.AddStream(stream1); |
846 EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, NULL)); | 848 EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, nullptr)); |
847 EXPECT_TRUE(channel1_->Enable(true)); | 849 EXPECT_TRUE(channel1_->Enable(true)); |
848 EXPECT_EQ(1u, media_channel1_->send_streams().size()); | 850 EXPECT_EQ(1u, media_channel1_->send_streams().size()); |
849 | 851 |
850 EXPECT_TRUE(channel2_->SetRemoteContent(&content1, CA_OFFER, NULL)); | 852 EXPECT_TRUE(channel2_->SetRemoteContent(&content1, CA_OFFER, nullptr)); |
851 EXPECT_EQ(1u, media_channel2_->recv_streams().size()); | 853 EXPECT_EQ(1u, media_channel2_->recv_streams().size()); |
852 ConnectFakeTransports(); | 854 ConnectFakeTransports(); |
853 | 855 |
854 // Channel 2 do not send anything. | 856 // Channel 2 do not send anything. |
855 typename T::Content content2; | 857 typename T::Content content2; |
856 CreateContent(0, kPcmuCodec, kH264Codec, &content2); | 858 CreateContent(0, kPcmuCodec, kH264Codec, &content2); |
857 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_ANSWER, NULL)); | 859 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_ANSWER, nullptr)); |
858 EXPECT_EQ(0u, media_channel1_->recv_streams().size()); | 860 EXPECT_EQ(0u, media_channel1_->recv_streams().size()); |
859 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_ANSWER, NULL)); | 861 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_ANSWER, nullptr)); |
860 EXPECT_TRUE(channel2_->Enable(true)); | 862 EXPECT_TRUE(channel2_->Enable(true)); |
861 EXPECT_EQ(0u, media_channel2_->send_streams().size()); | 863 EXPECT_EQ(0u, media_channel2_->send_streams().size()); |
862 | 864 |
863 SendCustomRtp1(kSsrc1, 0); | 865 SendCustomRtp1(kSsrc1, 0); |
864 WaitForThreads(); | 866 WaitForThreads(); |
865 EXPECT_TRUE(CheckCustomRtp2(kSsrc1, 0)); | 867 EXPECT_TRUE(CheckCustomRtp2(kSsrc1, 0)); |
866 | 868 |
867 // Let channel 2 update the content by sending |stream2| and enable SRTP. | 869 // Let channel 2 update the content by sending |stream2| and enable SRTP. |
868 typename T::Content content3; | 870 typename T::Content content3; |
869 CreateContent(SECURE, kPcmuCodec, kH264Codec, &content3); | 871 CreateContent(SECURE, kPcmuCodec, kH264Codec, &content3); |
870 content3.AddStream(stream2); | 872 content3.AddStream(stream2); |
871 EXPECT_TRUE(channel2_->SetLocalContent(&content3, CA_OFFER, NULL)); | 873 EXPECT_TRUE(channel2_->SetLocalContent(&content3, CA_OFFER, nullptr)); |
872 ASSERT_EQ(1u, media_channel2_->send_streams().size()); | 874 ASSERT_EQ(1u, media_channel2_->send_streams().size()); |
873 EXPECT_EQ(stream2, media_channel2_->send_streams()[0]); | 875 EXPECT_EQ(stream2, media_channel2_->send_streams()[0]); |
874 | 876 |
875 EXPECT_TRUE(channel1_->SetRemoteContent(&content3, CA_OFFER, NULL)); | 877 EXPECT_TRUE(channel1_->SetRemoteContent(&content3, CA_OFFER, nullptr)); |
876 ASSERT_EQ(1u, media_channel1_->recv_streams().size()); | 878 ASSERT_EQ(1u, media_channel1_->recv_streams().size()); |
877 EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); | 879 EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); |
878 | 880 |
879 // Channel 1 replies but stop sending stream1. | 881 // Channel 1 replies but stop sending stream1. |
880 typename T::Content content4; | 882 typename T::Content content4; |
881 CreateContent(SECURE, kPcmuCodec, kH264Codec, &content4); | 883 CreateContent(SECURE, kPcmuCodec, kH264Codec, &content4); |
882 EXPECT_TRUE(channel1_->SetLocalContent(&content4, CA_ANSWER, NULL)); | 884 EXPECT_TRUE(channel1_->SetLocalContent(&content4, CA_ANSWER, nullptr)); |
883 EXPECT_EQ(0u, media_channel1_->send_streams().size()); | 885 EXPECT_EQ(0u, media_channel1_->send_streams().size()); |
884 | 886 |
885 EXPECT_TRUE(channel2_->SetRemoteContent(&content4, CA_ANSWER, NULL)); | 887 EXPECT_TRUE(channel2_->SetRemoteContent(&content4, CA_ANSWER, nullptr)); |
886 EXPECT_EQ(0u, media_channel2_->recv_streams().size()); | 888 EXPECT_EQ(0u, media_channel2_->recv_streams().size()); |
887 | 889 |
888 EXPECT_TRUE(channel1_->secure()); | 890 EXPECT_TRUE(channel1_->secure()); |
889 EXPECT_TRUE(channel2_->secure()); | 891 EXPECT_TRUE(channel2_->secure()); |
890 SendCustomRtp2(kSsrc2, 0); | 892 SendCustomRtp2(kSsrc2, 0); |
891 WaitForThreads(); | 893 WaitForThreads(); |
892 EXPECT_TRUE(CheckCustomRtp1(kSsrc2, 0)); | 894 EXPECT_TRUE(CheckCustomRtp1(kSsrc2, 0)); |
893 } | 895 } |
894 | 896 |
895 // Test that we only start playout and sending at the right times. | 897 // Test that we only start playout and sending at the right times. |
896 void TestPlayoutAndSendingStates() { | 898 void TestPlayoutAndSendingStates() { |
897 CreateChannels(0, 0); | 899 CreateChannels(0, 0); |
898 if (verify_playout_) { | 900 if (verify_playout_) { |
899 EXPECT_FALSE(media_channel1_->playout()); | 901 EXPECT_FALSE(media_channel1_->playout()); |
900 } | 902 } |
901 EXPECT_FALSE(media_channel1_->sending()); | 903 EXPECT_FALSE(media_channel1_->sending()); |
902 if (verify_playout_) { | 904 if (verify_playout_) { |
903 EXPECT_FALSE(media_channel2_->playout()); | 905 EXPECT_FALSE(media_channel2_->playout()); |
904 } | 906 } |
905 EXPECT_FALSE(media_channel2_->sending()); | 907 EXPECT_FALSE(media_channel2_->sending()); |
906 EXPECT_TRUE(channel1_->Enable(true)); | 908 EXPECT_TRUE(channel1_->Enable(true)); |
907 if (verify_playout_) { | 909 if (verify_playout_) { |
908 EXPECT_FALSE(media_channel1_->playout()); | 910 EXPECT_FALSE(media_channel1_->playout()); |
909 } | 911 } |
910 EXPECT_FALSE(media_channel1_->sending()); | 912 EXPECT_FALSE(media_channel1_->sending()); |
911 EXPECT_TRUE(channel1_->SetLocalContent(&local_media_content1_, | 913 EXPECT_TRUE( |
912 CA_OFFER, NULL)); | 914 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, nullptr)); |
913 if (verify_playout_) { | 915 if (verify_playout_) { |
914 EXPECT_TRUE(media_channel1_->playout()); | 916 EXPECT_TRUE(media_channel1_->playout()); |
915 } | 917 } |
916 EXPECT_FALSE(media_channel1_->sending()); | 918 EXPECT_FALSE(media_channel1_->sending()); |
917 EXPECT_TRUE(channel2_->SetRemoteContent(&local_media_content1_, | 919 EXPECT_TRUE( |
918 CA_OFFER, NULL)); | 920 channel2_->SetRemoteContent(&local_media_content1_, CA_OFFER, nullptr)); |
919 if (verify_playout_) { | 921 if (verify_playout_) { |
920 EXPECT_FALSE(media_channel2_->playout()); | 922 EXPECT_FALSE(media_channel2_->playout()); |
921 } | 923 } |
922 EXPECT_FALSE(media_channel2_->sending()); | 924 EXPECT_FALSE(media_channel2_->sending()); |
923 EXPECT_TRUE(channel2_->SetLocalContent(&local_media_content2_, | 925 EXPECT_TRUE( |
924 CA_ANSWER, NULL)); | 926 channel2_->SetLocalContent(&local_media_content2_, CA_ANSWER, nullptr)); |
925 if (verify_playout_) { | 927 if (verify_playout_) { |
926 EXPECT_FALSE(media_channel2_->playout()); | 928 EXPECT_FALSE(media_channel2_->playout()); |
927 } | 929 } |
928 EXPECT_FALSE(media_channel2_->sending()); | 930 EXPECT_FALSE(media_channel2_->sending()); |
929 ConnectFakeTransports(); | 931 ConnectFakeTransports(); |
930 if (verify_playout_) { | 932 if (verify_playout_) { |
931 EXPECT_TRUE(media_channel1_->playout()); | 933 EXPECT_TRUE(media_channel1_->playout()); |
932 } | 934 } |
933 EXPECT_FALSE(media_channel1_->sending()); | 935 EXPECT_FALSE(media_channel1_->sending()); |
934 if (verify_playout_) { | 936 if (verify_playout_) { |
935 EXPECT_FALSE(media_channel2_->playout()); | 937 EXPECT_FALSE(media_channel2_->playout()); |
936 } | 938 } |
937 EXPECT_FALSE(media_channel2_->sending()); | 939 EXPECT_FALSE(media_channel2_->sending()); |
938 EXPECT_TRUE(channel2_->Enable(true)); | 940 EXPECT_TRUE(channel2_->Enable(true)); |
939 if (verify_playout_) { | 941 if (verify_playout_) { |
940 EXPECT_TRUE(media_channel2_->playout()); | 942 EXPECT_TRUE(media_channel2_->playout()); |
941 } | 943 } |
942 EXPECT_TRUE(media_channel2_->sending()); | 944 EXPECT_TRUE(media_channel2_->sending()); |
943 EXPECT_TRUE(channel1_->SetRemoteContent(&local_media_content2_, | 945 EXPECT_TRUE(channel1_->SetRemoteContent(&local_media_content2_, CA_ANSWER, |
944 CA_ANSWER, NULL)); | 946 nullptr)); |
945 if (verify_playout_) { | 947 if (verify_playout_) { |
946 EXPECT_TRUE(media_channel1_->playout()); | 948 EXPECT_TRUE(media_channel1_->playout()); |
947 } | 949 } |
948 EXPECT_TRUE(media_channel1_->sending()); | 950 EXPECT_TRUE(media_channel1_->sending()); |
949 } | 951 } |
950 | 952 |
951 // Test that changing the MediaContentDirection in the local and remote | 953 // Test that changing the MediaContentDirection in the local and remote |
952 // session description start playout and sending at the right time. | 954 // session description start playout and sending at the right time. |
953 void TestMediaContentDirection() { | 955 void TestMediaContentDirection() { |
954 CreateChannels(0, 0); | 956 CreateChannels(0, 0); |
955 typename T::Content content1; | 957 typename T::Content content1; |
956 CreateContent(0, kPcmuCodec, kH264Codec, &content1); | 958 CreateContent(0, kPcmuCodec, kH264Codec, &content1); |
957 typename T::Content content2; | 959 typename T::Content content2; |
958 CreateContent(0, kPcmuCodec, kH264Codec, &content2); | 960 CreateContent(0, kPcmuCodec, kH264Codec, &content2); |
959 // Set |content2| to be InActive. | 961 // Set |content2| to be InActive. |
960 content2.set_direction(cricket::MD_INACTIVE); | 962 content2.set_direction(cricket::MD_INACTIVE); |
961 | 963 |
962 EXPECT_TRUE(channel1_->Enable(true)); | 964 EXPECT_TRUE(channel1_->Enable(true)); |
963 EXPECT_TRUE(channel2_->Enable(true)); | 965 EXPECT_TRUE(channel2_->Enable(true)); |
964 if (verify_playout_) { | 966 if (verify_playout_) { |
965 EXPECT_FALSE(media_channel1_->playout()); | 967 EXPECT_FALSE(media_channel1_->playout()); |
966 } | 968 } |
967 EXPECT_FALSE(media_channel1_->sending()); | 969 EXPECT_FALSE(media_channel1_->sending()); |
968 if (verify_playout_) { | 970 if (verify_playout_) { |
969 EXPECT_FALSE(media_channel2_->playout()); | 971 EXPECT_FALSE(media_channel2_->playout()); |
970 } | 972 } |
971 EXPECT_FALSE(media_channel2_->sending()); | 973 EXPECT_FALSE(media_channel2_->sending()); |
972 | 974 |
973 EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, NULL)); | 975 EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, nullptr)); |
974 EXPECT_TRUE(channel2_->SetRemoteContent(&content1, CA_OFFER, NULL)); | 976 EXPECT_TRUE(channel2_->SetRemoteContent(&content1, CA_OFFER, nullptr)); |
975 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_PRANSWER, NULL)); | 977 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_PRANSWER, nullptr)); |
976 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_PRANSWER, NULL)); | 978 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_PRANSWER, nullptr)); |
977 ConnectFakeTransports(); | 979 ConnectFakeTransports(); |
978 | 980 |
979 if (verify_playout_) { | 981 if (verify_playout_) { |
980 EXPECT_TRUE(media_channel1_->playout()); | 982 EXPECT_TRUE(media_channel1_->playout()); |
981 } | 983 } |
982 EXPECT_FALSE(media_channel1_->sending()); // remote InActive | 984 EXPECT_FALSE(media_channel1_->sending()); // remote InActive |
983 if (verify_playout_) { | 985 if (verify_playout_) { |
984 EXPECT_FALSE(media_channel2_->playout()); // local InActive | 986 EXPECT_FALSE(media_channel2_->playout()); // local InActive |
985 } | 987 } |
986 EXPECT_FALSE(media_channel2_->sending()); // local InActive | 988 EXPECT_FALSE(media_channel2_->sending()); // local InActive |
987 | 989 |
988 // Update |content2| to be RecvOnly. | 990 // Update |content2| to be RecvOnly. |
989 content2.set_direction(cricket::MD_RECVONLY); | 991 content2.set_direction(cricket::MD_RECVONLY); |
990 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_PRANSWER, NULL)); | 992 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_PRANSWER, nullptr)); |
991 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_PRANSWER, NULL)); | 993 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_PRANSWER, nullptr)); |
992 | 994 |
993 if (verify_playout_) { | 995 if (verify_playout_) { |
994 EXPECT_TRUE(media_channel1_->playout()); | 996 EXPECT_TRUE(media_channel1_->playout()); |
995 } | 997 } |
996 EXPECT_TRUE(media_channel1_->sending()); | 998 EXPECT_TRUE(media_channel1_->sending()); |
997 if (verify_playout_) { | 999 if (verify_playout_) { |
998 EXPECT_TRUE(media_channel2_->playout()); // local RecvOnly | 1000 EXPECT_TRUE(media_channel2_->playout()); // local RecvOnly |
999 } | 1001 } |
1000 EXPECT_FALSE(media_channel2_->sending()); // local RecvOnly | 1002 EXPECT_FALSE(media_channel2_->sending()); // local RecvOnly |
1001 | 1003 |
1002 // Update |content2| to be SendRecv. | 1004 // Update |content2| to be SendRecv. |
1003 content2.set_direction(cricket::MD_SENDRECV); | 1005 content2.set_direction(cricket::MD_SENDRECV); |
1004 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_ANSWER, NULL)); | 1006 EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_ANSWER, nullptr)); |
1005 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_ANSWER, NULL)); | 1007 EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_ANSWER, nullptr)); |
1006 | 1008 |
1007 if (verify_playout_) { | 1009 if (verify_playout_) { |
1008 EXPECT_TRUE(media_channel1_->playout()); | 1010 EXPECT_TRUE(media_channel1_->playout()); |
1009 } | 1011 } |
1010 EXPECT_TRUE(media_channel1_->sending()); | 1012 EXPECT_TRUE(media_channel1_->sending()); |
1011 if (verify_playout_) { | 1013 if (verify_playout_) { |
1012 EXPECT_TRUE(media_channel2_->playout()); | 1014 EXPECT_TRUE(media_channel2_->playout()); |
1013 } | 1015 } |
1014 EXPECT_TRUE(media_channel2_->sending()); | 1016 EXPECT_TRUE(media_channel2_->sending()); |
1015 } | 1017 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1084 EXPECT_EQ(1U, media_channel2_->codecs().size()); | 1086 EXPECT_EQ(1U, media_channel2_->codecs().size()); |
1085 } | 1087 } |
1086 | 1088 |
1087 // Test that we don't crash if packets are sent during call teardown | 1089 // Test that we don't crash if packets are sent during call teardown |
1088 // when RTCP mux is enabled. This is a regression test against a specific | 1090 // when RTCP mux is enabled. This is a regression test against a specific |
1089 // race condition that would only occur when a RTCP packet was sent during | 1091 // race condition that would only occur when a RTCP packet was sent during |
1090 // teardown of a channel on which RTCP mux was enabled. | 1092 // teardown of a channel on which RTCP mux was enabled. |
1091 void TestCallTeardownRtcpMux() { | 1093 void TestCallTeardownRtcpMux() { |
1092 class LastWordMediaChannel : public T::MediaChannel { | 1094 class LastWordMediaChannel : public T::MediaChannel { |
1093 public: | 1095 public: |
1094 LastWordMediaChannel() : T::MediaChannel(NULL, typename T::Options()) {} | 1096 LastWordMediaChannel() |
| 1097 : T::MediaChannel(nullptr, typename T::Options()) {} |
1095 ~LastWordMediaChannel() { | 1098 ~LastWordMediaChannel() { |
1096 T::MediaChannel::SendRtp(kPcmuFrame, sizeof(kPcmuFrame), | 1099 T::MediaChannel::SendRtp(kPcmuFrame, sizeof(kPcmuFrame), |
1097 rtc::PacketOptions()); | 1100 rtc::PacketOptions()); |
1098 T::MediaChannel::SendRtcp(kRtcpReport, sizeof(kRtcpReport)); | 1101 T::MediaChannel::SendRtcp(kRtcpReport, sizeof(kRtcpReport)); |
1099 } | 1102 } |
1100 }; | 1103 }; |
1101 CreateChannels(new LastWordMediaChannel(), new LastWordMediaChannel(), | 1104 CreateChannels(new LastWordMediaChannel(), new LastWordMediaChannel(), |
1102 RTCP_MUX, RTCP_MUX); | 1105 RTCP_MUX, RTCP_MUX); |
1103 EXPECT_TRUE(SendInitiate()); | 1106 EXPECT_TRUE(SendInitiate()); |
1104 EXPECT_TRUE(SendAccept()); | 1107 EXPECT_TRUE(SendAccept()); |
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1922 WaitForThreads(); | 1925 WaitForThreads(); |
1923 EXPECT_TRUE(media_channel1_->ready_to_send()); | 1926 EXPECT_TRUE(media_channel1_->ready_to_send()); |
1924 } | 1927 } |
1925 | 1928 |
1926 void TestOnReadyToSendWithRtcpMux() { | 1929 void TestOnReadyToSendWithRtcpMux() { |
1927 CreateChannels(0, 0); | 1930 CreateChannels(0, 0); |
1928 typename T::Content content; | 1931 typename T::Content content; |
1929 CreateContent(0, kPcmuCodec, kH264Codec, &content); | 1932 CreateContent(0, kPcmuCodec, kH264Codec, &content); |
1930 // Both sides agree on mux. Should signal that RTCP mux is fully active. | 1933 // Both sides agree on mux. Should signal that RTCP mux is fully active. |
1931 content.set_rtcp_mux(true); | 1934 content.set_rtcp_mux(true); |
1932 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); | 1935 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, nullptr)); |
1933 EXPECT_EQ(0, rtcp_mux_activated_callbacks1_); | 1936 EXPECT_EQ(0, rtcp_mux_activated_callbacks1_); |
1934 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); | 1937 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, nullptr)); |
1935 EXPECT_EQ(1, rtcp_mux_activated_callbacks1_); | 1938 EXPECT_EQ(1, rtcp_mux_activated_callbacks1_); |
1936 cricket::FakeDtlsTransport* rtp = fake_rtp_dtls_transport1_.get(); | 1939 cricket::FakeDtlsTransport* rtp = fake_rtp_dtls_transport1_.get(); |
1937 EXPECT_FALSE(media_channel1_->ready_to_send()); | 1940 EXPECT_FALSE(media_channel1_->ready_to_send()); |
1938 // In the case of rtcp mux, the SignalReadyToSend() from rtp channel | 1941 // In the case of rtcp mux, the SignalReadyToSend() from rtp channel |
1939 // should trigger the MediaChannel's OnReadyToSend. | 1942 // should trigger the MediaChannel's OnReadyToSend. |
1940 network_thread_->Invoke<void>(RTC_FROM_HERE, | 1943 network_thread_->Invoke<void>(RTC_FROM_HERE, |
1941 [rtp] { rtp->SignalReadyToSend(rtp); }); | 1944 [rtp] { rtp->SignalReadyToSend(rtp); }); |
1942 WaitForThreads(); | 1945 WaitForThreads(); |
1943 EXPECT_TRUE(media_channel1_->ready_to_send()); | 1946 EXPECT_TRUE(media_channel1_->ready_to_send()); |
1944 | 1947 |
1945 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { | 1948 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { |
1946 channel1_->SetTransportChannelReadyToSend(false, false); | 1949 channel1_->SetTransportChannelReadyToSend(false, false); |
1947 }); | 1950 }); |
1948 WaitForThreads(); | 1951 WaitForThreads(); |
1949 EXPECT_FALSE(media_channel1_->ready_to_send()); | 1952 EXPECT_FALSE(media_channel1_->ready_to_send()); |
1950 } | 1953 } |
1951 | 1954 |
1952 bool SetRemoteContentWithBitrateLimit(int remote_limit) { | 1955 bool SetRemoteContentWithBitrateLimit(int remote_limit) { |
1953 typename T::Content content; | 1956 typename T::Content content; |
1954 CreateContent(0, kPcmuCodec, kH264Codec, &content); | 1957 CreateContent(0, kPcmuCodec, kH264Codec, &content); |
1955 content.set_bandwidth(remote_limit); | 1958 content.set_bandwidth(remote_limit); |
1956 return channel1_->SetRemoteContent(&content, CA_OFFER, NULL); | 1959 return channel1_->SetRemoteContent(&content, CA_OFFER, nullptr); |
1957 } | 1960 } |
1958 | 1961 |
1959 webrtc::RtpParameters BitrateLimitedParameters(rtc::Optional<int> limit) { | 1962 webrtc::RtpParameters BitrateLimitedParameters(rtc::Optional<int> limit) { |
1960 webrtc::RtpParameters parameters; | 1963 webrtc::RtpParameters parameters; |
1961 webrtc::RtpEncodingParameters encoding; | 1964 webrtc::RtpEncodingParameters encoding; |
1962 encoding.max_bitrate_bps = limit; | 1965 encoding.max_bitrate_bps = limit; |
1963 parameters.encodings.push_back(encoding); | 1966 parameters.encodings.push_back(encoding); |
1964 return parameters; | 1967 return parameters; |
1965 } | 1968 } |
1966 | 1969 |
1967 void VerifyMaxBitrate(const webrtc::RtpParameters& parameters, | 1970 void VerifyMaxBitrate(const webrtc::RtpParameters& parameters, |
1968 rtc::Optional<int> expected_bitrate) { | 1971 rtc::Optional<int> expected_bitrate) { |
1969 EXPECT_EQ(1UL, parameters.encodings.size()); | 1972 EXPECT_EQ(1UL, parameters.encodings.size()); |
1970 EXPECT_EQ(expected_bitrate, parameters.encodings[0].max_bitrate_bps); | 1973 EXPECT_EQ(expected_bitrate, parameters.encodings[0].max_bitrate_bps); |
1971 } | 1974 } |
1972 | 1975 |
1973 void DefaultMaxBitrateIsUnlimited() { | 1976 void DefaultMaxBitrateIsUnlimited() { |
1974 CreateChannels(0, 0); | 1977 CreateChannels(0, 0); |
1975 EXPECT_TRUE( | 1978 EXPECT_TRUE( |
1976 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, NULL)); | 1979 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, nullptr)); |
1977 EXPECT_EQ(media_channel1_->max_bps(), -1); | 1980 EXPECT_EQ(media_channel1_->max_bps(), -1); |
1978 VerifyMaxBitrate(media_channel1_->GetRtpSendParameters(kSsrc1), | 1981 VerifyMaxBitrate(media_channel1_->GetRtpSendParameters(kSsrc1), |
1979 rtc::Optional<int>()); | 1982 rtc::Optional<int>()); |
1980 } | 1983 } |
1981 | 1984 |
1982 void CanChangeMaxBitrate() { | 1985 void CanChangeMaxBitrate() { |
1983 CreateChannels(0, 0); | 1986 CreateChannels(0, 0); |
1984 EXPECT_TRUE( | 1987 EXPECT_TRUE( |
1985 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, NULL)); | 1988 channel1_->SetLocalContent(&local_media_content1_, CA_OFFER, nullptr)); |
1986 | 1989 |
1987 EXPECT_TRUE(channel1_->SetRtpSendParameters( | 1990 EXPECT_TRUE(channel1_->SetRtpSendParameters( |
1988 kSsrc1, BitrateLimitedParameters(rtc::Optional<int>(1000)))); | 1991 kSsrc1, BitrateLimitedParameters(rtc::Optional<int>(1000)))); |
1989 VerifyMaxBitrate(channel1_->GetRtpSendParameters(kSsrc1), | 1992 VerifyMaxBitrate(channel1_->GetRtpSendParameters(kSsrc1), |
1990 rtc::Optional<int>(1000)); | 1993 rtc::Optional<int>(1000)); |
1991 VerifyMaxBitrate(media_channel1_->GetRtpSendParameters(kSsrc1), | 1994 VerifyMaxBitrate(media_channel1_->GetRtpSendParameters(kSsrc1), |
1992 rtc::Optional<int>(1000)); | 1995 rtc::Optional<int>(1000)); |
1993 EXPECT_EQ(-1, media_channel1_->max_bps()); | 1996 EXPECT_EQ(-1, media_channel1_->max_bps()); |
1994 | 1997 |
1995 EXPECT_TRUE(channel1_->SetRtpSendParameters( | 1998 EXPECT_TRUE(channel1_->SetRtpSendParameters( |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2101 : Base(true, kPcmuFrame, kRtcpReport, NetworkIsWorker::Yes) {} | 2104 : Base(true, kPcmuFrame, kRtcpReport, NetworkIsWorker::Yes) {} |
2102 }; | 2105 }; |
2103 | 2106 |
2104 class VoiceChannelDoubleThreadTest : public ChannelTest<VoiceTraits> { | 2107 class VoiceChannelDoubleThreadTest : public ChannelTest<VoiceTraits> { |
2105 public: | 2108 public: |
2106 typedef ChannelTest<VoiceTraits> Base; | 2109 typedef ChannelTest<VoiceTraits> Base; |
2107 VoiceChannelDoubleThreadTest() | 2110 VoiceChannelDoubleThreadTest() |
2108 : Base(true, kPcmuFrame, kRtcpReport, NetworkIsWorker::No) {} | 2111 : Base(true, kPcmuFrame, kRtcpReport, NetworkIsWorker::No) {} |
2109 }; | 2112 }; |
2110 | 2113 |
2111 // override to add NULL parameter | 2114 // override to add null parameter |
2112 template <> | 2115 template <> |
2113 cricket::VideoChannel* ChannelTest<VideoTraits>::CreateChannel( | 2116 cricket::VideoChannel* ChannelTest<VideoTraits>::CreateChannel( |
2114 rtc::Thread* worker_thread, | 2117 rtc::Thread* worker_thread, |
2115 rtc::Thread* network_thread, | 2118 rtc::Thread* network_thread, |
2116 cricket::MediaEngineInterface* engine, | 2119 cricket::MediaEngineInterface* engine, |
2117 cricket::FakeVideoMediaChannel* ch, | 2120 cricket::FakeVideoMediaChannel* ch, |
2118 cricket::DtlsTransportInternal* fake_rtp_dtls_transport, | 2121 cricket::DtlsTransportInternal* fake_rtp_dtls_transport, |
2119 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport, | 2122 cricket::DtlsTransportInternal* fake_rtcp_dtls_transport, |
2120 rtc::PacketTransportInternal* fake_rtp_packet_transport, | 2123 rtc::PacketTransportInternal* fake_rtp_packet_transport, |
2121 rtc::PacketTransportInternal* fake_rtcp_packet_transport, | 2124 rtc::PacketTransportInternal* fake_rtcp_packet_transport, |
2122 int flags) { | 2125 int flags) { |
2123 rtc::Thread* signaling_thread = rtc::Thread::Current(); | 2126 rtc::Thread* signaling_thread = rtc::Thread::Current(); |
2124 cricket::VideoChannel* channel = new cricket::VideoChannel( | 2127 cricket::VideoChannel* channel = new cricket::VideoChannel( |
2125 worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO, | 2128 worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO, |
2126 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); | 2129 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); |
2127 rtc::CryptoOptions crypto_options; | 2130 rtc::CryptoOptions crypto_options; |
2128 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; | 2131 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; |
2129 channel->SetCryptoOptions(crypto_options); | 2132 channel->SetCryptoOptions(crypto_options); |
2130 if (!channel->NeedsRtcpTransport()) { | 2133 if (!channel->NeedsRtcpTransport()) { |
2131 fake_rtcp_dtls_transport = nullptr; | 2134 fake_rtcp_dtls_transport = nullptr; |
2132 } | 2135 } |
2133 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, | 2136 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, |
2134 fake_rtp_packet_transport, fake_rtcp_packet_transport)) { | 2137 fake_rtp_packet_transport, fake_rtcp_packet_transport)) { |
2135 delete channel; | 2138 delete channel; |
2136 channel = NULL; | 2139 channel = nullptr; |
2137 } | 2140 } |
2138 return channel; | 2141 return channel; |
2139 } | 2142 } |
2140 | 2143 |
2141 // override to add 0 parameter | 2144 // override to add 0 parameter |
2142 template<> | 2145 template<> |
2143 bool ChannelTest<VideoTraits>::AddStream1(int id) { | 2146 bool ChannelTest<VideoTraits>::AddStream1(int id) { |
2144 return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id)); | 2147 return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id)); |
2145 } | 2148 } |
2146 | 2149 |
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3364 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); | 3367 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); |
3365 rtc::CryptoOptions crypto_options; | 3368 rtc::CryptoOptions crypto_options; |
3366 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; | 3369 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; |
3367 channel->SetCryptoOptions(crypto_options); | 3370 channel->SetCryptoOptions(crypto_options); |
3368 if (!channel->NeedsRtcpTransport()) { | 3371 if (!channel->NeedsRtcpTransport()) { |
3369 fake_rtcp_dtls_transport = nullptr; | 3372 fake_rtcp_dtls_transport = nullptr; |
3370 } | 3373 } |
3371 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, | 3374 if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport, |
3372 fake_rtp_packet_transport, fake_rtcp_packet_transport)) { | 3375 fake_rtp_packet_transport, fake_rtcp_packet_transport)) { |
3373 delete channel; | 3376 delete channel; |
3374 channel = NULL; | 3377 channel = nullptr; |
3375 } | 3378 } |
3376 return channel; | 3379 return channel; |
3377 } | 3380 } |
3378 | 3381 |
3379 template <> | 3382 template <> |
3380 void ChannelTest<DataTraits>::CreateContent( | 3383 void ChannelTest<DataTraits>::CreateContent( |
3381 int flags, | 3384 int flags, |
3382 const cricket::AudioCodec& audio_codec, | 3385 const cricket::AudioCodec& audio_codec, |
3383 const cricket::VideoCodec& video_codec, | 3386 const cricket::VideoCodec& video_codec, |
3384 cricket::DataContentDescription* data) { | 3387 cricket::DataContentDescription* data) { |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3779 ASSERT_TRUE(voice_channel_.Init_w(nullptr, nullptr, &fake_rtp_dtls_transport_, | 3782 ASSERT_TRUE(voice_channel_.Init_w(nullptr, nullptr, &fake_rtp_dtls_transport_, |
3780 &fake_rtcp_dtls_transport_)); | 3783 &fake_rtcp_dtls_transport_)); |
3781 EXPECT_DEATH(voice_channel_.SetTransports(&fake_rtp_dtls_transport_, | 3784 EXPECT_DEATH(voice_channel_.SetTransports(&fake_rtp_dtls_transport_, |
3782 &fake_rtp_dtls_transport_), | 3785 &fake_rtp_dtls_transport_), |
3783 ""); | 3786 ""); |
3784 } | 3787 } |
3785 | 3788 |
3786 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | 3789 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
3787 | 3790 |
3788 // TODO(pthatcher): TestSetReceiver? | 3791 // TODO(pthatcher): TestSetReceiver? |
OLD | NEW |