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

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

Issue 1528843005: Add support for GCM cipher suites from RFC 7714. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Disable GCM if ENABLE_EXTERNAL_AUTH is defined. Created 4 years, 5 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/api/peerconnectioninterface.h ('k') | webrtc/base/helpers.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 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 // Add kTelephoneEventCodec for dtmf test. 448 // Add kTelephoneEventCodec for dtmf test.
449 const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000, 449 const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000,
450 0, 1); 450 0, 1);
451 std::vector<cricket::AudioCodec> codecs; 451 std::vector<cricket::AudioCodec> codecs;
452 codecs.push_back(kTelephoneEventCodec); 452 codecs.push_back(kTelephoneEventCodec);
453 media_engine_->SetAudioCodecs(codecs); 453 media_engine_->SetAudioCodecs(codecs);
454 desc_factory_->set_audio_codecs(codecs, codecs); 454 desc_factory_->set_audio_codecs(codecs, codecs);
455 Init(); 455 Init();
456 } 456 }
457 457
458 void InitWithGcm() {
459 rtc::CryptoOptions crypto_options;
460 crypto_options.enable_gcm_crypto_suites = true;
461 channel_manager_->SetCryptoOptions(crypto_options);
462 with_gcm_ = true;
463 Init();
464 }
465
458 void SendAudioVideoStream1() { 466 void SendAudioVideoStream1() {
459 send_stream_1_ = true; 467 send_stream_1_ = true;
460 send_stream_2_ = false; 468 send_stream_2_ = false;
461 send_audio_ = true; 469 send_audio_ = true;
462 send_video_ = true; 470 send_video_ = true;
463 } 471 }
464 472
465 void SendAudioVideoStream2() { 473 void SendAudioVideoStream2() {
466 send_stream_1_ = false; 474 send_stream_1_ = false;
467 send_stream_2_ = true; 475 send_stream_2_ = true;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO); 546 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO);
539 } 547 }
540 session_options->bundle_enabled = 548 session_options->bundle_enabled =
541 session_options->bundle_enabled && 549 session_options->bundle_enabled &&
542 (session_options->has_audio() || session_options->has_video() || 550 (session_options->has_audio() || session_options->has_video() ||
543 session_options->has_data()); 551 session_options->has_data());
544 552
545 if (session_->data_channel_type() == cricket::DCT_SCTP && data_channel_) { 553 if (session_->data_channel_type() == cricket::DCT_SCTP && data_channel_) {
546 session_options->data_channel_type = cricket::DCT_SCTP; 554 session_options->data_channel_type = cricket::DCT_SCTP;
547 } 555 }
556
557 if (with_gcm_) {
558 session_options->crypto_options.enable_gcm_crypto_suites = true;
559 }
548 } 560 }
549 561
550 void GetOptionsForAnswer(cricket::MediaSessionOptions* session_options) { 562 void GetOptionsForAnswer(cricket::MediaSessionOptions* session_options) {
551 // ParseConstraintsForAnswer is used to set some defaults. 563 // ParseConstraintsForAnswer is used to set some defaults.
552 ASSERT_TRUE(webrtc::ParseConstraintsForAnswer(nullptr, session_options)); 564 ASSERT_TRUE(webrtc::ParseConstraintsForAnswer(nullptr, session_options));
553 565
554 AddStreamsToOptions(session_options); 566 AddStreamsToOptions(session_options);
555 session_options->bundle_enabled = 567 session_options->bundle_enabled =
556 session_options->bundle_enabled && 568 session_options->bundle_enabled &&
557 (session_options->has_audio() || session_options->has_video() || 569 (session_options->has_audio() || session_options->has_video() ||
558 session_options->has_data()); 570 session_options->has_data());
559 571
560 if (session_->data_channel_type() == cricket::DCT_SCTP) { 572 if (session_->data_channel_type() == cricket::DCT_SCTP) {
561 session_options->data_channel_type = cricket::DCT_SCTP; 573 session_options->data_channel_type = cricket::DCT_SCTP;
562 } 574 }
575
576 if (with_gcm_) {
577 session_options->crypto_options.enable_gcm_crypto_suites = true;
578 }
563 } 579 }
564 580
565 // Creates a local offer and applies it. Starts ICE. 581 // Creates a local offer and applies it. Starts ICE.
566 // Call SendAudioVideoStreamX() before this function 582 // Call SendAudioVideoStreamX() before this function
567 // to decide which streams to create. 583 // to decide which streams to create.
568 void InitiateCall() { 584 void InitiateCall() {
569 SessionDescriptionInterface* offer = CreateOffer(); 585 SessionDescriptionInterface* offer = CreateOffer();
570 SetLocalDescriptionWithoutError(offer); 586 SetLocalDescriptionWithoutError(offer);
571 EXPECT_TRUE_WAIT(PeerConnectionInterface::kIceGatheringNew != 587 EXPECT_TRUE_WAIT(PeerConnectionInterface::kIceGatheringNew !=
572 observer_.ice_gathering_state_, 588 observer_.ice_gathering_state_,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 options.recv_video = true; 631 options.recv_video = true;
616 options.recv_audio = true; 632 options.recv_audio = true;
617 return CreateAnswer(options); 633 return CreateAnswer(options);
618 } 634 }
619 635
620 bool ChannelsExist() const { 636 bool ChannelsExist() const {
621 return (session_->voice_channel() != NULL && 637 return (session_->voice_channel() != NULL &&
622 session_->video_channel() != NULL); 638 session_->video_channel() != NULL);
623 } 639 }
624 640
625 void VerifyCryptoParams(const cricket::SessionDescription* sdp) { 641 void VerifyCryptoParams(const cricket::SessionDescription* sdp,
642 bool gcm_enabled = false) {
626 ASSERT_TRUE(session_.get() != NULL); 643 ASSERT_TRUE(session_.get() != NULL);
627 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); 644 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp);
628 ASSERT_TRUE(content != NULL); 645 ASSERT_TRUE(content != NULL);
629 const cricket::AudioContentDescription* audio_content = 646 const cricket::AudioContentDescription* audio_content =
630 static_cast<const cricket::AudioContentDescription*>( 647 static_cast<const cricket::AudioContentDescription*>(
631 content->description); 648 content->description);
632 ASSERT_TRUE(audio_content != NULL); 649 ASSERT_TRUE(audio_content != NULL);
633 ASSERT_EQ(1U, audio_content->cryptos().size()); 650 if (!gcm_enabled) {
634 ASSERT_EQ(47U, audio_content->cryptos()[0].key_params.size()); 651 ASSERT_EQ(1U, audio_content->cryptos().size());
635 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80", 652 ASSERT_EQ(47U, audio_content->cryptos()[0].key_params.size());
636 audio_content->cryptos()[0].cipher_suite); 653 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80",
637 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), 654 audio_content->cryptos()[0].cipher_suite);
638 audio_content->protocol()); 655 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf),
656 audio_content->protocol());
657 } else {
658 // The offer contains 3 possible crypto suites, the answer 1.
659 EXPECT_LE(1U, audio_content->cryptos().size());
660 EXPECT_NE(2U, audio_content->cryptos().size());
661 EXPECT_GE(3U, audio_content->cryptos().size());
662 ASSERT_EQ(67U, audio_content->cryptos()[0].key_params.size());
663 ASSERT_EQ("AEAD_AES_256_GCM",
664 audio_content->cryptos()[0].cipher_suite);
665 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf),
666 audio_content->protocol());
667 }
639 668
640 content = cricket::GetFirstVideoContent(sdp); 669 content = cricket::GetFirstVideoContent(sdp);
641 ASSERT_TRUE(content != NULL); 670 ASSERT_TRUE(content != NULL);
642 const cricket::VideoContentDescription* video_content = 671 const cricket::VideoContentDescription* video_content =
643 static_cast<const cricket::VideoContentDescription*>( 672 static_cast<const cricket::VideoContentDescription*>(
644 content->description); 673 content->description);
645 ASSERT_TRUE(video_content != NULL); 674 ASSERT_TRUE(video_content != NULL);
646 ASSERT_EQ(1U, video_content->cryptos().size()); 675 if (!gcm_enabled) {
647 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80", 676 ASSERT_EQ(1U, video_content->cryptos().size());
648 video_content->cryptos()[0].cipher_suite); 677 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80",
649 ASSERT_EQ(47U, video_content->cryptos()[0].key_params.size()); 678 video_content->cryptos()[0].cipher_suite);
650 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), 679 ASSERT_EQ(47U, video_content->cryptos()[0].key_params.size());
651 video_content->protocol()); 680 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf),
681 video_content->protocol());
682 } else {
683 // The offer contains 3 possible crypto suites, the answer 1.
684 EXPECT_LE(1U, video_content->cryptos().size());
685 EXPECT_NE(2U, video_content->cryptos().size());
686 EXPECT_GE(3U, video_content->cryptos().size());
687 ASSERT_EQ("AEAD_AES_256_GCM",
688 video_content->cryptos()[0].cipher_suite);
689 ASSERT_EQ(67U, video_content->cryptos()[0].key_params.size());
690 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf),
691 video_content->protocol());
692 }
652 } 693 }
653 694
654 void VerifyNoCryptoParams(const cricket::SessionDescription* sdp, bool dtls) { 695 void VerifyNoCryptoParams(const cricket::SessionDescription* sdp, bool dtls) {
655 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); 696 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp);
656 ASSERT_TRUE(content != NULL); 697 ASSERT_TRUE(content != NULL);
657 const cricket::AudioContentDescription* audio_content = 698 const cricket::AudioContentDescription* audio_content =
658 static_cast<const cricket::AudioContentDescription*>( 699 static_cast<const cricket::AudioContentDescription*>(
659 content->description); 700 content->description);
660 ASSERT_TRUE(audio_content != NULL); 701 ASSERT_TRUE(audio_content != NULL);
661 ASSERT_EQ(0U, audio_content->cryptos().size()); 702 ASSERT_EQ(0U, audio_content->cryptos().size());
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
1457 // The following flags affect options created for CreateOffer/CreateAnswer. 1498 // The following flags affect options created for CreateOffer/CreateAnswer.
1458 bool send_stream_1_ = false; 1499 bool send_stream_1_ = false;
1459 bool send_stream_2_ = false; 1500 bool send_stream_2_ = false;
1460 bool send_audio_ = false; 1501 bool send_audio_ = false;
1461 bool send_video_ = false; 1502 bool send_video_ = false;
1462 rtc::scoped_refptr<DataChannel> data_channel_; 1503 rtc::scoped_refptr<DataChannel> data_channel_;
1463 // Last values received from data channel creation signal. 1504 // Last values received from data channel creation signal.
1464 std::string last_data_channel_label_; 1505 std::string last_data_channel_label_;
1465 InternalDataChannelInit last_data_channel_config_; 1506 InternalDataChannelInit last_data_channel_config_;
1466 bool session_destroyed_ = false; 1507 bool session_destroyed_ = false;
1508 bool with_gcm_ = false;
1467 }; 1509 };
1468 1510
1469 TEST_P(WebRtcSessionTest, TestInitializeWithDtls) { 1511 TEST_P(WebRtcSessionTest, TestInitializeWithDtls) {
1470 InitWithDtls(GetParam()); 1512 InitWithDtls(GetParam());
1471 // SDES is disabled when DTLS is on. 1513 // SDES is disabled when DTLS is on.
1472 EXPECT_EQ(cricket::SEC_DISABLED, session_->SdesPolicy()); 1514 EXPECT_EQ(cricket::SEC_DISABLED, session_->SdesPolicy());
1473 } 1515 }
1474 1516
1475 TEST_F(WebRtcSessionTest, TestInitializeWithoutDtls) { 1517 TEST_F(WebRtcSessionTest, TestInitializeWithoutDtls) {
1476 Init(); 1518 Init();
(...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after
2755 TEST_F(WebRtcSessionTest, VerifyCryptoParamsInSDP) { 2797 TEST_F(WebRtcSessionTest, VerifyCryptoParamsInSDP) {
2756 Init(); 2798 Init();
2757 SendAudioVideoStream1(); 2799 SendAudioVideoStream1();
2758 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2800 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
2759 VerifyCryptoParams(offer->description()); 2801 VerifyCryptoParams(offer->description());
2760 SetRemoteDescriptionWithoutError(offer.release()); 2802 SetRemoteDescriptionWithoutError(offer.release());
2761 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 2803 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
2762 VerifyCryptoParams(answer->description()); 2804 VerifyCryptoParams(answer->description());
2763 } 2805 }
2764 2806
2807 TEST_F(WebRtcSessionTest, VerifyCryptoParamsInSDPGcm) {
2808 InitWithGcm();
2809 SendAudioVideoStream1();
2810 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
2811 VerifyCryptoParams(offer->description(), true);
2812 SetRemoteDescriptionWithoutError(offer.release());
2813 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
2814 VerifyCryptoParams(answer->description(), true);
2815 }
2816
2765 TEST_F(WebRtcSessionTest, VerifyNoCryptoParamsInSDP) { 2817 TEST_F(WebRtcSessionTest, VerifyNoCryptoParamsInSDP) {
2766 options_.disable_encryption = true; 2818 options_.disable_encryption = true;
2767 Init(); 2819 Init();
2768 SendAudioVideoStream1(); 2820 SendAudioVideoStream1();
2769 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2821 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
2770 VerifyNoCryptoParams(offer->description(), false); 2822 VerifyNoCryptoParams(offer->description(), false);
2771 } 2823 }
2772 2824
2773 TEST_F(WebRtcSessionTest, VerifyAnswerFromNonCryptoOffer) { 2825 TEST_F(WebRtcSessionTest, VerifyAnswerFromNonCryptoOffer) {
2774 Init(); 2826 Init();
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after
3380 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL)); 3432 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL));
3381 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer); 3433 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer);
3382 JsepSessionDescription* remote_offer = 3434 JsepSessionDescription* remote_offer =
3383 new JsepSessionDescription(JsepSessionDescription::kOffer); 3435 new JsepSessionDescription(JsepSessionDescription::kOffer);
3384 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL)); 3436 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL));
3385 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer); 3437 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer);
3386 // Trying unmodified SDP. 3438 // Trying unmodified SDP.
3387 SetLocalDescriptionWithoutError(offer); 3439 SetLocalDescriptionWithoutError(offer);
3388 } 3440 }
3389 3441
3442 TEST_F(WebRtcSessionTest, SetSetupGcm) {
3443 InitWithGcm();
3444 SendAudioVideoStream1();
3445 CreateAndSetRemoteOfferAndLocalAnswer();
3446 }
3447
3390 TEST_F(WebRtcSessionTest, CanNotInsertDtmf) { 3448 TEST_F(WebRtcSessionTest, CanNotInsertDtmf) {
3391 TestCanInsertDtmf(false); 3449 TestCanInsertDtmf(false);
3392 } 3450 }
3393 3451
3394 TEST_F(WebRtcSessionTest, CanInsertDtmf) { 3452 TEST_F(WebRtcSessionTest, CanInsertDtmf) {
3395 TestCanInsertDtmf(true); 3453 TestCanInsertDtmf(true);
3396 } 3454 }
3397 3455
3398 TEST_F(WebRtcSessionTest, InsertDtmf) { 3456 TEST_F(WebRtcSessionTest, InsertDtmf) {
3399 // Setup 3457 // Setup
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
4257 } 4315 }
4258 4316
4259 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test 4317 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test
4260 // currently fails because upon disconnection and reconnection OnIceComplete is 4318 // currently fails because upon disconnection and reconnection OnIceComplete is
4261 // called more than once without returning to IceGatheringGathering. 4319 // called more than once without returning to IceGatheringGathering.
4262 4320
4263 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, 4321 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests,
4264 WebRtcSessionTest, 4322 WebRtcSessionTest,
4265 testing::Values(ALREADY_GENERATED, 4323 testing::Values(ALREADY_GENERATED,
4266 DTLS_IDENTITY_STORE)); 4324 DTLS_IDENTITY_STORE));
OLDNEW
« no previous file with comments | « webrtc/api/peerconnectioninterface.h ('k') | webrtc/base/helpers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698