Index: webrtc/api/peerconnectionendtoend_unittest.cc |
diff --git a/webrtc/api/peerconnectionendtoend_unittest.cc b/webrtc/api/peerconnectionendtoend_unittest.cc |
index 95369b15c0823a0bbb81f6e517780711f94d2c1d..9ccf6ed8afaa7a9630002d7e9e4691520c5f1c35 100644 |
--- a/webrtc/api/peerconnectionendtoend_unittest.cc |
+++ b/webrtc/api/peerconnectionendtoend_unittest.cc |
@@ -55,6 +55,9 @@ class PeerConnectionEndToEndTest |
"caller", &worker_thread_); |
callee_ = new rtc::RefCountedObject<PeerConnectionTestWrapper>( |
"callee", &worker_thread_); |
+ webrtc::PeerConnectionInterface::IceServer ice_server; |
+ ice_server.uri = "stun:stun.l.google.com:19302"; |
+ config_.servers.push_back(ice_server); |
#ifdef WEBRTC_ANDROID |
webrtc::InitializeAndroidObjects(); |
#endif |
@@ -65,8 +68,8 @@ class PeerConnectionEndToEndTest |
} |
void CreatePcs(const MediaConstraintsInterface* pc_constraints) { |
- EXPECT_TRUE(caller_->CreatePc(pc_constraints)); |
- EXPECT_TRUE(callee_->CreatePc(pc_constraints)); |
+ EXPECT_TRUE(caller_->CreatePc(pc_constraints, config_)); |
+ EXPECT_TRUE(callee_->CreatePc(pc_constraints, config_)); |
PeerConnectionTestWrapper::Connect(caller_.get(), callee_.get()); |
caller_->SignalOnDataChannel.connect( |
@@ -160,6 +163,7 @@ class PeerConnectionEndToEndTest |
rtc::scoped_refptr<PeerConnectionTestWrapper> callee_; |
DataChannelList caller_signaled_data_channels_; |
DataChannelList callee_signaled_data_channels_; |
+ webrtc::PeerConnectionInterface::RTCConfiguration config_; |
}; |
// Disabled for TSan v2, see |
@@ -315,6 +319,68 @@ TEST_F(PeerConnectionEndToEndTest, |
EXPECT_EQ(1U, dc_2_observer->received_message_count()); |
} |
+#ifdef HAVE_QUIC |
+// Test that QUIC data channels can be used and that messages go to the correct |
+// remote data channel when both peers want to use QUIC. It is assumed that the |
+// application has externally negotiated the data channel parameters. |
+TEST_F(PeerConnectionEndToEndTest, MessageTransferBetweenQuicDataChannels) { |
+ config_.enable_quic = true; |
+ CreatePcs(); |
+ |
+ webrtc::DataChannelInit init_1; |
+ init_1.id = 0; |
+ init_1.ordered = false; |
+ init_1.reliable = true; |
+ |
+ webrtc::DataChannelInit init_2; |
+ init_2.id = 1; |
+ init_2.ordered = false; |
+ init_2.reliable = true; |
+ |
+ rtc::scoped_refptr<DataChannelInterface> caller_dc_1( |
+ caller_->CreateDataChannel("data", init_1)); |
+ ASSERT_NE(nullptr, caller_dc_1); |
+ rtc::scoped_refptr<DataChannelInterface> caller_dc_2( |
+ caller_->CreateDataChannel("data", init_2)); |
+ ASSERT_NE(nullptr, caller_dc_2); |
+ rtc::scoped_refptr<DataChannelInterface> callee_dc_1( |
+ callee_->CreateDataChannel("data", init_1)); |
+ ASSERT_NE(nullptr, callee_dc_1); |
+ rtc::scoped_refptr<DataChannelInterface> callee_dc_2( |
+ callee_->CreateDataChannel("data", init_2)); |
+ ASSERT_NE(nullptr, callee_dc_2); |
+ |
+ Negotiate(); |
+ WaitForConnection(); |
+ EXPECT_TRUE_WAIT(caller_dc_1->state() == webrtc::DataChannelInterface::kOpen, |
+ kMaxWait); |
+ EXPECT_TRUE_WAIT(callee_dc_1->state() == webrtc::DataChannelInterface::kOpen, |
+ kMaxWait); |
+ EXPECT_TRUE_WAIT(caller_dc_2->state() == webrtc::DataChannelInterface::kOpen, |
+ kMaxWait); |
+ EXPECT_TRUE_WAIT(callee_dc_2->state() == webrtc::DataChannelInterface::kOpen, |
+ kMaxWait); |
+ |
+ rtc::scoped_ptr<webrtc::MockDataChannelObserver> dc_1_observer( |
+ new webrtc::MockDataChannelObserver(callee_dc_1.get())); |
+ |
+ rtc::scoped_ptr<webrtc::MockDataChannelObserver> dc_2_observer( |
+ new webrtc::MockDataChannelObserver(callee_dc_2.get())); |
+ |
+ const std::string message_1 = "hello 1"; |
+ const std::string message_2 = "hello 2"; |
+ |
+ caller_dc_1->Send(webrtc::DataBuffer(message_1)); |
+ EXPECT_EQ_WAIT(message_1, dc_1_observer->last_message(), kMaxWait); |
+ |
+ caller_dc_2->Send(webrtc::DataBuffer(message_2)); |
+ EXPECT_EQ_WAIT(message_2, dc_2_observer->last_message(), kMaxWait); |
+ |
+ EXPECT_EQ(1U, dc_1_observer->received_message_count()); |
+ EXPECT_EQ(1U, dc_2_observer->received_message_count()); |
+} |
+#endif // HAVE_QUIC |
+ |
// Verifies that a DataChannel added from an OPEN message functions after |
// a channel has been previously closed (webrtc issue 3778). |
// This previously failed because the new channel re-uses the ID of the closed |