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

Unified Diff: webrtc/api/webrtcsession_unittest.cc

Issue 1972493002: Do not create a temporary transport channel when using max-bundle (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Code review feedback Created 4 years, 7 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/webrtcsession.cc ('k') | webrtc/pc/channel.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/webrtcsession_unittest.cc
diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc
index cd5e784594f1bbc46f5a5a08f31d2845e6446ad7..bd05593f7bf90b8a138d21fc13b7bc3463b2c258 100644
--- a/webrtc/api/webrtcsession_unittest.cc
+++ b/webrtc/api/webrtcsession_unittest.cc
@@ -163,6 +163,7 @@ class MockIceObserver : public webrtc::IceObserver {
void OnIceConnectionChange(
PeerConnectionInterface::IceConnectionState new_state) override {
ice_connection_state_ = new_state;
+ ice_connection_state_history_.push_back(new_state);
}
void OnIceGatheringChange(
PeerConnectionInterface::IceGatheringState new_state) override {
@@ -202,6 +203,8 @@ class MockIceObserver : public webrtc::IceObserver {
std::vector<cricket::Candidate> mline_1_candidates_;
PeerConnectionInterface::IceConnectionState ice_connection_state_;
PeerConnectionInterface::IceGatheringState ice_gathering_state_;
+ std::vector<PeerConnectionInterface::IceConnectionState>
+ ice_connection_state_history_;
size_t num_candidates_removed_ = 0;
};
@@ -3261,6 +3264,60 @@ TEST_F(WebRtcSessionTest, TestMaxBundleWithSetRemoteDescriptionFirst) {
session_->video_rtp_transport_channel());
}
+// Adding a new channel to a BUNDLE which is already connected should directly
+// assign the bundle transport to the channel, without first setting a
+// disconnected non-bundle transport and then replacing it. The application
+// should not receive any changes in the ICE state.
+TEST_F(WebRtcSessionTest, TestAddChannelToConnectedBundle) {
+ LoopbackNetworkConfiguration config;
+ LoopbackNetworkManager loopback_network_manager(this, config);
+ // Both BUNDLE and RTCP-mux need to be enabled for the ICE state to remain
+ // connected. Disabling either of these two means that we need to wait for the
+ // answer to find out if more transports are needed.
+ configuration_.bundle_policy =
+ PeerConnectionInterface::kBundlePolicyMaxBundle;
+ configuration_.rtcp_mux_policy =
+ PeerConnectionInterface::kRtcpMuxPolicyRequire;
+ options_.disable_encryption = true;
+ Init();
+
+ // Negotiate an audio channel with MAX_BUNDLE enabled.
+ SendAudioOnlyStream2();
+ SessionDescriptionInterface* offer = CreateOffer();
+ SetLocalDescriptionWithoutError(offer);
+ EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringComplete,
+ observer_.ice_gathering_state_, kIceCandidatesTimeout);
+ std::string sdp;
+ offer->ToString(&sdp);
Taylor Brandstetter 2016/05/16 19:59:47 nit: I know the old tests don't do this, but it wo
+ SessionDescriptionInterface* answer = webrtc::CreateSessionDescription(
+ JsepSessionDescription::kAnswer, sdp, nullptr);
+ ASSERT_TRUE(answer != NULL);
+ SetRemoteDescriptionWithoutError(answer);
+
+ // Wait for the ICE state to stabilize.
+ EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted,
+ observer_.ice_connection_state_, kIceCandidatesTimeout);
+ observer_.ice_connection_state_history_.clear();
+
+ // Now add a video channel which should be using the same bundle transport.
+ SendAudioVideoStream2();
+ offer = CreateOffer();
+ offer->ToString(&sdp);
+ SetLocalDescriptionWithoutError(offer);
+ answer = webrtc::CreateSessionDescription(JsepSessionDescription::kAnswer,
+ sdp, nullptr);
+ ASSERT_TRUE(answer != NULL);
+ SetRemoteDescriptionWithoutError(answer);
+
+ // Wait for ICE state to stabilize
+ rtc::Thread::Current()->ProcessMessages(0);
+ EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted,
+ observer_.ice_connection_state_, kIceCandidatesTimeout);
+
+ // No ICE state changes are expected to happen.
+ EXPECT_EQ(0, observer_.ice_connection_state_history_.size());
+}
+
TEST_F(WebRtcSessionTest, TestRequireRtcpMux) {
InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyRequire);
SendAudioVideoStream1();
« no previous file with comments | « webrtc/api/webrtcsession.cc ('k') | webrtc/pc/channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698