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

Unified Diff: webrtc/api/peerconnectioninterface_unittest.cc

Issue 2587133004: Reland of: Adding error output param to SetConfiguration, using new RTCError type. (Closed)
Patch Set: Fixing compile error in less confusing way. Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/peerconnectioninterface.h ('k') | webrtc/api/peerconnectionproxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/peerconnectioninterface_unittest.cc
diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc
index d6da24ee19f709bc7d8ae133a1b747dbd3b57763..2da3755fcb7eef39f4491f2edfe1fe9790a5bb78 100644
--- a/webrtc/api/peerconnectioninterface_unittest.cc
+++ b/webrtc/api/peerconnectioninterface_unittest.cc
@@ -321,6 +321,8 @@ using webrtc::NotifierInterface;
using webrtc::ObserverInterface;
using webrtc::PeerConnectionInterface;
using webrtc::PeerConnectionObserver;
+using webrtc::RTCError;
+using webrtc::RTCErrorType;
using webrtc::RtpReceiverInterface;
using webrtc::RtpSenderInterface;
using webrtc::SdpParseError;
@@ -694,6 +696,17 @@ class PeerConnectionInterfaceTest : public testing::Test {
CreatePeerConnection(PeerConnectionInterface::RTCConfiguration(), nullptr);
}
+ // DTLS does not work in a loopback call, so is disabled for most of the
+ // tests in this file.
+ void CreatePeerConnectionWithoutDtls() {
+ FakeConstraints no_dtls_constraints;
+ no_dtls_constraints.AddMandatory(
+ webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, false);
+
+ CreatePeerConnection(PeerConnectionInterface::RTCConfiguration(),
+ &no_dtls_constraints);
+ }
+
void CreatePeerConnection(webrtc::MediaConstraintsInterface* constraints) {
CreatePeerConnection(PeerConnectionInterface::RTCConfiguration(),
constraints);
@@ -722,17 +735,6 @@ class PeerConnectionInterfaceTest : public testing::Test {
new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
port_allocator_ = port_allocator.get();
- // DTLS does not work in a loopback call, so is disabled for most of the
- // tests in this file. We only create a FakeIdentityService if the test
- // explicitly sets the constraint.
- FakeConstraints default_constraints;
- if (!constraints) {
- constraints = &default_constraints;
-
- default_constraints.AddMandatory(
- webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, false);
- }
-
std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator;
bool dtls;
if (FindConstraint(constraints,
@@ -898,7 +900,7 @@ class PeerConnectionInterfaceTest : public testing::Test {
}
void InitiateCall() {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create a local stream with audio&video tracks.
AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
CreateOfferReceiveAnswer();
@@ -1105,7 +1107,7 @@ class PeerConnectionInterfaceTest : public testing::Test {
}
std::unique_ptr<SessionDescriptionInterface> CreateOfferWithOneAudioStream() {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVoiceStream(kStreamLabel1);
std::unique_ptr<SessionDescriptionInterface> offer;
EXPECT_TRUE(DoCreateOffer(&offer, nullptr));
@@ -1281,7 +1283,7 @@ TEST_F(PeerConnectionInterfaceTest, GetConfigurationAfterSetConfiguration) {
}
TEST_F(PeerConnectionInterfaceTest, AddStreams) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVideoStream(kStreamLabel1);
AddVoiceStream(kStreamLabel2);
ASSERT_EQ(2u, pc_->local_streams()->count());
@@ -1311,7 +1313,7 @@ TEST_F(PeerConnectionInterfaceTest, AddStreams) {
// Test that the created offer includes streams we added.
TEST_F(PeerConnectionInterfaceTest, AddedStreamsPresentInOffer) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddAudioVideoStream(kStreamLabel1, "audio_track", "video_track");
std::unique_ptr<SessionDescriptionInterface> offer;
ASSERT_TRUE(DoCreateOffer(&offer, nullptr));
@@ -1355,7 +1357,7 @@ TEST_F(PeerConnectionInterfaceTest, AddedStreamsPresentInOffer) {
}
TEST_F(PeerConnectionInterfaceTest, RemoveStream) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVideoStream(kStreamLabel1);
ASSERT_EQ(1u, pc_->local_streams()->count());
pc_->RemoveStream(pc_->local_streams()->at(0));
@@ -1367,7 +1369,7 @@ TEST_F(PeerConnectionInterfaceTest, RemoveStream) {
// and that the RtpSenders are created correctly.
// Also tests that RemoveTrack removes the tracks from subsequent offers.
TEST_F(PeerConnectionInterfaceTest, AddTrackRemoveTrack) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create a dummy stream, so tracks share a stream label.
rtc::scoped_refptr<MediaStreamInterface> stream(
pc_factory_->CreateLocalMediaStream(kStreamLabel1));
@@ -1442,7 +1444,7 @@ TEST_F(PeerConnectionInterfaceTest, AddTrackRemoveTrack) {
// Test creating senders without a stream specified,
// expecting a random stream ID to be generated.
TEST_F(PeerConnectionInterfaceTest, AddTrackWithoutStream) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create a dummy stream, so tracks share a stream label.
rtc::scoped_refptr<AudioTrackInterface> audio_track(
pc_factory_->CreateAudioTrack("audio_track", nullptr));
@@ -1470,7 +1472,7 @@ TEST_F(PeerConnectionInterfaceTest, CreateOfferReceiveAnswer) {
}
TEST_F(PeerConnectionInterfaceTest, CreateOfferReceivePrAnswerAndAnswer) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVideoStream(kStreamLabel1);
CreateOfferAsLocalDescription();
std::string offer;
@@ -1480,7 +1482,7 @@ TEST_F(PeerConnectionInterfaceTest, CreateOfferReceivePrAnswerAndAnswer) {
}
TEST_F(PeerConnectionInterfaceTest, ReceiveOfferCreateAnswer) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVideoStream(kStreamLabel1);
CreateOfferAsRemoteDescription();
@@ -1490,7 +1492,7 @@ TEST_F(PeerConnectionInterfaceTest, ReceiveOfferCreateAnswer) {
}
TEST_F(PeerConnectionInterfaceTest, ReceiveOfferCreatePrAnswerAndAnswer) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVideoStream(kStreamLabel1);
CreateOfferAsRemoteDescription();
@@ -1513,7 +1515,7 @@ TEST_F(PeerConnectionInterfaceTest, Renegotiate) {
// Tests that after negotiating an audio only call, the respondent can perform a
// renegotiation that removes the audio stream.
TEST_F(PeerConnectionInterfaceTest, RenegotiateAudioOnly) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVoiceStream(kStreamLabel1);
CreateOfferAsRemoteDescription();
CreateAnswerAsLocalDescription();
@@ -1526,7 +1528,7 @@ TEST_F(PeerConnectionInterfaceTest, RenegotiateAudioOnly) {
// Test that candidates are generated and that we can parse our own candidates.
TEST_F(PeerConnectionInterfaceTest, IceCandidates) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
EXPECT_FALSE(pc_->AddIceCandidate(observer_.last_candidate_.get()));
// SetRemoteDescription takes ownership of offer.
@@ -1549,7 +1551,7 @@ TEST_F(PeerConnectionInterfaceTest, IceCandidates) {
// Test that CreateOffer and CreateAnswer will fail if the track labels are
// not unique.
TEST_F(PeerConnectionInterfaceTest, CreateOfferAnswerWithInvalidStream) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create a regular offer for the CreateAnswer test later.
std::unique_ptr<SessionDescriptionInterface> offer;
EXPECT_TRUE(DoCreateOffer(&offer, nullptr));
@@ -1570,7 +1572,7 @@ TEST_F(PeerConnectionInterfaceTest, CreateOfferAnswerWithInvalidStream) {
// Test that we will get different SSRCs for each tracks in the offer and answer
// we created.
TEST_F(PeerConnectionInterfaceTest, SsrcInOfferAnswer) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create a local stream with audio&video tracks having different labels.
AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
@@ -1602,7 +1604,7 @@ TEST_F(PeerConnectionInterfaceTest, SsrcInOfferAnswer) {
// the stream to a PeerConnection.
// TODO(deadbeef): Remove this test once this behavior is no longer supported.
TEST_F(PeerConnectionInterfaceTest, AddTrackAfterAddStream) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create audio stream and add to PeerConnection.
AddVoiceStream(kStreamLabel1);
MediaStreamInterface* stream = pc_->local_streams()->at(0);
@@ -1626,7 +1628,7 @@ TEST_F(PeerConnectionInterfaceTest, AddTrackAfterAddStream) {
// the stream to a PeerConnection.
// TODO(deadbeef): Remove this test once this behavior is no longer supported.
TEST_F(PeerConnectionInterfaceTest, RemoveTrackAfterAddStream) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
// Create audio/video stream and add to PeerConnection.
AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
MediaStreamInterface* stream = pc_->local_streams()->at(0);
@@ -1645,7 +1647,7 @@ TEST_F(PeerConnectionInterfaceTest, RemoveTrackAfterAddStream) {
// Test creating a sender with a stream ID, and ensure the ID is populated
// in the offer.
TEST_F(PeerConnectionInterfaceTest, CreateSenderWithStream) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
pc_->CreateSender("video", kStreamLabel1);
std::unique_ptr<SessionDescriptionInterface> offer;
@@ -2075,7 +2077,7 @@ TEST_F(PeerConnectionInterfaceTest, ReceiveFireFoxOffer) {
// limited set of audio codecs and receive an updated offer with more audio
// codecs, where the added codecs are not supported.
TEST_F(PeerConnectionInterfaceTest, ReceiveUpdatedAudioOfferWithBadCodecs) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddVoiceStream("audio_label");
CreateOfferAsLocalDescription();
@@ -2183,6 +2185,17 @@ TEST_F(PeerConnectionInterfaceTest, SetConfigurationChangesCandidateFilter) {
EXPECT_EQ(cricket::CF_RELAY, port_allocator_->candidate_filter());
}
+TEST_F(PeerConnectionInterfaceTest, SetConfigurationChangesPruneTurnPortsFlag) {
+ PeerConnectionInterface::RTCConfiguration config;
+ config.prune_turn_ports = false;
+ CreatePeerConnection(config, nullptr);
+ EXPECT_FALSE(port_allocator_->prune_turn_ports());
+
+ config.prune_turn_ports = true;
+ EXPECT_TRUE(pc_->SetConfiguration(config));
+ EXPECT_TRUE(port_allocator_->prune_turn_ports());
+}
+
// Test that when SetConfiguration changes both the pool size and other
// attributes, the pooled session is created with the updated attributes.
TEST_F(PeerConnectionInterfaceTest,
@@ -2203,7 +2216,8 @@ TEST_F(PeerConnectionInterfaceTest,
EXPECT_EQ(1UL, session->stun_servers().size());
}
-// Test that after SetLocalDescription, changing the pool size is not allowed.
+// Test that after SetLocalDescription, changing the pool size is not allowed,
+// and an invalid modification error is returned.
TEST_F(PeerConnectionInterfaceTest,
CantChangePoolSizeAfterSetLocalDescription) {
CreatePeerConnection();
@@ -2220,7 +2234,91 @@ TEST_F(PeerConnectionInterfaceTest,
// Set local answer; now it's too late.
CreateAnswerAsLocalDescription();
config.ice_candidate_pool_size = 3;
- EXPECT_FALSE(pc_->SetConfiguration(config));
+ RTCError error;
+ EXPECT_FALSE(pc_->SetConfiguration(config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_MODIFICATION, error.type());
+}
+
+// Test that SetConfiguration returns an invalid modification error if
+// modifying a field in the configuration that isn't allowed to be modified.
+TEST_F(PeerConnectionInterfaceTest,
+ SetConfigurationReturnsInvalidModificationError) {
+ PeerConnectionInterface::RTCConfiguration config;
+ config.bundle_policy = PeerConnectionInterface::kBundlePolicyBalanced;
+ config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyNegotiate;
+ config.continual_gathering_policy = PeerConnectionInterface::GATHER_ONCE;
+ CreatePeerConnection(config, nullptr);
+
+ PeerConnectionInterface::RTCConfiguration modified_config = config;
+ modified_config.bundle_policy =
+ PeerConnectionInterface::kBundlePolicyMaxBundle;
+ RTCError error;
+ EXPECT_FALSE(pc_->SetConfiguration(modified_config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_MODIFICATION, error.type());
+
+ modified_config = config;
+ modified_config.rtcp_mux_policy =
+ PeerConnectionInterface::kRtcpMuxPolicyRequire;
+ error.set_type(RTCErrorType::NONE);
+ EXPECT_FALSE(pc_->SetConfiguration(modified_config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_MODIFICATION, error.type());
+
+ modified_config = config;
+ modified_config.continual_gathering_policy =
+ PeerConnectionInterface::GATHER_CONTINUALLY;
+ error.set_type(RTCErrorType::NONE);
+ EXPECT_FALSE(pc_->SetConfiguration(modified_config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_MODIFICATION, error.type());
+}
+
+// Test that SetConfiguration returns a range error if the candidate pool size
+// is negative or larger than allowed by the spec.
+TEST_F(PeerConnectionInterfaceTest,
+ SetConfigurationReturnsRangeErrorForBadCandidatePoolSize) {
+ PeerConnectionInterface::RTCConfiguration config;
+ CreatePeerConnection(config, nullptr);
+
+ config.ice_candidate_pool_size = -1;
+ RTCError error;
+ EXPECT_FALSE(pc_->SetConfiguration(config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_RANGE, error.type());
+
+ config.ice_candidate_pool_size = INT_MAX;
+ error.set_type(RTCErrorType::NONE);
+ EXPECT_FALSE(pc_->SetConfiguration(config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_RANGE, error.type());
+}
+
+// Test that SetConfiguration returns a syntax error if parsing an ICE server
+// URL failed.
+TEST_F(PeerConnectionInterfaceTest,
+ SetConfigurationReturnsSyntaxErrorFromBadIceUrls) {
+ PeerConnectionInterface::RTCConfiguration config;
+ CreatePeerConnection(config, nullptr);
+
+ PeerConnectionInterface::IceServer bad_server;
+ bad_server.uri = "stunn:www.example.com";
+ config.servers.push_back(bad_server);
+ RTCError error;
+ EXPECT_FALSE(pc_->SetConfiguration(config, &error));
+ EXPECT_EQ(RTCErrorType::SYNTAX_ERROR, error.type());
+}
+
+// Test that SetConfiguration returns an invalid parameter error if a TURN
+// IceServer is missing a username or password.
+TEST_F(PeerConnectionInterfaceTest,
+ SetConfigurationReturnsInvalidParameterIfCredentialsMissing) {
+ PeerConnectionInterface::RTCConfiguration config;
+ CreatePeerConnection(config, nullptr);
+
+ PeerConnectionInterface::IceServer bad_server;
+ bad_server.uri = "turn:www.example.com";
+ // Missing password.
+ bad_server.username = "foo";
+ config.servers.push_back(bad_server);
+ RTCError error;
+ EXPECT_FALSE(pc_->SetConfiguration(config, &error));
+ EXPECT_EQ(RTCErrorType::INVALID_PARAMETER, error.type());
}
// Test that PeerConnection::Close changes the states to closed and all remote
@@ -2255,7 +2353,7 @@ TEST_F(PeerConnectionInterfaceTest, CloseAndTestStreamsAndStates) {
// Test that PeerConnection methods fails gracefully after
// PeerConnection::Close has been called.
TEST_F(PeerConnectionInterfaceTest, CloseAndTestMethods) {
- CreatePeerConnection();
+ CreatePeerConnectionWithoutDtls();
AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
CreateOfferAsRemoteDescription();
CreateAnswerAsLocalDescription();
@@ -3227,10 +3325,41 @@ TEST(CreateSessionOptionsTest, MediaConstraintsInAnswer) {
EXPECT_TRUE(updated_answer_options.has_video());
}
-TEST(RtcErrorTest, OstreamOperator) {
+TEST(RTCErrorTypeTest, OstreamOperator) {
std::ostringstream oss;
- oss << webrtc::RtcError::NONE << ' '
- << webrtc::RtcError::INVALID_PARAMETER << ' '
- << webrtc::RtcError::INTERNAL_ERROR;
+ oss << webrtc::RTCErrorType::NONE << ' '
+ << webrtc::RTCErrorType::INVALID_PARAMETER << ' '
+ << webrtc::RTCErrorType::INTERNAL_ERROR;
EXPECT_EQ("NONE INVALID_PARAMETER INTERNAL_ERROR", oss.str());
}
+
+// Tests a few random fields being different.
+TEST(RTCConfigurationTest, ComparisonOperators) {
+ PeerConnectionInterface::RTCConfiguration a;
+ PeerConnectionInterface::RTCConfiguration b;
+ EXPECT_EQ(a, b);
+
+ PeerConnectionInterface::RTCConfiguration c;
+ c.servers.push_back(PeerConnectionInterface::IceServer());
+ EXPECT_NE(a, c);
+
+ PeerConnectionInterface::RTCConfiguration d;
+ d.type = PeerConnectionInterface::kRelay;
+ EXPECT_NE(a, d);
+
+ PeerConnectionInterface::RTCConfiguration e;
+ e.audio_jitter_buffer_max_packets = 5;
+ EXPECT_NE(a, e);
+
+ PeerConnectionInterface::RTCConfiguration f;
+ f.ice_connection_receiving_timeout = 1337;
+ EXPECT_NE(a, f);
+
+ PeerConnectionInterface::RTCConfiguration g;
+ g.disable_ipv6 = true;
+ EXPECT_NE(a, g);
+
+ PeerConnectionInterface::RTCConfiguration h(
+ PeerConnectionInterface::RTCConfigurationType::kAggressive);
+ EXPECT_NE(a, h);
+}
« no previous file with comments | « webrtc/api/peerconnectioninterface.h ('k') | webrtc/api/peerconnectionproxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698