Parameterize PeerConnection crypto tests for Unified Plan
Bug: webrtc:8765
Change-Id: I7ece0ecb38f033d31428bde0ff592000f8934024
Reviewed-on: https://webrtc-review.googlesource.com/40502
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21703}
diff --git a/pc/peerconnection_crypto_unittest.cc b/pc/peerconnection_crypto_unittest.cc
index eb447d6..c6cfb90 100644
--- a/pc/peerconnection_crypto_unittest.cc
+++ b/pc/peerconnection_crypto_unittest.cc
@@ -32,12 +32,14 @@
constexpr int kGenerateCertTimeout = 1000;
-class PeerConnectionCryptoUnitTest : public ::testing::Test {
+class PeerConnectionCryptoBaseTest : public ::testing::Test {
protected:
typedef std::unique_ptr<PeerConnectionWrapper> WrapperPtr;
- PeerConnectionCryptoUnitTest()
- : vss_(new rtc::VirtualSocketServer()), main_(vss_.get()) {
+ explicit PeerConnectionCryptoBaseTest(SdpSemantics sdp_semantics)
+ : vss_(new rtc::VirtualSocketServer()),
+ main_(vss_.get()),
+ sdp_semantics_(sdp_semantics) {
#ifdef WEBRTC_ANDROID
InitializeAndroidObjects();
#endif
@@ -61,8 +63,10 @@
auto fake_port_allocator = rtc::MakeUnique<cricket::FakePortAllocator>(
rtc::Thread::Current(), nullptr);
auto observer = rtc::MakeUnique<MockPeerConnectionObserver>();
+ RTCConfiguration modified_config = config;
+ modified_config.sdp_semantics = sdp_semantics_;
auto pc = pc_factory_->CreatePeerConnection(
- config, std::move(fake_port_allocator), std::move(cert_gen),
+ modified_config, std::move(fake_port_allocator), std::move(cert_gen),
observer.get());
if (!pc) {
return nullptr;
@@ -107,6 +111,7 @@
std::unique_ptr<rtc::VirtualSocketServer> vss_;
rtc::AutoSocketServerThread main_;
rtc::scoped_refptr<PeerConnectionFactoryInterface> pc_factory_;
+ const SdpSemantics sdp_semantics_;
};
SdpContentPredicate HaveDtlsFingerprint() {
@@ -143,6 +148,13 @@
};
}
+class PeerConnectionCryptoTest
+ : public PeerConnectionCryptoBaseTest,
+ public ::testing::WithParamInterface<SdpSemantics> {
+ protected:
+ PeerConnectionCryptoTest() : PeerConnectionCryptoBaseTest(GetParam()) {}
+};
+
SdpContentMutator RemoveSdesCryptos() {
return [](cricket::ContentInfo* content, cricket::TransportInfo* transport) {
content->media_description()->set_cryptos({});
@@ -157,7 +169,7 @@
// When DTLS is enabled, the SDP offer/answer should have a DTLS fingerprint and
// no SDES cryptos.
-TEST_F(PeerConnectionCryptoUnitTest, CorrectCryptoInOfferWhenDtlsEnabled) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInOfferWhenDtlsEnabled) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -171,7 +183,7 @@
EXPECT_TRUE(SdpContentsAll(HaveProtocol(cricket::kMediaProtocolDtlsSavpf),
offer->description()));
}
-TEST_F(PeerConnectionCryptoUnitTest, CorrectCryptoInAnswerWhenDtlsEnabled) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInAnswerWhenDtlsEnabled) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -190,7 +202,7 @@
// When DTLS is disabled, the SDP offer/answer should include SDES cryptos and
// should not have a DTLS fingerprint.
-TEST_F(PeerConnectionCryptoUnitTest, CorrectCryptoInOfferWhenDtlsDisabled) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInOfferWhenDtlsDisabled) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -204,7 +216,7 @@
EXPECT_TRUE(SdpContentsAll(HaveProtocol(cricket::kMediaProtocolSavpf),
offer->description()));
}
-TEST_F(PeerConnectionCryptoUnitTest, CorrectCryptoInAnswerWhenDtlsDisabled) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInAnswerWhenDtlsDisabled) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -223,8 +235,7 @@
// When encryption is disabled, the SDP offer/answer should have neither a DTLS
// fingerprint nor any SDES crypto options.
-TEST_F(PeerConnectionCryptoUnitTest,
- CorrectCryptoInOfferWhenEncryptionDisabled) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInOfferWhenEncryptionDisabled) {
PeerConnectionFactoryInterface::Options options;
options.disable_encryption = true;
pc_factory_->SetOptions(options);
@@ -242,8 +253,7 @@
EXPECT_TRUE(SdpContentsAll(HaveProtocol(cricket::kMediaProtocolAvpf),
offer->description()));
}
-TEST_F(PeerConnectionCryptoUnitTest,
- CorrectCryptoInAnswerWhenEncryptionDisabled) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInAnswerWhenEncryptionDisabled) {
PeerConnectionFactoryInterface::Options options;
options.disable_encryption = true;
pc_factory_->SetOptions(options);
@@ -268,7 +278,7 @@
// should have the correct ciphers in the SDES crypto options.
// With GCM cipher suites enabled, there will be 3 cryptos in the offer and 1
// in the answer.
-TEST_F(PeerConnectionCryptoUnitTest, CorrectCryptoInOfferWithSdesAndGcm) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInOfferWithSdesAndGcm) {
PeerConnectionFactoryInterface::Options options;
options.crypto_options.enable_gcm_crypto_suites = true;
pc_factory_->SetOptions(options);
@@ -283,7 +293,7 @@
ASSERT_FALSE(offer->description()->contents().empty());
EXPECT_TRUE(SdpContentsAll(HaveSdesGcmCryptos(3), offer->description()));
}
-TEST_F(PeerConnectionCryptoUnitTest, CorrectCryptoInAnswerWithSdesAndGcm) {
+TEST_P(PeerConnectionCryptoTest, CorrectCryptoInAnswerWithSdesAndGcm) {
PeerConnectionFactoryInterface::Options options;
options.crypto_options.enable_gcm_crypto_suites = true;
pc_factory_->SetOptions(options);
@@ -301,7 +311,7 @@
EXPECT_TRUE(SdpContentsAll(HaveSdesGcmCryptos(1), answer->description()));
}
-TEST_F(PeerConnectionCryptoUnitTest, CanSetSdesGcmRemoteOfferAndLocalAnswer) {
+TEST_P(PeerConnectionCryptoTest, CanSetSdesGcmRemoteOfferAndLocalAnswer) {
PeerConnectionFactoryInterface::Options options;
options.crypto_options.enable_gcm_crypto_suites = true;
pc_factory_->SetOptions(options);
@@ -323,7 +333,7 @@
// The following group tests that two PeerConnections can successfully exchange
// an offer/answer when DTLS is off and that they will refuse any offer/answer
// applied locally/remotely if it does not include SDES cryptos.
-TEST_F(PeerConnectionCryptoUnitTest, ExchangeOfferAnswerWhenSdesOn) {
+TEST_P(PeerConnectionCryptoTest, ExchangeOfferAnswerWhenSdesOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -337,8 +347,7 @@
ASSERT_TRUE(answer);
ASSERT_TRUE(caller->SetRemoteDescription(std::move(answer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
- FailToSetLocalOfferWithNoCryptosWhenSdesOn) {
+TEST_P(PeerConnectionCryptoTest, FailToSetLocalOfferWithNoCryptosWhenSdesOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -348,8 +357,7 @@
EXPECT_FALSE(caller->SetLocalDescription(std::move(offer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
- FailToSetRemoteOfferWithNoCryptosWhenSdesOn) {
+TEST_P(PeerConnectionCryptoTest, FailToSetRemoteOfferWithNoCryptosWhenSdesOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -360,8 +368,7 @@
EXPECT_FALSE(callee->SetRemoteDescription(std::move(offer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
- FailToSetLocalAnswerWithNoCryptosWhenSdesOn) {
+TEST_P(PeerConnectionCryptoTest, FailToSetLocalAnswerWithNoCryptosWhenSdesOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -373,8 +380,7 @@
EXPECT_FALSE(callee->SetLocalDescription(std::move(answer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
- FailToSetRemoteAnswerWithNoCryptosWhenSdesOn) {
+TEST_P(PeerConnectionCryptoTest, FailToSetRemoteAnswerWithNoCryptosWhenSdesOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(false);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -390,7 +396,7 @@
// The following group tests that two PeerConnections can successfully exchange
// an offer/answer when DTLS is on and that they will refuse any offer/answer
// applied locally/remotely if it does not include a DTLS fingerprint.
-TEST_F(PeerConnectionCryptoUnitTest, ExchangeOfferAnswerWhenDtlsOn) {
+TEST_P(PeerConnectionCryptoTest, ExchangeOfferAnswerWhenDtlsOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
auto caller = CreatePeerConnectionWithAudioVideo(config);
@@ -404,7 +410,7 @@
ASSERT_TRUE(answer);
ASSERT_TRUE(caller->SetRemoteDescription(std::move(answer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
+TEST_P(PeerConnectionCryptoTest,
FailToSetLocalOfferWithNoFingerprintWhenDtlsOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
@@ -415,7 +421,7 @@
EXPECT_FALSE(caller->SetLocalDescription(std::move(offer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
+TEST_P(PeerConnectionCryptoTest,
FailToSetRemoteOfferWithNoFingerprintWhenDtlsOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
@@ -427,7 +433,7 @@
EXPECT_FALSE(callee->SetRemoteDescription(std::move(offer)));
}
-TEST_F(PeerConnectionCryptoUnitTest,
+TEST_P(PeerConnectionCryptoTest,
FailToSetLocalAnswerWithNoFingerprintWhenDtlsOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
@@ -438,7 +444,7 @@
auto answer = callee->CreateAnswer();
SdpContentsForEach(RemoveDtlsFingerprint(), answer->description());
}
-TEST_F(PeerConnectionCryptoUnitTest,
+TEST_P(PeerConnectionCryptoTest,
FailToSetRemoteAnswerWithNoFingerprintWhenDtlsOn) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
@@ -453,7 +459,7 @@
}
// Test that an offer/answer can be exchanged when encryption is disabled.
-TEST_F(PeerConnectionCryptoUnitTest, ExchangeOfferAnswerWhenNoEncryption) {
+TEST_P(PeerConnectionCryptoTest, ExchangeOfferAnswerWhenNoEncryption) {
PeerConnectionFactoryInterface::Options options;
options.disable_encryption = true;
pc_factory_->SetOptions(options);
@@ -474,7 +480,7 @@
// Tests that a DTLS call can be established when the certificate is specified
// in the PeerConnection config and no certificate generator is specified.
-TEST_F(PeerConnectionCryptoUnitTest,
+TEST_P(PeerConnectionCryptoTest,
ExchangeOfferAnswerWhenDtlsCertificateInConfig) {
RTCConfiguration caller_config;
caller_config.enable_dtls_srtp.emplace(true);
@@ -530,16 +536,20 @@
}
}
-class PeerConnectionCryptoDtlsCertGenUnitTest
- : public PeerConnectionCryptoUnitTest,
- public ::testing::WithParamInterface<
- ::testing::tuple<SdpType, CertGenTime, CertGenResult, size_t>> {
+class PeerConnectionCryptoDtlsCertGenTest
+ : public PeerConnectionCryptoBaseTest,
+ public ::testing::WithParamInterface<std::tuple<SdpSemantics,
+ SdpType,
+ CertGenTime,
+ CertGenResult,
+ size_t>> {
protected:
- PeerConnectionCryptoDtlsCertGenUnitTest() {
- sdp_type_ = ::testing::get<0>(GetParam());
- cert_gen_time_ = ::testing::get<1>(GetParam());
- cert_gen_result_ = ::testing::get<2>(GetParam());
- concurrent_calls_ = ::testing::get<3>(GetParam());
+ PeerConnectionCryptoDtlsCertGenTest()
+ : PeerConnectionCryptoBaseTest(std::get<0>(GetParam())) {
+ sdp_type_ = std::get<1>(GetParam());
+ cert_gen_time_ = std::get<2>(GetParam());
+ cert_gen_result_ = std::get<3>(GetParam());
+ concurrent_calls_ = std::get<4>(GetParam());
}
SdpType sdp_type_;
@@ -548,7 +558,7 @@
size_t concurrent_calls_;
};
-TEST_P(PeerConnectionCryptoDtlsCertGenUnitTest, TestCertificateGeneration) {
+TEST_P(PeerConnectionCryptoDtlsCertGenTest, TestCertificateGeneration) {
RTCConfiguration config;
config.enable_dtls_srtp.emplace(true);
auto owned_fake_certificate_generator =
@@ -600,9 +610,10 @@
}
INSTANTIATE_TEST_CASE_P(
- PeerConnectionCryptoUnitTest,
- PeerConnectionCryptoDtlsCertGenUnitTest,
- Combine(Values(SdpType::kOffer, SdpType::kAnswer),
+ PeerConnectionCryptoTest,
+ PeerConnectionCryptoDtlsCertGenTest,
+ Combine(Values(SdpSemantics::kPlanB, SdpSemantics::kUnifiedPlan),
+ Values(SdpType::kOffer, SdpType::kAnswer),
Values(CertGenTime::kBefore, CertGenTime::kDuring),
Values(CertGenResult::kSucceed, CertGenResult::kFail),
Values(1, 3)));
@@ -610,7 +621,7 @@
// Test that we can create and set an answer correctly when different
// SSL roles have been negotiated for different transports.
// See: https://bugs.chromium.org/p/webrtc/issues/detail?id=4525
-TEST_F(PeerConnectionCryptoUnitTest, CreateAnswerWithDifferentSslRoles) {
+TEST_P(PeerConnectionCryptoTest, CreateAnswerWithDifferentSslRoles) {
auto caller = CreatePeerConnectionWithAudioVideo();
auto callee = CreatePeerConnectionWithAudioVideo();
@@ -661,4 +672,9 @@
ASSERT_TRUE(callee->SetRemoteDescription(std::move(answer)));
}
+INSTANTIATE_TEST_CASE_P(PeerConnectionCryptoTest,
+ PeerConnectionCryptoTest,
+ Values(SdpSemantics::kPlanB,
+ SdpSemantics::kUnifiedPlan));
+
} // namespace webrtc