Index: webrtc/pc/peerconnection_integrationtest.cc |
diff --git a/webrtc/pc/peerconnection_integrationtest.cc b/webrtc/pc/peerconnection_integrationtest.cc |
index e6c3cf1f5781f18e493cbbb7f7d0cf3b83a6b6fc..12b99b49020ab44cc9f78c05534053be54ef6213 100644 |
--- a/webrtc/pc/peerconnection_integrationtest.cc |
+++ b/webrtc/pc/peerconnection_integrationtest.cc |
@@ -2482,6 +2482,40 @@ TEST_F(PeerConnectionIntegrationTest, SctpDataChannelToAudioVideoUpgrade) { |
kMaxWaitForFramesMs); |
} |
+static void MakeSpecCompliantSctpOffer(cricket::SessionDescription* desc) { |
+ const ContentInfo* dc_offer = GetFirstDataContent(desc); |
+ ASSERT_NE(nullptr, dc_offer); |
+ cricket::DataContentDescription* dcd_offer = |
+ static_cast<cricket::DataContentDescription*>(dc_offer->description); |
+ dcd_offer->set_use_sctpmap(false); |
+ dcd_offer->set_protocol("UDP/DTLS/SCTP"); |
+} |
+ |
+// Test that the data channel works when a spec-compliant SCTP m= section is |
+// offered (using "a=sctp-port" instead of "a=sctpmap", and using |
+// "UDP/DTLS/SCTP" as the protocol). |
+TEST_F(PeerConnectionIntegrationTest, |
+ DataChannelWorksWhenSpecCompliantSctpOfferReceived) { |
+ ASSERT_TRUE(CreatePeerConnectionWrappers()); |
+ ConnectFakeSignaling(); |
+ caller()->CreateDataChannel(); |
+ caller()->SetGeneratedSdpMunger(MakeSpecCompliantSctpOffer); |
+ caller()->CreateAndSetAndSignalOffer(); |
+ ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); |
+ ASSERT_TRUE_WAIT(callee()->data_channel() != nullptr, kDefaultTimeout); |
+ EXPECT_TRUE_WAIT(caller()->data_observer()->IsOpen(), kDefaultTimeout); |
+ EXPECT_TRUE_WAIT(callee()->data_observer()->IsOpen(), kDefaultTimeout); |
+ |
+ // Ensure data can be sent in both directions. |
+ std::string data = "hello world"; |
+ caller()->data_channel()->Send(DataBuffer(data)); |
+ EXPECT_EQ_WAIT(data, callee()->data_observer()->last_message(), |
+ kDefaultTimeout); |
+ callee()->data_channel()->Send(DataBuffer(data)); |
+ EXPECT_EQ_WAIT(data, caller()->data_observer()->last_message(), |
+ kDefaultTimeout); |
+} |
+ |
#endif // HAVE_SCTP |
// Test that the ICE connection and gathering states eventually reach |