aboutsummaryrefslogtreecommitdiff
path: root/pc/peerconnection_signaling_unittest.cc
diff options
context:
space:
mode:
authorSteve Anton <steveanton@webrtc.org>2018-02-01 11:32:31 -0800
committerCommit Bot <commit-bot@chromium.org>2018-02-01 21:28:41 +0000
commit7b581eb1cab0b2ccd0a2d60163bb2b73c244346a (patch)
tree17b56147c2b181c75ffaadbf62b0737e799b21cc /pc/peerconnection_signaling_unittest.cc
parente831b8c94d15e550084b5207af7522c6054f45e1 (diff)
downloadwebrtc-7b581eb1cab0b2ccd0a2d60163bb2b73c244346a.tar.gz
Reland "Parameterize PeerConnection signaling tests for Unified Plan"
Original change's description: > Parameterize PeerConnection signaling tests for Unified Plan > > This also changes the behavior of CreateAnswer to fail unless > the signaling state is kHaveRemoteOffer or kHaveLocalPranswer, > as per the WebRTC specification. > > Bug: webrtc:8765 > Change-Id: I60ac67cd92b17fcbff964afc14d049481e816a28 > Reviewed-on: https://webrtc-review.googlesource.com/41042 > Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> > Commit-Queue: Steve Anton <steveanton@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#21779} Bug: webrtc:8813 Change-Id: I9f608fcd0b7aca00b4c1092e271dbd9cd710c38a Reviewed-on: https://webrtc-review.googlesource.com/46861 Commit-Queue: Steve Anton <steveanton@webrtc.org> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> Reviewed-by: Steve Anton <steveanton@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21860}
Diffstat (limited to 'pc/peerconnection_signaling_unittest.cc')
-rw-r--r--pc/peerconnection_signaling_unittest.cc125
1 files changed, 67 insertions, 58 deletions
diff --git a/pc/peerconnection_signaling_unittest.cc b/pc/peerconnection_signaling_unittest.cc
index cd26f8ba51..2cb2fc7c4b 100644
--- a/pc/peerconnection_signaling_unittest.cc
+++ b/pc/peerconnection_signaling_unittest.cc
@@ -55,12 +55,14 @@ class PeerConnectionWrapperForSignalingTest : public PeerConnectionWrapper {
}
};
-class PeerConnectionSignalingTest : public ::testing::Test {
+class PeerConnectionSignalingBaseTest : public ::testing::Test {
protected:
typedef std::unique_ptr<PeerConnectionWrapperForSignalingTest> WrapperPtr;
- PeerConnectionSignalingTest()
- : vss_(new rtc::VirtualSocketServer()), main_(vss_.get()) {
+ explicit PeerConnectionSignalingBaseTest(SdpSemantics sdp_semantics)
+ : vss_(new rtc::VirtualSocketServer()),
+ main_(vss_.get()),
+ sdp_semantics_(sdp_semantics) {
#ifdef WEBRTC_ANDROID
InitializeAndroidObjects();
#endif
@@ -76,8 +78,10 @@ class PeerConnectionSignalingTest : public ::testing::Test {
WrapperPtr CreatePeerConnection(const RTCConfiguration& config) {
auto observer = rtc::MakeUnique<MockPeerConnectionObserver>();
- auto pc = pc_factory_->CreatePeerConnection(config, nullptr, nullptr,
- observer.get());
+ RTCConfiguration modified_config = config;
+ modified_config.sdp_semantics = sdp_semantics_;
+ auto pc = pc_factory_->CreatePeerConnection(modified_config, nullptr,
+ nullptr, observer.get());
if (!pc) {
return nullptr;
}
@@ -102,16 +106,24 @@ class PeerConnectionSignalingTest : public ::testing::Test {
std::unique_ptr<rtc::VirtualSocketServer> vss_;
rtc::AutoSocketServerThread main_;
rtc::scoped_refptr<PeerConnectionFactoryInterface> pc_factory_;
+ const SdpSemantics sdp_semantics_;
};
-TEST_F(PeerConnectionSignalingTest, SetLocalOfferTwiceWorks) {
+class PeerConnectionSignalingTest
+ : public PeerConnectionSignalingBaseTest,
+ public ::testing::WithParamInterface<SdpSemantics> {
+ protected:
+ PeerConnectionSignalingTest() : PeerConnectionSignalingBaseTest(GetParam()) {}
+};
+
+TEST_P(PeerConnectionSignalingTest, SetLocalOfferTwiceWorks) {
auto caller = CreatePeerConnection();
EXPECT_TRUE(caller->SetLocalDescription(caller->CreateOffer()));
EXPECT_TRUE(caller->SetLocalDescription(caller->CreateOffer()));
}
-TEST_F(PeerConnectionSignalingTest, SetRemoteOfferTwiceWorks) {
+TEST_P(PeerConnectionSignalingTest, SetRemoteOfferTwiceWorks) {
auto caller = CreatePeerConnection();
auto callee = CreatePeerConnection();
@@ -119,14 +131,14 @@ TEST_F(PeerConnectionSignalingTest, SetRemoteOfferTwiceWorks) {
EXPECT_TRUE(callee->SetRemoteDescription(caller->CreateOffer()));
}
-TEST_F(PeerConnectionSignalingTest, FailToSetNullLocalDescription) {
+TEST_P(PeerConnectionSignalingTest, FailToSetNullLocalDescription) {
auto caller = CreatePeerConnection();
std::string error;
ASSERT_FALSE(caller->SetLocalDescription(nullptr, &error));
EXPECT_EQ("SessionDescription is NULL.", error);
}
-TEST_F(PeerConnectionSignalingTest, FailToSetNullRemoteDescription) {
+TEST_P(PeerConnectionSignalingTest, FailToSetNullRemoteDescription) {
auto caller = CreatePeerConnection();
std::string error;
ASSERT_FALSE(caller->SetRemoteDescription(nullptr, &error));
@@ -142,9 +154,15 @@ TEST_F(PeerConnectionSignalingTest, FailToSetNullRemoteDescription) {
// state the PeerConnection was created in before it was closed.
class PeerConnectionSignalingStateTest
- : public PeerConnectionSignalingTest,
- public ::testing::WithParamInterface<std::tuple<SignalingState, bool>> {
+ : public PeerConnectionSignalingBaseTest,
+ public ::testing::WithParamInterface<
+ std::tuple<SdpSemantics, SignalingState, bool>> {
protected:
+ PeerConnectionSignalingStateTest()
+ : PeerConnectionSignalingBaseTest(std::get<0>(GetParam())),
+ state_under_test_(std::make_tuple(std::get<1>(GetParam()),
+ std::get<2>(GetParam()))) {}
+
RTCConfiguration GetConfig() {
RTCConfiguration config;
config.certificates.push_back(
@@ -152,6 +170,10 @@ class PeerConnectionSignalingStateTest
return config;
}
+ WrapperPtr CreatePeerConnectionUnderTest() {
+ return CreatePeerConnectionInState(state_under_test_);
+ }
+
WrapperPtr CreatePeerConnectionInState(SignalingState state) {
return CreatePeerConnectionInState(std::make_tuple(state, false));
}
@@ -207,10 +229,12 @@ class PeerConnectionSignalingStateTest
return wrapper;
}
+
+ std::tuple<SignalingState, bool> state_under_test_;
};
TEST_P(PeerConnectionSignalingStateTest, CreateOffer) {
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() != SignalingState::kClosed) {
EXPECT_TRUE(wrapper->CreateOffer());
} else {
@@ -222,30 +246,21 @@ TEST_P(PeerConnectionSignalingStateTest, CreateOffer) {
}
TEST_P(PeerConnectionSignalingStateTest, CreateAnswer) {
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kHaveLocalPrAnswer ||
wrapper->signaling_state() == SignalingState::kHaveRemoteOffer) {
EXPECT_TRUE(wrapper->CreateAnswer());
} else {
std::string error;
ASSERT_FALSE(wrapper->CreateAnswer(RTCOfferAnswerOptions(), &error));
- if (wrapper->signaling_state() == SignalingState::kClosed) {
- EXPECT_PRED_FORMAT2(AssertStartsWith, error,
- "CreateAnswer called when PeerConnection is closed.");
- } else if (wrapper->signaling_state() ==
- SignalingState::kHaveRemotePrAnswer) {
- EXPECT_PRED_FORMAT2(AssertStartsWith, error,
- "CreateAnswer called without remote offer.");
- } else {
- EXPECT_PRED_FORMAT2(
- AssertStartsWith, error,
- "CreateAnswer can't be called before SetRemoteDescription.");
- }
+ EXPECT_PRED_FORMAT2(
+ AssertStartsWith, error,
+ "CreateAnswer called when PeerConnection is in a wrong state.");
}
}
TEST_P(PeerConnectionSignalingStateTest, SetLocalOffer) {
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kStable ||
wrapper->signaling_state() == SignalingState::kHaveLocalOffer) {
// Need to call CreateOffer on the PeerConnection under test, otherwise when
@@ -273,7 +288,7 @@ TEST_P(PeerConnectionSignalingStateTest, SetLocalPrAnswer) {
auto pranswer =
CloneSessionDescription(wrapper_for_pranswer->pc()->local_description());
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kHaveLocalPrAnswer ||
wrapper->signaling_state() == SignalingState::kHaveRemoteOffer) {
EXPECT_TRUE(wrapper->SetLocalDescription(std::move(pranswer)));
@@ -291,7 +306,7 @@ TEST_P(PeerConnectionSignalingStateTest, SetLocalAnswer) {
CreatePeerConnectionInState(SignalingState::kHaveRemoteOffer);
auto answer = wrapper_for_answer->CreateAnswer();
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kHaveLocalPrAnswer ||
wrapper->signaling_state() == SignalingState::kHaveRemoteOffer) {
EXPECT_TRUE(wrapper->SetLocalDescription(std::move(answer)));
@@ -310,7 +325,7 @@ TEST_P(PeerConnectionSignalingStateTest, SetRemoteOffer) {
auto offer =
CloneSessionDescription(wrapper_for_offer->pc()->remote_description());
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kStable ||
wrapper->signaling_state() == SignalingState::kHaveRemoteOffer) {
EXPECT_TRUE(wrapper->SetRemoteDescription(std::move(offer)));
@@ -329,7 +344,7 @@ TEST_P(PeerConnectionSignalingStateTest, SetRemotePrAnswer) {
auto pranswer =
CloneSessionDescription(wrapper_for_pranswer->pc()->remote_description());
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kHaveLocalOffer ||
wrapper->signaling_state() == SignalingState::kHaveRemotePrAnswer) {
EXPECT_TRUE(wrapper->SetRemoteDescription(std::move(pranswer)));
@@ -347,7 +362,7 @@ TEST_P(PeerConnectionSignalingStateTest, SetRemoteAnswer) {
CreatePeerConnectionInState(SignalingState::kHaveRemoteOffer);
auto answer = wrapper_for_answer->CreateAnswer();
- auto wrapper = CreatePeerConnectionInState(GetParam());
+ auto wrapper = CreatePeerConnectionUnderTest();
if (wrapper->signaling_state() == SignalingState::kHaveLocalOffer ||
wrapper->signaling_state() == SignalingState::kHaveRemotePrAnswer) {
EXPECT_TRUE(wrapper->SetRemoteDescription(std::move(answer)));
@@ -362,46 +377,35 @@ TEST_P(PeerConnectionSignalingStateTest, SetRemoteAnswer) {
INSTANTIATE_TEST_CASE_P(PeerConnectionSignalingTest,
PeerConnectionSignalingStateTest,
- Combine(Values(SignalingState::kStable,
+ Combine(Values(SdpSemantics::kPlanB,
+ SdpSemantics::kUnifiedPlan),
+ Values(SignalingState::kStable,
SignalingState::kHaveLocalOffer,
SignalingState::kHaveLocalPrAnswer,
SignalingState::kHaveRemoteOffer,
SignalingState::kHaveRemotePrAnswer),
Bool()));
-TEST_F(PeerConnectionSignalingTest,
- CreateAnswerSucceedsIfStableAndRemoteDescriptionIsOffer) {
- auto caller = CreatePeerConnection();
- auto callee = CreatePeerConnection();
-
- ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- ASSERT_TRUE(
- caller->SetRemoteDescription(callee->CreateAnswerAndSetAsLocal()));
-
- ASSERT_EQ(SignalingState::kStable, callee->signaling_state());
- EXPECT_TRUE(callee->CreateAnswer());
-}
-
-TEST_F(PeerConnectionSignalingTest,
- CreateAnswerFailsIfStableButRemoteDescriptionIsAnswer) {
+// Test that CreateAnswer fails if a round of offer/answer has been done and
+// the PeerConnection is in the stable state.
+TEST_P(PeerConnectionSignalingTest, CreateAnswerFailsIfStable) {
auto caller = CreatePeerConnection();
auto callee = CreatePeerConnection();
- ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- ASSERT_TRUE(
- caller->SetRemoteDescription(callee->CreateAnswerAndSetAsLocal()));
+ ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
ASSERT_EQ(SignalingState::kStable, caller->signaling_state());
- std::string error;
- ASSERT_FALSE(caller->CreateAnswer(RTCOfferAnswerOptions(), &error));
- EXPECT_EQ("CreateAnswer called without remote offer.", error);
+ EXPECT_FALSE(caller->CreateAnswer());
+
+ ASSERT_EQ(SignalingState::kStable, callee->signaling_state());
+ EXPECT_FALSE(callee->CreateAnswer());
}
// According to https://tools.ietf.org/html/rfc3264#section-8, the session id
// stays the same but the version must be incremented if a later, different
// session description is generated. These two tests verify that is the case for
// both offers and answers.
-TEST_F(PeerConnectionSignalingTest,
+TEST_P(PeerConnectionSignalingTest,
SessionVersionIncrementedInSubsequentDifferentOffer) {
auto caller = CreatePeerConnection();
auto callee = CreatePeerConnection();
@@ -422,14 +426,14 @@ TEST_F(PeerConnectionSignalingTest,
EXPECT_LT(rtc::FromString<uint64_t>(original_version),
rtc::FromString<uint64_t>(later_offer->session_version()));
}
-TEST_F(PeerConnectionSignalingTest,
+TEST_P(PeerConnectionSignalingTest,
SessionVersionIncrementedInSubsequentDifferentAnswer) {
auto caller = CreatePeerConnection();
auto callee = CreatePeerConnection();
ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- auto original_answer = callee->CreateAnswerAndSetAsLocal();
+ auto original_answer = callee->CreateAnswer();
const std::string original_id = original_answer->session_id();
const std::string original_version = original_answer->session_version();
@@ -443,7 +447,7 @@ TEST_F(PeerConnectionSignalingTest,
rtc::FromString<uint64_t>(later_answer->session_version()));
}
-TEST_F(PeerConnectionSignalingTest, InitiatorFlagSetOnCallerAndNotOnCallee) {
+TEST_P(PeerConnectionSignalingTest, InitiatorFlagSetOnCallerAndNotOnCallee) {
auto caller = CreatePeerConnectionWithAudioVideo();
auto callee = CreatePeerConnectionWithAudioVideo();
@@ -466,7 +470,7 @@ TEST_F(PeerConnectionSignalingTest, InitiatorFlagSetOnCallerAndNotOnCallee) {
// PeerConnection and make sure we get success/failure callbacks for all of the
// requests.
// Background: crbug.com/507307
-TEST_F(PeerConnectionSignalingTest, CreateOffersAndShutdown) {
+TEST_P(PeerConnectionSignalingTest, CreateOffersAndShutdown) {
auto caller = CreatePeerConnection();
RTCOfferAnswerOptions options;
@@ -491,4 +495,9 @@ TEST_F(PeerConnectionSignalingTest, CreateOffersAndShutdown) {
}
}
+INSTANTIATE_TEST_CASE_P(PeerConnectionSignalingTest,
+ PeerConnectionSignalingTest,
+ Values(SdpSemantics::kPlanB,
+ SdpSemantics::kUnifiedPlan));
+
} // namespace webrtc