| OLD | NEW |
| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "webrtc/media/engine/fakewebrtccall.h" | 43 #include "webrtc/media/engine/fakewebrtccall.h" |
| 44 #include "webrtc/media/sctp/sctptransportinternal.h" | 44 #include "webrtc/media/sctp/sctptransportinternal.h" |
| 45 #include "webrtc/p2p/base/packettransportinterface.h" | 45 #include "webrtc/p2p/base/packettransportinterface.h" |
| 46 #include "webrtc/p2p/base/stunserver.h" | 46 #include "webrtc/p2p/base/stunserver.h" |
| 47 #include "webrtc/p2p/base/teststunserver.h" | 47 #include "webrtc/p2p/base/teststunserver.h" |
| 48 #include "webrtc/p2p/base/testturnserver.h" | 48 #include "webrtc/p2p/base/testturnserver.h" |
| 49 #include "webrtc/p2p/client/basicportallocator.h" | 49 #include "webrtc/p2p/client/basicportallocator.h" |
| 50 #include "webrtc/pc/channelmanager.h" | 50 #include "webrtc/pc/channelmanager.h" |
| 51 #include "webrtc/pc/mediasession.h" | 51 #include "webrtc/pc/mediasession.h" |
| 52 | 52 |
| 53 #define MAYBE_SKIP_TEST(feature) \ |
| 54 if (!(feature())) { \ |
| 55 LOG(LS_INFO) << "Feature disabled... skipping"; \ |
| 56 return; \ |
| 57 } |
| 58 |
| 53 using cricket::FakeVoiceMediaChannel; | 59 using cricket::FakeVoiceMediaChannel; |
| 54 using cricket::TransportInfo; | 60 using cricket::TransportInfo; |
| 55 using rtc::SocketAddress; | 61 using rtc::SocketAddress; |
| 56 using rtc::Thread; | 62 using rtc::Thread; |
| 57 using webrtc::CreateSessionDescription; | 63 using webrtc::CreateSessionDescription; |
| 58 using webrtc::CreateSessionDescriptionObserver; | 64 using webrtc::CreateSessionDescriptionObserver; |
| 59 using webrtc::CreateSessionDescriptionRequest; | 65 using webrtc::CreateSessionDescriptionRequest; |
| 60 using webrtc::DataChannel; | 66 using webrtc::DataChannel; |
| 61 using webrtc::FakeMetricsObserver; | 67 using webrtc::FakeMetricsObserver; |
| 62 using webrtc::IceCandidateCollection; | 68 using webrtc::IceCandidateCollection; |
| (...skipping 1774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1837 CreateCryptoOfferAndNonCryptoAnswer(&offer, &answer); | 1843 CreateCryptoOfferAndNonCryptoAnswer(&offer, &answer); |
| 1838 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1844 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1839 // the offer. | 1845 // the offer. |
| 1840 SetLocalDescriptionWithoutError(offer); | 1846 SetLocalDescriptionWithoutError(offer); |
| 1841 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); | 1847 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); |
| 1842 } | 1848 } |
| 1843 | 1849 |
| 1844 // Test that we accept an offer with a DTLS fingerprint when DTLS is on | 1850 // Test that we accept an offer with a DTLS fingerprint when DTLS is on |
| 1845 // and that we return an answer with a DTLS fingerprint. | 1851 // and that we return an answer with a DTLS fingerprint. |
| 1846 TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { | 1852 TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { |
| 1853 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 1847 SendAudioVideoStream1(); | 1854 SendAudioVideoStream1(); |
| 1848 InitWithDtls(GetParam()); | 1855 InitWithDtls(GetParam()); |
| 1849 SetFactoryDtlsSrtp(); | 1856 SetFactoryDtlsSrtp(); |
| 1850 cricket::MediaSessionOptions options; | 1857 cricket::MediaSessionOptions options; |
| 1851 options.recv_video = true; | 1858 options.recv_video = true; |
| 1852 JsepSessionDescription* offer = | 1859 JsepSessionDescription* offer = |
| 1853 CreateRemoteOffer(options, cricket::SEC_DISABLED); | 1860 CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 1854 ASSERT_TRUE(offer != NULL); | 1861 ASSERT_TRUE(offer != NULL); |
| 1855 VerifyFingerprintStatus(offer->description(), true); | 1862 VerifyFingerprintStatus(offer->description(), true); |
| 1856 VerifyNoCryptoParams(offer->description(), true); | 1863 VerifyNoCryptoParams(offer->description(), true); |
| 1857 | 1864 |
| 1858 // SetRemoteDescription will take the ownership of the offer. | 1865 // SetRemoteDescription will take the ownership of the offer. |
| 1859 SetRemoteDescriptionWithoutError(offer); | 1866 SetRemoteDescriptionWithoutError(offer); |
| 1860 | 1867 |
| 1861 // Verify that we get a crypto fingerprint in the answer. | 1868 // Verify that we get a crypto fingerprint in the answer. |
| 1862 SessionDescriptionInterface* answer = CreateAnswer(); | 1869 SessionDescriptionInterface* answer = CreateAnswer(); |
| 1863 ASSERT_TRUE(answer != NULL); | 1870 ASSERT_TRUE(answer != NULL); |
| 1864 VerifyFingerprintStatus(answer->description(), true); | 1871 VerifyFingerprintStatus(answer->description(), true); |
| 1865 // Check that we don't have an a=crypto line in the answer. | 1872 // Check that we don't have an a=crypto line in the answer. |
| 1866 VerifyNoCryptoParams(answer->description(), true); | 1873 VerifyNoCryptoParams(answer->description(), true); |
| 1867 | 1874 |
| 1868 // Now set the local description, which should work, even without a=crypto. | 1875 // Now set the local description, which should work, even without a=crypto. |
| 1869 SetLocalDescriptionWithoutError(answer); | 1876 SetLocalDescriptionWithoutError(answer); |
| 1870 } | 1877 } |
| 1871 | 1878 |
| 1872 // Test that we set a local offer with a DTLS fingerprint when DTLS is on | 1879 // Test that we set a local offer with a DTLS fingerprint when DTLS is on |
| 1873 // and then we accept a remote answer with a DTLS fingerprint successfully. | 1880 // and then we accept a remote answer with a DTLS fingerprint successfully. |
| 1874 TEST_P(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { | 1881 TEST_P(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { |
| 1882 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 1875 SendAudioVideoStream1(); | 1883 SendAudioVideoStream1(); |
| 1876 InitWithDtls(GetParam()); | 1884 InitWithDtls(GetParam()); |
| 1877 SetFactoryDtlsSrtp(); | 1885 SetFactoryDtlsSrtp(); |
| 1878 | 1886 |
| 1879 // Verify that we get a crypto fingerprint in the answer. | 1887 // Verify that we get a crypto fingerprint in the answer. |
| 1880 SessionDescriptionInterface* offer = CreateOffer(); | 1888 SessionDescriptionInterface* offer = CreateOffer(); |
| 1881 ASSERT_TRUE(offer != NULL); | 1889 ASSERT_TRUE(offer != NULL); |
| 1882 VerifyFingerprintStatus(offer->description(), true); | 1890 VerifyFingerprintStatus(offer->description(), true); |
| 1883 // Check that we don't have an a=crypto line in the offer. | 1891 // Check that we don't have an a=crypto line in the offer. |
| 1884 VerifyNoCryptoParams(offer->description(), true); | 1892 VerifyNoCryptoParams(offer->description(), true); |
| 1885 | 1893 |
| 1886 // Now set the local description, which should work, even without a=crypto. | 1894 // Now set the local description, which should work, even without a=crypto. |
| 1887 SetLocalDescriptionWithoutError(offer); | 1895 SetLocalDescriptionWithoutError(offer); |
| 1888 | 1896 |
| 1889 cricket::MediaSessionOptions options; | 1897 cricket::MediaSessionOptions options; |
| 1890 options.recv_video = true; | 1898 options.recv_video = true; |
| 1891 JsepSessionDescription* answer = | 1899 JsepSessionDescription* answer = |
| 1892 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); | 1900 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); |
| 1893 ASSERT_TRUE(answer != NULL); | 1901 ASSERT_TRUE(answer != NULL); |
| 1894 VerifyFingerprintStatus(answer->description(), true); | 1902 VerifyFingerprintStatus(answer->description(), true); |
| 1895 VerifyNoCryptoParams(answer->description(), true); | 1903 VerifyNoCryptoParams(answer->description(), true); |
| 1896 | 1904 |
| 1897 // SetRemoteDescription will take the ownership of the answer. | 1905 // SetRemoteDescription will take the ownership of the answer. |
| 1898 SetRemoteDescriptionWithoutError(answer); | 1906 SetRemoteDescriptionWithoutError(answer); |
| 1899 } | 1907 } |
| 1900 | 1908 |
| 1901 // Test that if we support DTLS and the other side didn't offer a fingerprint, | 1909 // Test that if we support DTLS and the other side didn't offer a fingerprint, |
| 1902 // we will fail to set the remote description. | 1910 // we will fail to set the remote description. |
| 1903 TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { | 1911 TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { |
| 1912 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 1904 InitWithDtls(GetParam()); | 1913 InitWithDtls(GetParam()); |
| 1905 cricket::MediaSessionOptions options; | 1914 cricket::MediaSessionOptions options; |
| 1906 options.recv_video = true; | 1915 options.recv_video = true; |
| 1907 options.bundle_enabled = true; | 1916 options.bundle_enabled = true; |
| 1908 JsepSessionDescription* offer = CreateRemoteOffer( | 1917 JsepSessionDescription* offer = CreateRemoteOffer( |
| 1909 options, cricket::SEC_REQUIRED); | 1918 options, cricket::SEC_REQUIRED); |
| 1910 ASSERT_TRUE(offer != NULL); | 1919 ASSERT_TRUE(offer != NULL); |
| 1911 VerifyFingerprintStatus(offer->description(), false); | 1920 VerifyFingerprintStatus(offer->description(), false); |
| 1912 VerifyCryptoParams(offer->description()); | 1921 VerifyCryptoParams(offer->description()); |
| 1913 | 1922 |
| 1914 // SetRemoteDescription will take the ownership of the offer. | 1923 // SetRemoteDescription will take the ownership of the offer. |
| 1915 SetRemoteDescriptionOfferExpectError( | 1924 SetRemoteDescriptionOfferExpectError( |
| 1916 kSdpWithoutDtlsFingerprint, offer); | 1925 kSdpWithoutDtlsFingerprint, offer); |
| 1917 | 1926 |
| 1918 offer = CreateRemoteOffer(options, cricket::SEC_REQUIRED); | 1927 offer = CreateRemoteOffer(options, cricket::SEC_REQUIRED); |
| 1919 // SetLocalDescription will take the ownership of the offer. | 1928 // SetLocalDescription will take the ownership of the offer. |
| 1920 SetLocalDescriptionOfferExpectError( | 1929 SetLocalDescriptionOfferExpectError( |
| 1921 kSdpWithoutDtlsFingerprint, offer); | 1930 kSdpWithoutDtlsFingerprint, offer); |
| 1922 } | 1931 } |
| 1923 | 1932 |
| 1924 // Test that we return a failure when applying a local answer that doesn't have | 1933 // Test that we return a failure when applying a local answer that doesn't have |
| 1925 // a DTLS fingerprint when DTLS is required. | 1934 // a DTLS fingerprint when DTLS is required. |
| 1926 TEST_P(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { | 1935 TEST_P(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { |
| 1936 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 1927 InitWithDtls(GetParam()); | 1937 InitWithDtls(GetParam()); |
| 1928 SessionDescriptionInterface* offer = NULL; | 1938 SessionDescriptionInterface* offer = NULL; |
| 1929 SessionDescriptionInterface* answer = NULL; | 1939 SessionDescriptionInterface* answer = NULL; |
| 1930 CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer); | 1940 CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer); |
| 1931 | 1941 |
| 1932 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1942 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1933 // the offer and answer. | 1943 // the offer and answer. |
| 1934 SetRemoteDescriptionWithoutError(offer); | 1944 SetRemoteDescriptionWithoutError(offer); |
| 1935 SetLocalDescriptionAnswerExpectError( | 1945 SetLocalDescriptionAnswerExpectError( |
| 1936 kSdpWithoutDtlsFingerprint, answer); | 1946 kSdpWithoutDtlsFingerprint, answer); |
| 1937 } | 1947 } |
| 1938 | 1948 |
| 1939 // Test that we return a failure when applying a remote answer that doesn't have | 1949 // Test that we return a failure when applying a remote answer that doesn't have |
| 1940 // a DTLS fingerprint when DTLS is required. | 1950 // a DTLS fingerprint when DTLS is required. |
| 1941 TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { | 1951 TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { |
| 1952 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 1942 InitWithDtls(GetParam()); | 1953 InitWithDtls(GetParam()); |
| 1943 SessionDescriptionInterface* offer = CreateOffer(); | 1954 SessionDescriptionInterface* offer = CreateOffer(); |
| 1944 cricket::MediaSessionOptions options; | 1955 cricket::MediaSessionOptions options; |
| 1945 options.recv_video = true; | 1956 options.recv_video = true; |
| 1946 std::unique_ptr<SessionDescriptionInterface> temp_offer( | 1957 std::unique_ptr<SessionDescriptionInterface> temp_offer( |
| 1947 CreateRemoteOffer(options, cricket::SEC_ENABLED)); | 1958 CreateRemoteOffer(options, cricket::SEC_ENABLED)); |
| 1948 JsepSessionDescription* answer = | 1959 JsepSessionDescription* answer = |
| 1949 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED); | 1960 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED); |
| 1950 | 1961 |
| 1951 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1962 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| (...skipping 1956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3908 | 3919 |
| 3909 TEST_F(WebRtcSessionTest, TestRtpDataChannel) { | 3920 TEST_F(WebRtcSessionTest, TestRtpDataChannel) { |
| 3910 configuration_.enable_rtp_data_channel = true; | 3921 configuration_.enable_rtp_data_channel = true; |
| 3911 Init(); | 3922 Init(); |
| 3912 SetLocalDescriptionWithDataChannel(); | 3923 SetLocalDescriptionWithDataChannel(); |
| 3913 ASSERT_TRUE(data_engine_); | 3924 ASSERT_TRUE(data_engine_); |
| 3914 EXPECT_NE(nullptr, data_engine_->GetChannel(0)); | 3925 EXPECT_NE(nullptr, data_engine_->GetChannel(0)); |
| 3915 } | 3926 } |
| 3916 | 3927 |
| 3917 TEST_P(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { | 3928 TEST_P(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { |
| 3929 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 3930 |
| 3918 configuration_.enable_rtp_data_channel = true; | 3931 configuration_.enable_rtp_data_channel = true; |
| 3919 options_.disable_sctp_data_channels = false; | 3932 options_.disable_sctp_data_channels = false; |
| 3920 | 3933 |
| 3921 InitWithDtls(GetParam()); | 3934 InitWithDtls(GetParam()); |
| 3922 | 3935 |
| 3923 SetLocalDescriptionWithDataChannel(); | 3936 SetLocalDescriptionWithDataChannel(); |
| 3924 EXPECT_NE(nullptr, data_engine_->GetChannel(0)); | 3937 EXPECT_NE(nullptr, data_engine_->GetChannel(0)); |
| 3925 } | 3938 } |
| 3926 | 3939 |
| 3927 // Test that sctp_content_name/sctp_transport_name (used for stats) are correct | 3940 // Test that sctp_content_name/sctp_transport_name (used for stats) are correct |
| 3928 // before and after BUNDLE is negotiated. | 3941 // before and after BUNDLE is negotiated. |
| 3929 TEST_P(WebRtcSessionTest, SctpContentAndTransportName) { | 3942 TEST_P(WebRtcSessionTest, SctpContentAndTransportName) { |
| 3943 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 3930 SetFactoryDtlsSrtp(); | 3944 SetFactoryDtlsSrtp(); |
| 3931 InitWithDtls(GetParam()); | 3945 InitWithDtls(GetParam()); |
| 3932 | 3946 |
| 3933 // Initially these fields should be empty. | 3947 // Initially these fields should be empty. |
| 3934 EXPECT_FALSE(session_->sctp_content_name()); | 3948 EXPECT_FALSE(session_->sctp_content_name()); |
| 3935 EXPECT_FALSE(session_->sctp_transport_name()); | 3949 EXPECT_FALSE(session_->sctp_transport_name()); |
| 3936 | 3950 |
| 3937 // Create offer with audio/video/data. | 3951 // Create offer with audio/video/data. |
| 3938 // Default bundle policy is "balanced", so data should be using its own | 3952 // Default bundle policy is "balanced", so data should be using its own |
| 3939 // transport. | 3953 // transport. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3953 answer_options.data_channel_type = cricket::DCT_SCTP; | 3967 answer_options.data_channel_type = cricket::DCT_SCTP; |
| 3954 SetRemoteDescriptionWithoutError(CreateRemoteAnswer( | 3968 SetRemoteDescriptionWithoutError(CreateRemoteAnswer( |
| 3955 session_->local_description(), answer_options, cricket::SEC_DISABLED)); | 3969 session_->local_description(), answer_options, cricket::SEC_DISABLED)); |
| 3956 ASSERT_TRUE(session_->sctp_content_name()); | 3970 ASSERT_TRUE(session_->sctp_content_name()); |
| 3957 ASSERT_TRUE(session_->sctp_transport_name()); | 3971 ASSERT_TRUE(session_->sctp_transport_name()); |
| 3958 EXPECT_EQ("data", *session_->sctp_content_name()); | 3972 EXPECT_EQ("data", *session_->sctp_content_name()); |
| 3959 EXPECT_EQ("audio", *session_->sctp_transport_name()); | 3973 EXPECT_EQ("audio", *session_->sctp_transport_name()); |
| 3960 } | 3974 } |
| 3961 | 3975 |
| 3962 TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { | 3976 TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { |
| 3977 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 3978 |
| 3963 InitWithDtls(GetParam()); | 3979 InitWithDtls(GetParam()); |
| 3964 | 3980 |
| 3965 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 3981 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 3966 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL); | 3982 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL); |
| 3967 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL); | 3983 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL); |
| 3968 } | 3984 } |
| 3969 | 3985 |
| 3970 TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { | 3986 TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { |
| 3987 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 3971 SetFactoryDtlsSrtp(); | 3988 SetFactoryDtlsSrtp(); |
| 3972 InitWithDtls(GetParam()); | 3989 InitWithDtls(GetParam()); |
| 3973 | 3990 |
| 3974 // Create remote offer with SCTP. | 3991 // Create remote offer with SCTP. |
| 3975 cricket::MediaSessionOptions options; | 3992 cricket::MediaSessionOptions options; |
| 3976 options.data_channel_type = cricket::DCT_SCTP; | 3993 options.data_channel_type = cricket::DCT_SCTP; |
| 3977 JsepSessionDescription* offer = | 3994 JsepSessionDescription* offer = |
| 3978 CreateRemoteOffer(options, cricket::SEC_DISABLED); | 3995 CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 3979 SetRemoteDescriptionWithoutError(offer); | 3996 SetRemoteDescriptionWithoutError(offer); |
| 3980 | 3997 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 3992 InitWithDtls(GetParam()); | 4009 InitWithDtls(GetParam()); |
| 3993 | 4010 |
| 3994 SetLocalDescriptionWithDataChannel(); | 4011 SetLocalDescriptionWithDataChannel(); |
| 3995 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); | 4012 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
| 3996 EXPECT_EQ(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); | 4013 EXPECT_EQ(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
| 3997 } | 4014 } |
| 3998 | 4015 |
| 3999 // Test that if DTLS is enabled, we end up with an SctpTransport created | 4016 // Test that if DTLS is enabled, we end up with an SctpTransport created |
| 4000 // (and not an RtpDataChannel). | 4017 // (and not an RtpDataChannel). |
| 4001 TEST_P(WebRtcSessionTest, TestSctpDataChannelWithDtls) { | 4018 TEST_P(WebRtcSessionTest, TestSctpDataChannelWithDtls) { |
| 4019 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4020 |
| 4002 InitWithDtls(GetParam()); | 4021 InitWithDtls(GetParam()); |
| 4003 | 4022 |
| 4004 SetLocalDescriptionWithDataChannel(); | 4023 SetLocalDescriptionWithDataChannel(); |
| 4005 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); | 4024 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
| 4006 EXPECT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); | 4025 EXPECT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
| 4007 } | 4026 } |
| 4008 | 4027 |
| 4009 // Test that if SCTP is disabled, we don't end up with an SctpTransport | 4028 // Test that if SCTP is disabled, we don't end up with an SctpTransport |
| 4010 // created (or an RtpDataChannel). | 4029 // created (or an RtpDataChannel). |
| 4011 TEST_P(WebRtcSessionTest, TestDisableSctpDataChannels) { | 4030 TEST_P(WebRtcSessionTest, TestDisableSctpDataChannels) { |
| 4031 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4012 options_.disable_sctp_data_channels = true; | 4032 options_.disable_sctp_data_channels = true; |
| 4013 InitWithDtls(GetParam()); | 4033 InitWithDtls(GetParam()); |
| 4014 | 4034 |
| 4015 SetLocalDescriptionWithDataChannel(); | 4035 SetLocalDescriptionWithDataChannel(); |
| 4016 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); | 4036 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
| 4017 EXPECT_EQ(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); | 4037 EXPECT_EQ(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
| 4018 } | 4038 } |
| 4019 | 4039 |
| 4020 TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { | 4040 TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { |
| 4041 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4021 const int new_send_port = 9998; | 4042 const int new_send_port = 9998; |
| 4022 const int new_recv_port = 7775; | 4043 const int new_recv_port = 7775; |
| 4023 | 4044 |
| 4024 InitWithDtls(GetParam()); | 4045 InitWithDtls(GetParam()); |
| 4025 SetFactoryDtlsSrtp(); | 4046 SetFactoryDtlsSrtp(); |
| 4026 | 4047 |
| 4027 // By default, don't actually add the codecs to desc_factory_; they don't | 4048 // By default, don't actually add the codecs to desc_factory_; they don't |
| 4028 // actually get serialized for SCTP in BuildMediaDescription(). Instead, | 4049 // actually get serialized for SCTP in BuildMediaDescription(). Instead, |
| 4029 // let the session description get parsed. That'll get the proper codecs | 4050 // let the session description get parsed. That'll get the proper codecs |
| 4030 // into the stream. | 4051 // into the stream. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 4052 fake_sctp_transport_factory_->last_fake_sctp_transport()->local_port()); | 4073 fake_sctp_transport_factory_->last_fake_sctp_transport()->local_port()); |
| 4053 EXPECT_EQ( | 4074 EXPECT_EQ( |
| 4054 new_send_port, | 4075 new_send_port, |
| 4055 fake_sctp_transport_factory_->last_fake_sctp_transport()->remote_port()); | 4076 fake_sctp_transport_factory_->last_fake_sctp_transport()->remote_port()); |
| 4056 } | 4077 } |
| 4057 | 4078 |
| 4058 // Verifies that when a session's SctpTransport receives an OPEN message, | 4079 // Verifies that when a session's SctpTransport receives an OPEN message, |
| 4059 // WebRtcSession signals the SctpTransport creation request with the expected | 4080 // WebRtcSession signals the SctpTransport creation request with the expected |
| 4060 // config. | 4081 // config. |
| 4061 TEST_P(WebRtcSessionTest, TestSctpDataChannelOpenMessage) { | 4082 TEST_P(WebRtcSessionTest, TestSctpDataChannelOpenMessage) { |
| 4083 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4084 |
| 4062 InitWithDtls(GetParam()); | 4085 InitWithDtls(GetParam()); |
| 4063 | 4086 |
| 4064 SetLocalDescriptionWithDataChannel(); | 4087 SetLocalDescriptionWithDataChannel(); |
| 4065 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); | 4088 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
| 4066 ASSERT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); | 4089 ASSERT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
| 4067 | 4090 |
| 4068 // Make the fake SCTP transport pretend it received an OPEN message. | 4091 // Make the fake SCTP transport pretend it received an OPEN message. |
| 4069 webrtc::DataChannelInit config; | 4092 webrtc::DataChannelInit config; |
| 4070 config.id = 1; | 4093 config.id = 1; |
| 4071 rtc::CopyOnWriteBuffer payload; | 4094 rtc::CopyOnWriteBuffer payload; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4091 Init(); | 4114 Init(); |
| 4092 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); | 4115 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); |
| 4093 | 4116 |
| 4094 EXPECT_EQ(session_->certificate_for_testing(), certificate); | 4117 EXPECT_EQ(session_->certificate_for_testing(), certificate); |
| 4095 } | 4118 } |
| 4096 | 4119 |
| 4097 // Verifies that CreateOffer succeeds when CreateOffer is called before async | 4120 // Verifies that CreateOffer succeeds when CreateOffer is called before async |
| 4098 // identity generation is finished (even if a certificate is provided this is | 4121 // identity generation is finished (even if a certificate is provided this is |
| 4099 // an async op). | 4122 // an async op). |
| 4100 TEST_P(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { | 4123 TEST_P(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { |
| 4124 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4101 InitWithDtls(GetParam()); | 4125 InitWithDtls(GetParam()); |
| 4102 | 4126 |
| 4103 EXPECT_TRUE(session_->waiting_for_certificate_for_testing()); | 4127 EXPECT_TRUE(session_->waiting_for_certificate_for_testing()); |
| 4104 SendAudioVideoStream1(); | 4128 SendAudioVideoStream1(); |
| 4105 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 4129 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 4106 | 4130 |
| 4107 EXPECT_TRUE(offer != NULL); | 4131 EXPECT_TRUE(offer != NULL); |
| 4108 VerifyNoCryptoParams(offer->description(), true); | 4132 VerifyNoCryptoParams(offer->description(), true); |
| 4109 VerifyFingerprintStatus(offer->description(), true); | 4133 VerifyFingerprintStatus(offer->description(), true); |
| 4110 } | 4134 } |
| 4111 | 4135 |
| 4112 // Verifies that CreateAnswer succeeds when CreateOffer is called before async | 4136 // Verifies that CreateAnswer succeeds when CreateOffer is called before async |
| 4113 // identity generation is finished (even if a certificate is provided this is | 4137 // identity generation is finished (even if a certificate is provided this is |
| 4114 // an async op). | 4138 // an async op). |
| 4115 TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { | 4139 TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { |
| 4140 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4116 InitWithDtls(GetParam()); | 4141 InitWithDtls(GetParam()); |
| 4117 SetFactoryDtlsSrtp(); | 4142 SetFactoryDtlsSrtp(); |
| 4118 | 4143 |
| 4119 cricket::MediaSessionOptions options; | 4144 cricket::MediaSessionOptions options; |
| 4120 options.recv_video = true; | 4145 options.recv_video = true; |
| 4121 std::unique_ptr<JsepSessionDescription> offer( | 4146 std::unique_ptr<JsepSessionDescription> offer( |
| 4122 CreateRemoteOffer(options, cricket::SEC_DISABLED)); | 4147 CreateRemoteOffer(options, cricket::SEC_DISABLED)); |
| 4123 ASSERT_TRUE(offer.get() != NULL); | 4148 ASSERT_TRUE(offer.get() != NULL); |
| 4124 SetRemoteDescriptionWithoutError(offer.release()); | 4149 SetRemoteDescriptionWithoutError(offer.release()); |
| 4125 | 4150 |
| 4126 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 4151 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 4127 EXPECT_TRUE(answer != NULL); | 4152 EXPECT_TRUE(answer != NULL); |
| 4128 VerifyNoCryptoParams(answer->description(), true); | 4153 VerifyNoCryptoParams(answer->description(), true); |
| 4129 VerifyFingerprintStatus(answer->description(), true); | 4154 VerifyFingerprintStatus(answer->description(), true); |
| 4130 } | 4155 } |
| 4131 | 4156 |
| 4132 // Verifies that CreateOffer succeeds when CreateOffer is called after async | 4157 // Verifies that CreateOffer succeeds when CreateOffer is called after async |
| 4133 // identity generation is finished (even if a certificate is provided this is | 4158 // identity generation is finished (even if a certificate is provided this is |
| 4134 // an async op). | 4159 // an async op). |
| 4135 TEST_P(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { | 4160 TEST_P(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { |
| 4161 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4136 InitWithDtls(GetParam()); | 4162 InitWithDtls(GetParam()); |
| 4137 | 4163 |
| 4138 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); | 4164 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); |
| 4139 | 4165 |
| 4140 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 4166 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 4141 EXPECT_TRUE(offer != NULL); | 4167 EXPECT_TRUE(offer != NULL); |
| 4142 } | 4168 } |
| 4143 | 4169 |
| 4144 // Verifies that CreateOffer fails when CreateOffer is called after async | 4170 // Verifies that CreateOffer fails when CreateOffer is called after async |
| 4145 // identity generation fails. | 4171 // identity generation fails. |
| 4146 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnFailure) { | 4172 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnFailure) { |
| 4173 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4147 InitWithDtlsIdentityGenFail(); | 4174 InitWithDtlsIdentityGenFail(); |
| 4148 | 4175 |
| 4149 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); | 4176 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); |
| 4150 | 4177 |
| 4151 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 4178 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 4152 EXPECT_TRUE(offer == NULL); | 4179 EXPECT_TRUE(offer == NULL); |
| 4153 } | 4180 } |
| 4154 | 4181 |
| 4155 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made | 4182 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made |
| 4156 // before async identity generation is finished. | 4183 // before async identity generation is finished. |
| 4157 TEST_P(WebRtcSessionTest, | 4184 TEST_P(WebRtcSessionTest, |
| 4158 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) { | 4185 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) { |
| 4186 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4159 VerifyMultipleAsyncCreateDescription(GetParam(), | 4187 VerifyMultipleAsyncCreateDescription(GetParam(), |
| 4160 CreateSessionDescriptionRequest::kOffer); | 4188 CreateSessionDescriptionRequest::kOffer); |
| 4161 } | 4189 } |
| 4162 | 4190 |
| 4163 // Verifies that CreateOffer fails when Multiple CreateOffer calls are made | 4191 // Verifies that CreateOffer fails when Multiple CreateOffer calls are made |
| 4164 // before async identity generation fails. | 4192 // before async identity generation fails. |
| 4165 TEST_F(WebRtcSessionTest, | 4193 TEST_F(WebRtcSessionTest, |
| 4166 TestMultipleCreateOfferBeforeIdentityRequestReturnFailure) { | 4194 TestMultipleCreateOfferBeforeIdentityRequestReturnFailure) { |
| 4195 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4167 VerifyMultipleAsyncCreateDescriptionIdentityGenFailure( | 4196 VerifyMultipleAsyncCreateDescriptionIdentityGenFailure( |
| 4168 CreateSessionDescriptionRequest::kOffer); | 4197 CreateSessionDescriptionRequest::kOffer); |
| 4169 } | 4198 } |
| 4170 | 4199 |
| 4171 // Verifies that CreateAnswer succeeds when Multiple CreateAnswer calls are made | 4200 // Verifies that CreateAnswer succeeds when Multiple CreateAnswer calls are made |
| 4172 // before async identity generation is finished. | 4201 // before async identity generation is finished. |
| 4173 TEST_P(WebRtcSessionTest, | 4202 TEST_P(WebRtcSessionTest, |
| 4174 TestMultipleCreateAnswerBeforeIdentityRequestReturnSuccess) { | 4203 TestMultipleCreateAnswerBeforeIdentityRequestReturnSuccess) { |
| 4204 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4175 VerifyMultipleAsyncCreateDescription( | 4205 VerifyMultipleAsyncCreateDescription( |
| 4176 GetParam(), CreateSessionDescriptionRequest::kAnswer); | 4206 GetParam(), CreateSessionDescriptionRequest::kAnswer); |
| 4177 } | 4207 } |
| 4178 | 4208 |
| 4179 // Verifies that CreateAnswer fails when Multiple CreateAnswer calls are made | 4209 // Verifies that CreateAnswer fails when Multiple CreateAnswer calls are made |
| 4180 // before async identity generation fails. | 4210 // before async identity generation fails. |
| 4181 TEST_F(WebRtcSessionTest, | 4211 TEST_F(WebRtcSessionTest, |
| 4182 TestMultipleCreateAnswerBeforeIdentityRequestReturnFailure) { | 4212 TestMultipleCreateAnswerBeforeIdentityRequestReturnFailure) { |
| 4213 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4183 VerifyMultipleAsyncCreateDescriptionIdentityGenFailure( | 4214 VerifyMultipleAsyncCreateDescriptionIdentityGenFailure( |
| 4184 CreateSessionDescriptionRequest::kAnswer); | 4215 CreateSessionDescriptionRequest::kAnswer); |
| 4185 } | 4216 } |
| 4186 | 4217 |
| 4187 // Verifies that setRemoteDescription fails when DTLS is disabled and the remote | 4218 // Verifies that setRemoteDescription fails when DTLS is disabled and the remote |
| 4188 // offer has no SDES crypto but only DTLS fingerprint. | 4219 // offer has no SDES crypto but only DTLS fingerprint. |
| 4189 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) { | 4220 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) { |
| 4190 // Init without DTLS. | 4221 // Init without DTLS. |
| 4191 Init(); | 4222 Init(); |
| 4192 // Create a remote offer with secured transport disabled. | 4223 // Create a remote offer with secured transport disabled. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4216 voice_channel_ = media_engine_->GetVoiceChannel(0); | 4247 voice_channel_ = media_engine_->GetVoiceChannel(0); |
| 4217 | 4248 |
| 4218 ASSERT_TRUE(voice_channel_ != NULL); | 4249 ASSERT_TRUE(voice_channel_ != NULL); |
| 4219 const cricket::AudioOptions& audio_options = voice_channel_->options(); | 4250 const cricket::AudioOptions& audio_options = voice_channel_->options(); |
| 4220 EXPECT_EQ(rtc::Optional<bool>(true), audio_options.combined_audio_video_bwe); | 4251 EXPECT_EQ(rtc::Optional<bool>(true), audio_options.combined_audio_video_bwe); |
| 4221 } | 4252 } |
| 4222 | 4253 |
| 4223 // Tests that we can renegotiate new media content with ICE candidates in the | 4254 // Tests that we can renegotiate new media content with ICE candidates in the |
| 4224 // new remote SDP. | 4255 // new remote SDP. |
| 4225 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { | 4256 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { |
| 4257 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4226 InitWithDtls(GetParam()); | 4258 InitWithDtls(GetParam()); |
| 4227 SetFactoryDtlsSrtp(); | 4259 SetFactoryDtlsSrtp(); |
| 4228 | 4260 |
| 4229 SendAudioOnlyStream2(); | 4261 SendAudioOnlyStream2(); |
| 4230 SessionDescriptionInterface* offer = CreateOffer(); | 4262 SessionDescriptionInterface* offer = CreateOffer(); |
| 4231 SetLocalDescriptionWithoutError(offer); | 4263 SetLocalDescriptionWithoutError(offer); |
| 4232 | 4264 |
| 4233 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); | 4265 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); |
| 4234 SetRemoteDescriptionWithoutError(answer); | 4266 SetRemoteDescriptionWithoutError(answer); |
| 4235 | 4267 |
| 4236 cricket::MediaSessionOptions options; | 4268 cricket::MediaSessionOptions options; |
| 4237 options.recv_video = true; | 4269 options.recv_video = true; |
| 4238 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); | 4270 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 4239 | 4271 |
| 4240 cricket::Candidate candidate1; | 4272 cricket::Candidate candidate1; |
| 4241 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000)); | 4273 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000)); |
| 4242 candidate1.set_component(1); | 4274 candidate1.set_component(1); |
| 4243 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1, | 4275 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1, |
| 4244 candidate1); | 4276 candidate1); |
| 4245 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); | 4277 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); |
| 4246 SetRemoteDescriptionWithoutError(offer); | 4278 SetRemoteDescriptionWithoutError(offer); |
| 4247 | 4279 |
| 4248 answer = CreateAnswer(); | 4280 answer = CreateAnswer(); |
| 4249 SetLocalDescriptionWithoutError(answer); | 4281 SetLocalDescriptionWithoutError(answer); |
| 4250 } | 4282 } |
| 4251 | 4283 |
| 4252 // Tests that we can renegotiate new media content with ICE candidates separated | 4284 // Tests that we can renegotiate new media content with ICE candidates separated |
| 4253 // from the remote SDP. | 4285 // from the remote SDP. |
| 4254 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) { | 4286 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) { |
| 4287 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
| 4255 InitWithDtls(GetParam()); | 4288 InitWithDtls(GetParam()); |
| 4256 SetFactoryDtlsSrtp(); | 4289 SetFactoryDtlsSrtp(); |
| 4257 | 4290 |
| 4258 SendAudioOnlyStream2(); | 4291 SendAudioOnlyStream2(); |
| 4259 SessionDescriptionInterface* offer = CreateOffer(); | 4292 SessionDescriptionInterface* offer = CreateOffer(); |
| 4260 SetLocalDescriptionWithoutError(offer); | 4293 SetLocalDescriptionWithoutError(offer); |
| 4261 | 4294 |
| 4262 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); | 4295 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); |
| 4263 SetRemoteDescriptionWithoutError(answer); | 4296 SetRemoteDescriptionWithoutError(answer); |
| 4264 | 4297 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4409 } | 4442 } |
| 4410 | 4443 |
| 4411 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test | 4444 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
| 4412 // currently fails because upon disconnection and reconnection OnIceComplete is | 4445 // currently fails because upon disconnection and reconnection OnIceComplete is |
| 4413 // called more than once without returning to IceGatheringGathering. | 4446 // called more than once without returning to IceGatheringGathering. |
| 4414 | 4447 |
| 4415 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, | 4448 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, |
| 4416 WebRtcSessionTest, | 4449 WebRtcSessionTest, |
| 4417 testing::Values(ALREADY_GENERATED, | 4450 testing::Values(ALREADY_GENERATED, |
| 4418 DTLS_IDENTITY_STORE)); | 4451 DTLS_IDENTITY_STORE)); |
| OLD | NEW |