Index: talk/app/webrtc/webrtcsession_unittest.cc |
diff --git a/talk/app/webrtc/webrtcsession_unittest.cc b/talk/app/webrtc/webrtcsession_unittest.cc |
index ecbd5074cd328941cc9333dddec9ac767c197e4b..f1cc626aa0861170036314f2808e6d12d0dd34f8 100644 |
--- a/talk/app/webrtc/webrtcsession_unittest.cc |
+++ b/talk/app/webrtc/webrtcsession_unittest.cc |
@@ -26,6 +26,7 @@ |
*/ |
#include "talk/app/webrtc/audiotrack.h" |
+#include "talk/app/webrtc/dtlscertificate.h" |
#include "talk/app/webrtc/fakemetricsobserver.h" |
#include "talk/app/webrtc/jsepicecandidate.h" |
#include "talk/app/webrtc/jsepsessiondescription.h" |
@@ -158,6 +159,8 @@ static const char kSdpWithRtx[] = |
"a=rtpmap:96 rtx/90000\r\n" |
"a=fmtp:96 apt=0\r\n"; |
+enum DtlsCertificateGenerationMethod { PRE_GENERATED, DTLS_IDENTITY_STORE }; |
+ |
// Add some extra |newlines| to the |message| after |line|. |
static void InjectAfter(const std::string& line, |
const std::string& newlines, |
@@ -312,7 +315,8 @@ class FakeAudioRenderer : public cricket::AudioRenderer { |
cricket::AudioRenderer::Sink* sink_; |
}; |
-class WebRtcSessionTest : public testing::Test { |
+class WebRtcSessionTest |
+ : public testing::TestWithParam<DtlsCertificateGenerationMethod> { |
protected: |
// TODO Investigate why ChannelManager crashes, if it's created |
// after stun_server. |
@@ -357,8 +361,14 @@ class WebRtcSessionTest : public testing::Test { |
network_manager_.AddInterface(addr); |
} |
+ // If |certificate| != null then the certificate is used (DTLS on), otherwise |
+ // |dtls_identity_store| is used (DTLS on) to try to generate a certificate. |
+ // If null then DTLS is off by default, but this could be overwritten by |
+ // RTCConfiguration in which case a certificate is attempted to be generated |
+ // with an unspecified store. |
void Init( |
rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, |
+ const rtc::scoped_refptr<webrtc::DtlsCertificate>& certificate, |
const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { |
ASSERT_TRUE(session_.get() == NULL); |
session_.reset(new WebRtcSessionForTest( |
@@ -372,44 +382,66 @@ class WebRtcSessionTest : public testing::Test { |
EXPECT_EQ(PeerConnectionInterface::kIceGatheringNew, |
observer_.ice_gathering_state_); |
- EXPECT_TRUE(session_->Initialize( |
- options_, constraints_.get(), dtls_identity_store.Pass(), |
- rtc_configuration)); |
+ if (!certificate) { |
+ EXPECT_TRUE(session_->Initialize(options_, constraints_.get(), |
+ dtls_identity_store.Pass(), |
+ rtc_configuration)); |
+ } else { |
+ EXPECT_TRUE(session_->Initialize(options_, constraints_.get(), |
+ certificate, rtc_configuration)); |
+ } |
session_->set_metrics_observer(metrics_observer_); |
} |
void Init() { |
PeerConnectionInterface::RTCConfiguration configuration; |
- Init(nullptr, configuration); |
+ Init(nullptr, nullptr, configuration); |
} |
void InitWithIceTransport( |
PeerConnectionInterface::IceTransportsType ice_transport_type) { |
PeerConnectionInterface::RTCConfiguration configuration; |
configuration.type = ice_transport_type; |
- Init(nullptr, configuration); |
+ Init(nullptr, nullptr, configuration); |
} |
void InitWithBundlePolicy( |
PeerConnectionInterface::BundlePolicy bundle_policy) { |
PeerConnectionInterface::RTCConfiguration configuration; |
configuration.bundle_policy = bundle_policy; |
- Init(nullptr, configuration); |
+ Init(nullptr, nullptr, configuration); |
} |
void InitWithRtcpMuxPolicy( |
PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) { |
PeerConnectionInterface::RTCConfiguration configuration; |
configuration.rtcp_mux_policy = rtcp_mux_policy; |
- Init(nullptr, configuration); |
+ Init(nullptr, nullptr, configuration); |
+ } |
+ |
+ void InitWithDtlsCertSuccess( |
+ DtlsCertificateGenerationMethod cert_gen_method) { |
+ if (cert_gen_method == PRE_GENERATED) { |
+ PeerConnectionInterface::RTCConfiguration configuration; |
+ Init(nullptr, FakeDtlsIdentityStore::GenerateCertificate(), |
+ configuration); |
+ } else if (cert_gen_method == DTLS_IDENTITY_STORE) { |
+ rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
+ new FakeDtlsIdentityStore()); |
+ dtls_identity_store->set_should_fail(false); |
+ PeerConnectionInterface::RTCConfiguration configuration; |
+ Init(dtls_identity_store.Pass(), nullptr, configuration); |
+ } else { |
+ CHECK(false); |
+ } |
} |
- void InitWithDtls(bool identity_request_should_fail = false) { |
+ void InitWithDtlsCertGenFailure() { |
rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
new FakeDtlsIdentityStore()); |
- dtls_identity_store->set_should_fail(identity_request_should_fail); |
+ dtls_identity_store->set_should_fail(true); |
PeerConnectionInterface::RTCConfiguration configuration; |
- Init(dtls_identity_store.Pass(), configuration); |
+ Init(dtls_identity_store.Pass(), nullptr, configuration); |
} |
void InitWithDtmfCodec() { |
@@ -540,9 +572,10 @@ class WebRtcSessionTest : public testing::Test { |
desc_factory_->set_secure(cricket::SEC_DISABLED); |
std::string identity_name = "WebRTC" + |
rtc::ToString(rtc::CreateRandomId()); |
- // Confirmed to work with KT_RSA and KT_ECDSA. |
- identity_.reset(rtc::SSLIdentity::Generate(identity_name, rtc::KT_DEFAULT)); |
- tdesc_factory_->set_identity(identity_.get()); |
+ certificate_ = webrtc::DtlsCertificate::Create( |
+ rtc::scoped_ptr<rtc::SSLIdentity>( |
+ rtc::SSLIdentity::Generate(identity_name, rtc::KT_DEFAULT)).Pass()); |
+ tdesc_factory_->set_certificate(certificate_); |
tdesc_factory_->set_secure(cricket::SEC_REQUIRED); |
} |
@@ -1186,7 +1219,10 @@ class WebRtcSessionTest : public testing::Test { |
void VerifyMultipleAsyncCreateDescription( |
bool success, CreateSessionDescriptionRequest::Type type) { |
- InitWithDtls(!success); |
+ if (success) |
+ InitWithDtlsCertSuccess(DTLS_IDENTITY_STORE); |
+ else |
+ InitWithDtlsCertGenFailure(); |
SetFactoryDtlsSrtp(); |
if (type == CreateSessionDescriptionRequest::kAnswer) { |
cricket::MediaSessionOptions options; |
@@ -1240,7 +1276,7 @@ class WebRtcSessionTest : public testing::Test { |
cricket::FakeDeviceManager* device_manager_; |
rtc::scoped_ptr<cricket::ChannelManager> channel_manager_; |
rtc::scoped_ptr<cricket::TransportDescriptionFactory> tdesc_factory_; |
- rtc::scoped_ptr<rtc::SSLIdentity> identity_; |
+ rtc::scoped_refptr<webrtc::DtlsCertificate> certificate_; |
rtc::scoped_ptr<cricket::MediaSessionDescriptionFactory> desc_factory_; |
rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; |
rtc::scoped_ptr<rtc::VirtualSocketServer> vss_; |
@@ -1261,8 +1297,8 @@ class WebRtcSessionTest : public testing::Test { |
rtc::scoped_refptr<FakeMetricsObserver> metrics_observer_; |
}; |
-TEST_F(WebRtcSessionTest, TestInitializeWithDtls) { |
- InitWithDtls(); |
+TEST_P(WebRtcSessionTest, TestInitializeWithDtls) { |
+ InitWithDtlsCertSuccess(GetParam()); |
// SDES is disabled when DTLS is on. |
EXPECT_EQ(cricket::SEC_DISABLED, session_->SdesPolicy()); |
} |
@@ -1569,10 +1605,10 @@ TEST_F(WebRtcSessionTest, TestSetRemoteNonSdesAnswerWhenSdesOn) { |
// Test that we accept an offer with a DTLS fingerprint when DTLS is on |
// and that we return an answer with a DTLS fingerprint. |
-TEST_F(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { |
+TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
mediastream_signaling_.SendAudioVideoStream1(); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetFactoryDtlsSrtp(); |
cricket::MediaSessionOptions options; |
options.recv_video = true; |
@@ -1598,10 +1634,10 @@ TEST_F(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { |
// Test that we set a local offer with a DTLS fingerprint when DTLS is on |
// and then we accept a remote answer with a DTLS fingerprint successfully. |
-TEST_F(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { |
+TEST_P(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
mediastream_signaling_.SendAudioVideoStream1(); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetFactoryDtlsSrtp(); |
// Verify that we get a crypto fingerprint in the answer. |
@@ -1628,9 +1664,9 @@ TEST_F(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { |
// Test that if we support DTLS and the other side didn't offer a fingerprint, |
// we will fail to set the remote description. |
-TEST_F(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { |
+TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
cricket::MediaSessionOptions options; |
options.recv_video = true; |
options.bundle_enabled = true; |
@@ -1652,9 +1688,9 @@ TEST_F(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { |
// Test that we return a failure when applying a local answer that doesn't have |
// a DTLS fingerprint when DTLS is required. |
-TEST_F(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { |
+TEST_P(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SessionDescriptionInterface* offer = NULL; |
SessionDescriptionInterface* answer = NULL; |
CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer); |
@@ -1668,11 +1704,11 @@ TEST_F(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { |
// Test that we return a failure when applying a remote answer that doesn't have |
// a DTLS fingerprint when DTLS is required. |
-TEST_F(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { |
+TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
// Enable both SDES and DTLS, so that offer won't be outright rejected as a |
// result of using the "UDP/TLS/RTP/SAVPF" profile. |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
session_->SetSdesPolicy(cricket::SEC_ENABLED); |
SessionDescriptionInterface* offer = CreateOffer(); |
cricket::MediaSessionOptions options; |
@@ -1689,10 +1725,10 @@ TEST_F(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { |
// Test that we create a local offer without SDES or DTLS and accept a remote |
// answer without SDES or DTLS when encryption is disabled. |
-TEST_F(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { |
+TEST_P(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { |
mediastream_signaling_.SendAudioVideoStream1(); |
options_.disable_encryption = true; |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
// Verify that we get a crypto fingerprint in the answer. |
SessionDescriptionInterface* offer = CreateOffer(); |
@@ -1718,9 +1754,9 @@ TEST_F(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { |
// Test that we create a local answer without SDES or DTLS and accept a remote |
// offer without SDES or DTLS when encryption is disabled. |
-TEST_F(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) { |
+TEST_P(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) { |
options_.disable_encryption = true; |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
cricket::MediaSessionOptions options; |
options.recv_video = true; |
@@ -3470,7 +3506,7 @@ TEST_F(WebRtcSessionTest, TestRtpDataChannel) { |
EXPECT_EQ(cricket::DCT_RTP, data_engine_->last_channel_type()); |
} |
-TEST_F(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { |
+TEST_P(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
constraints_.reset(new FakeConstraints()); |
@@ -3478,26 +3514,26 @@ TEST_F(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { |
webrtc::MediaConstraintsInterface::kEnableRtpDataChannels, true); |
options_.disable_sctp_data_channels = false; |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
EXPECT_EQ(cricket::DCT_RTP, data_engine_->last_channel_type()); |
} |
-TEST_F(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { |
+TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL); |
EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL); |
} |
-TEST_F(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { |
+TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
SetFactoryDtlsSrtp(); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
// Create remote offer with SCTP. |
cricket::MediaSessionOptions options; |
@@ -3513,40 +3549,40 @@ TEST_F(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { |
EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL); |
} |
-TEST_F(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) { |
+TEST_P(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) { |
constraints_.reset(new FakeConstraints()); |
constraints_->AddOptional( |
webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, false); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type()); |
} |
-TEST_F(WebRtcSessionTest, TestSctpDataChannelWithDtls) { |
+TEST_P(WebRtcSessionTest, TestSctpDataChannelWithDtls) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
EXPECT_EQ(cricket::DCT_SCTP, data_engine_->last_channel_type()); |
} |
-TEST_F(WebRtcSessionTest, TestDisableSctpDataChannels) { |
+TEST_P(WebRtcSessionTest, TestDisableSctpDataChannels) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
options_.disable_sctp_data_channels = true; |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type()); |
} |
-TEST_F(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { |
+TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
const int new_send_port = 9998; |
const int new_recv_port = 7775; |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetFactoryDtlsSrtp(); |
// By default, don't actually add the codecs to desc_factory_; they don't |
@@ -3595,13 +3631,26 @@ TEST_F(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { |
EXPECT_EQ(new_recv_port, portnum); |
} |
+// Verifies that if a certificate is provided it is the one that will be used. |
+TEST_F(WebRtcSessionTest, TestUsesProvidedCertificate) { |
+ rtc::scoped_refptr<webrtc::DtlsCertificate> certificate = |
+ FakeDtlsIdentityStore::GenerateCertificate(); |
+ |
+ PeerConnectionInterface::RTCConfiguration configuration; |
+ Init(nullptr, certificate, configuration); |
+ EXPECT_TRUE_WAIT(!session_->IsWaitingForCertificate(), 1000); |
+ |
+ EXPECT_EQ(session_->certificate(), certificate); |
+} |
+ |
// Verifies that CreateOffer succeeds when CreateOffer is called before async |
-// identity generation is finished. |
-TEST_F(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { |
+// identity generation is finished (even if a certificate is provided this is |
+// an async op). |
+TEST_P(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
- EXPECT_TRUE(session_->waiting_for_identity()); |
+ EXPECT_TRUE(session_->IsWaitingForCertificate()); |
mediastream_signaling_.SendAudioVideoStream1(); |
rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
@@ -3611,10 +3660,11 @@ TEST_F(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { |
} |
// Verifies that CreateAnswer succeeds when CreateOffer is called before async |
-// identity generation is finished. |
-TEST_F(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { |
+// identity generation is finished (even if a certificate is provided this is |
+// an async op). |
+TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetFactoryDtlsSrtp(); |
cricket::MediaSessionOptions options; |
@@ -3631,12 +3681,13 @@ TEST_F(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { |
} |
// Verifies that CreateOffer succeeds when CreateOffer is called after async |
-// identity generation is finished. |
-TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { |
+// identity generation is finished (even if a certificate is provided this is |
+// an async op). |
+TEST_P(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
- EXPECT_TRUE_WAIT(!session_->waiting_for_identity(), 1000); |
+ EXPECT_TRUE_WAIT(!session_->IsWaitingForCertificate(), 1000); |
rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
EXPECT_TRUE(offer != NULL); |
@@ -3646,9 +3697,9 @@ TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { |
// identity generation fails. |
TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnFailure) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(true); |
+ InitWithDtlsCertGenFailure(); |
- EXPECT_TRUE_WAIT(!session_->waiting_for_identity(), 1000); |
+ EXPECT_TRUE_WAIT(!session_->IsWaitingForCertificate(), 1000); |
rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
EXPECT_TRUE(offer == NULL); |
@@ -3788,9 +3839,9 @@ TEST_F(WebRtcSessionTest, TestCombinedAudioVideoBweConstraint) { |
// Tests that we can renegotiate new media content with ICE candidates in the |
// new remote SDP. |
-TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { |
+TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetFactoryDtlsSrtp(); |
mediastream_signaling_.UseOptionsAudioOnly(); |
@@ -3818,9 +3869,9 @@ TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { |
// Tests that we can renegotiate new media content with ICE candidates separated |
// from the remote SDP. |
-TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) { |
+TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- InitWithDtls(); |
+ InitWithDtlsCertSuccess(GetParam()); |
SetFactoryDtlsSrtp(); |
mediastream_signaling_.UseOptionsAudioOnly(); |
@@ -3934,11 +3985,6 @@ TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) { |
session_.reset(); |
- // Make sure we process pending messages on the current (signaling) thread |
- // before checking we we got our callbacks. Quit() will do this and then |
- // immediately exit. We won't need the queue after this point anyway. |
- rtc::Thread::Current()->Quit(); |
- |
for (auto& o : observers) { |
// We expect to have received a notification now even if the session was |
// terminated. The offer creation may or may not have succeeded, but we |
@@ -3951,3 +3997,7 @@ TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) { |
// TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
// currently fails because upon disconnection and reconnection OnIceComplete is |
// called more than once without returning to IceGatheringGathering. |
+ |
+INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, |
+ WebRtcSessionTest, |
+ testing::Values(PRE_GENERATED, DTLS_IDENTITY_STORE)); |