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

Side by Side Diff: webrtc/pc/webrtcsdp_unittest.cc

Issue 2690943011: Use the same draft version in SDP data channel answers as used in the offer. (Closed)
Patch Set: Fix variable names in media session tests and add some comments. Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « webrtc/pc/webrtcsdp.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2011 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 using webrtc::JsepIceCandidate; 58 using webrtc::JsepIceCandidate;
59 using webrtc::JsepSessionDescription; 59 using webrtc::JsepSessionDescription;
60 using webrtc::RtpExtension; 60 using webrtc::RtpExtension;
61 using webrtc::SdpParseError; 61 using webrtc::SdpParseError;
62 using webrtc::SessionDescriptionInterface; 62 using webrtc::SessionDescriptionInterface;
63 63
64 typedef std::vector<AudioCodec> AudioCodecs; 64 typedef std::vector<AudioCodec> AudioCodecs;
65 typedef std::vector<Candidate> Candidates; 65 typedef std::vector<Candidate> Candidates;
66 66
67 static const uint32_t kDefaultSctpPort = 5000; 67 static const uint32_t kDefaultSctpPort = 5000;
68 static const char kDefaultSctpPortStr[] = "5000";
69 static const uint16_t kUnusualSctpPort = 9556;
70 static const char kUnusualSctpPortStr[] = "9556";
68 static const char kSessionTime[] = "t=0 0\r\n"; 71 static const char kSessionTime[] = "t=0 0\r\n";
69 static const uint32_t kCandidatePriority = 2130706432U; // pref = 1.0 72 static const uint32_t kCandidatePriority = 2130706432U; // pref = 1.0
70 static const char kAttributeIceUfragVoice[] = "a=ice-ufrag:ufrag_voice\r\n"; 73 static const char kAttributeIceUfragVoice[] = "a=ice-ufrag:ufrag_voice\r\n";
71 static const char kAttributeIcePwdVoice[] = "a=ice-pwd:pwd_voice\r\n"; 74 static const char kAttributeIcePwdVoice[] = "a=ice-pwd:pwd_voice\r\n";
72 static const char kAttributeIceUfragVideo[] = "a=ice-ufrag:ufrag_video\r\n"; 75 static const char kAttributeIceUfragVideo[] = "a=ice-ufrag:ufrag_video\r\n";
73 static const char kAttributeIcePwdVideo[] = "a=ice-pwd:pwd_video\r\n"; 76 static const char kAttributeIcePwdVideo[] = "a=ice-pwd:pwd_video\r\n";
74 static const uint32_t kCandidateGeneration = 2; 77 static const uint32_t kCandidateGeneration = 2;
75 static const char kCandidateFoundation1[] = "a0+B/1"; 78 static const char kCandidateFoundation1[] = "a0+B/1";
76 static const char kCandidateFoundation2[] = "a0+B/2"; 79 static const char kCandidateFoundation2[] = "a0+B/2";
77 static const char kCandidateFoundation3[] = "a0+B/3"; 80 static const char kCandidateFoundation3[] = "a0+B/3";
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 ASSERT_EQ(cd1->rtp_header_extensions().size(), 1206 ASSERT_EQ(cd1->rtp_header_extensions().size(),
1204 cd2->rtp_header_extensions().size()); 1207 cd2->rtp_header_extensions().size());
1205 for (size_t i = 0; i< cd1->rtp_header_extensions().size(); ++i) { 1208 for (size_t i = 0; i< cd1->rtp_header_extensions().size(); ++i) {
1206 const RtpExtension ext1 = cd1->rtp_header_extensions().at(i); 1209 const RtpExtension ext1 = cd1->rtp_header_extensions().at(i);
1207 const RtpExtension ext2 = cd2->rtp_header_extensions().at(i); 1210 const RtpExtension ext2 = cd2->rtp_header_extensions().at(i);
1208 EXPECT_EQ(ext1.uri, ext2.uri); 1211 EXPECT_EQ(ext1.uri, ext2.uri);
1209 EXPECT_EQ(ext1.id, ext2.id); 1212 EXPECT_EQ(ext1.id, ext2.id);
1210 } 1213 }
1211 } 1214 }
1212 1215
1216 void CompareDataContentDescription(const DataContentDescription* dcd1,
1217 const DataContentDescription* dcd2) {
1218 EXPECT_EQ(dcd1->use_sctpmap(), dcd2->use_sctpmap());
1219 CompareMediaContentDescription<DataContentDescription>(dcd1, dcd2);
1220 }
1213 1221
1214 void CompareSessionDescription(const SessionDescription& desc1, 1222 void CompareSessionDescription(const SessionDescription& desc1,
1215 const SessionDescription& desc2) { 1223 const SessionDescription& desc2) {
1216 // Compare content descriptions. 1224 // Compare content descriptions.
1217 if (desc1.contents().size() != desc2.contents().size()) { 1225 if (desc1.contents().size() != desc2.contents().size()) {
1218 ADD_FAILURE(); 1226 ADD_FAILURE();
1219 return; 1227 return;
1220 } 1228 }
1221 for (size_t i = 0 ; i < desc1.contents().size(); ++i) { 1229 for (size_t i = 0 ; i < desc1.contents().size(); ++i) {
1222 const cricket::ContentInfo& c1 = desc1.contents().at(i); 1230 const cricket::ContentInfo& c1 = desc1.contents().at(i);
(...skipping 21 matching lines...) Expand all
1244 static_cast<const VideoContentDescription*>(c2.description); 1252 static_cast<const VideoContentDescription*>(c2.description);
1245 CompareMediaContentDescription<VideoContentDescription>(vcd1, vcd2); 1253 CompareMediaContentDescription<VideoContentDescription>(vcd1, vcd2);
1246 } 1254 }
1247 1255
1248 ASSERT_EQ(IsDataContent(&c1), IsDataContent(&c2)); 1256 ASSERT_EQ(IsDataContent(&c1), IsDataContent(&c2));
1249 if (IsDataContent(&c1)) { 1257 if (IsDataContent(&c1)) {
1250 const DataContentDescription* dcd1 = 1258 const DataContentDescription* dcd1 =
1251 static_cast<const DataContentDescription*>(c1.description); 1259 static_cast<const DataContentDescription*>(c1.description);
1252 const DataContentDescription* dcd2 = 1260 const DataContentDescription* dcd2 =
1253 static_cast<const DataContentDescription*>(c2.description); 1261 static_cast<const DataContentDescription*>(c2.description);
1254 CompareMediaContentDescription<DataContentDescription>(dcd1, dcd2); 1262 CompareDataContentDescription(dcd1, dcd2);
1255 } 1263 }
1256 } 1264 }
1257 1265
1258 // group 1266 // group
1259 const cricket::ContentGroups groups1 = desc1.groups(); 1267 const cricket::ContentGroups groups1 = desc1.groups();
1260 const cricket::ContentGroups groups2 = desc2.groups(); 1268 const cricket::ContentGroups groups2 = desc2.groups();
1261 EXPECT_EQ(groups1.size(), groups1.size()); 1269 EXPECT_EQ(groups1.size(), groups1.size());
1262 if (groups1.size() != groups2.size()) { 1270 if (groups1.size() != groups2.size()) {
1263 ADD_FAILURE(); 1271 ADD_FAILURE();
1264 return; 1272 return;
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 JsepSessionDescription jdesc_no_candidates(kDummyString); 1487 JsepSessionDescription jdesc_no_candidates(kDummyString);
1480 if (!jdesc_no_candidates.Initialize(desc_.Copy(), kSessionId, 1488 if (!jdesc_no_candidates.Initialize(desc_.Copy(), kSessionId,
1481 kSessionVersion)) { 1489 kSessionVersion)) {
1482 return false; 1490 return false;
1483 } 1491 }
1484 std::string message = webrtc::SdpSerialize(jdesc_no_candidates, false); 1492 std::string message = webrtc::SdpSerialize(jdesc_no_candidates, false);
1485 EXPECT_EQ(new_sdp, message); 1493 EXPECT_EQ(new_sdp, message);
1486 return true; 1494 return true;
1487 } 1495 }
1488 1496
1489 void AddSctpDataChannel() { 1497 void AddSctpDataChannel(bool use_sctpmap) {
1490 std::unique_ptr<DataContentDescription> data(new DataContentDescription()); 1498 std::unique_ptr<DataContentDescription> data(new DataContentDescription());
1491 data_desc_ = data.get(); 1499 data_desc_ = data.get();
1500 data_desc_->set_use_sctpmap(use_sctpmap);
1492 data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp); 1501 data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp);
1493 DataCodec codec(cricket::kGoogleSctpDataCodecPlType, 1502 DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
1494 cricket::kGoogleSctpDataCodecName); 1503 cricket::kGoogleSctpDataCodecName);
1495 codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort); 1504 codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort);
1496 data_desc_->AddCodec(codec); 1505 data_desc_->AddCodec(codec);
1497 desc_.AddContent(kDataContentName, NS_JINGLE_DRAFT_SCTP, data.release()); 1506 desc_.AddContent(kDataContentName, NS_JINGLE_DRAFT_SCTP, data.release());
1498 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo( 1507 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
1499 kDataContentName, TransportDescription(kUfragData, kPwdData)))); 1508 kDataContentName, TransportDescription(kUfragData, kPwdData))));
1500 } 1509 }
1501 1510
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
2051 2060
2052 ASSERT_TRUE(jsep_desc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2061 ASSERT_TRUE(jsep_desc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2053 std::string message = webrtc::SdpSerialize(jsep_desc, false); 2062 std::string message = webrtc::SdpSerialize(jsep_desc, false);
2054 2063
2055 std::string expected_sdp = kSdpString; 2064 std::string expected_sdp = kSdpString;
2056 expected_sdp.append(kSdpRtpDataChannelString); 2065 expected_sdp.append(kSdpRtpDataChannelString);
2057 EXPECT_EQ(expected_sdp, message); 2066 EXPECT_EQ(expected_sdp, message);
2058 } 2067 }
2059 2068
2060 TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithSctpDataChannel) { 2069 TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithSctpDataChannel) {
2061 AddSctpDataChannel(); 2070 bool use_sctpmap = true;
2071 AddSctpDataChannel(use_sctpmap);
2062 JsepSessionDescription jsep_desc(kDummyString); 2072 JsepSessionDescription jsep_desc(kDummyString);
2063 2073
2064 ASSERT_TRUE(jsep_desc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2074 ASSERT_TRUE(jsep_desc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2065 std::string message = webrtc::SdpSerialize(jsep_desc, false); 2075 std::string message = webrtc::SdpSerialize(jsep_desc, false);
2066 2076
2067 std::string expected_sdp = kSdpString; 2077 std::string expected_sdp = kSdpString;
2068 expected_sdp.append(kSdpSctpDataChannelString); 2078 expected_sdp.append(kSdpSctpDataChannelString);
2069 EXPECT_EQ(message, expected_sdp); 2079 EXPECT_EQ(message, expected_sdp);
2070 } 2080 }
2071 2081
2072 TEST_F(WebRtcSdpTest, SerializeWithSctpDataChannelAndNewPort) { 2082 TEST_F(WebRtcSdpTest, SerializeWithSctpDataChannelAndNewPort) {
2073 AddSctpDataChannel(); 2083 bool use_sctpmap = true;
2084 AddSctpDataChannel(use_sctpmap);
2074 JsepSessionDescription jsep_desc(kDummyString); 2085 JsepSessionDescription jsep_desc(kDummyString);
2075 2086
2076 ASSERT_TRUE(jsep_desc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2087 ASSERT_TRUE(jsep_desc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2077 DataContentDescription* dcdesc = static_cast<DataContentDescription*>( 2088 DataContentDescription* dcdesc = static_cast<DataContentDescription*>(
2078 jsep_desc.description()->GetContentDescriptionByName(kDataContentName)); 2089 jsep_desc.description()->GetContentDescriptionByName(kDataContentName));
2079 2090
2080 const int kNewPort = 1234; 2091 const int kNewPort = 1234;
2081 cricket::DataCodec codec(cricket::kGoogleSctpDataCodecPlType, 2092 cricket::DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
2082 cricket::kGoogleSctpDataCodecName); 2093 cricket::kGoogleSctpDataCodecName);
2083 codec.SetParam(cricket::kCodecParamPort, kNewPort); 2094 codec.SetParam(cricket::kCodecParamPort, kNewPort);
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
2563 sdp_with_data.append(kSdpRtpDataChannelString); 2574 sdp_with_data.append(kSdpRtpDataChannelString);
2564 JsepSessionDescription jdesc_output(kDummyString); 2575 JsepSessionDescription jdesc_output(kDummyString);
2565 2576
2566 // Deserialize 2577 // Deserialize
2567 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2578 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2568 // Verify 2579 // Verify
2569 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2580 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2570 } 2581 }
2571 2582
2572 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannels) { 2583 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannels) {
2573 AddSctpDataChannel(); 2584 bool use_sctpmap = true;
2585 AddSctpDataChannel(use_sctpmap);
2574 JsepSessionDescription jdesc(kDummyString); 2586 JsepSessionDescription jdesc(kDummyString);
2575 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2587 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2576 2588
2577 std::string sdp_with_data = kSdpString; 2589 std::string sdp_with_data = kSdpString;
2578 sdp_with_data.append(kSdpSctpDataChannelString); 2590 sdp_with_data.append(kSdpSctpDataChannelString);
2579 JsepSessionDescription jdesc_output(kDummyString); 2591 JsepSessionDescription jdesc_output(kDummyString);
2580 2592
2581 // Verify with DTLS/SCTP (already in kSdpSctpDataChannelString). 2593 // Verify with DTLS/SCTP (already in kSdpSctpDataChannelString).
2582 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2594 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2583 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2595 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2584 2596
2585 // Verify with UDP/DTLS/SCTP. 2597 // Verify with UDP/DTLS/SCTP.
2586 sdp_with_data.replace(sdp_with_data.find(kDtlsSctp), 2598 sdp_with_data.replace(sdp_with_data.find(kDtlsSctp),
2587 strlen(kDtlsSctp), kUdpDtlsSctp); 2599 strlen(kDtlsSctp), kUdpDtlsSctp);
2588 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2600 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2589 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2601 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2590 2602
2591 // Verify with TCP/DTLS/SCTP. 2603 // Verify with TCP/DTLS/SCTP.
2592 sdp_with_data.replace(sdp_with_data.find(kUdpDtlsSctp), 2604 sdp_with_data.replace(sdp_with_data.find(kUdpDtlsSctp),
2593 strlen(kUdpDtlsSctp), kTcpDtlsSctp); 2605 strlen(kUdpDtlsSctp), kTcpDtlsSctp);
2594 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2606 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2595 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2607 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2596 } 2608 }
2597 2609
2598 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsWithSctpPort) { 2610 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsWithSctpPort) {
2599 AddSctpDataChannel(); 2611 bool use_sctpmap = false;
2612 AddSctpDataChannel(use_sctpmap);
2600 JsepSessionDescription jdesc(kDummyString); 2613 JsepSessionDescription jdesc(kDummyString);
2601 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2614 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2602 2615
2603 std::string sdp_with_data = kSdpString; 2616 std::string sdp_with_data = kSdpString;
2604 sdp_with_data.append(kSdpSctpDataChannelStringWithSctpPort); 2617 sdp_with_data.append(kSdpSctpDataChannelStringWithSctpPort);
2605 JsepSessionDescription jdesc_output(kDummyString); 2618 JsepSessionDescription jdesc_output(kDummyString);
2606 2619
2607 // Verify with DTLS/SCTP (already in kSdpSctpDataChannelStringWithSctpPort). 2620 // Verify with DTLS/SCTP (already in kSdpSctpDataChannelStringWithSctpPort).
2608 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2621 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2609 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2622 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2610 2623
2611 // Verify with UDP/DTLS/SCTP. 2624 // Verify with UDP/DTLS/SCTP.
2612 sdp_with_data.replace(sdp_with_data.find(kDtlsSctp), 2625 sdp_with_data.replace(sdp_with_data.find(kDtlsSctp),
2613 strlen(kDtlsSctp), kUdpDtlsSctp); 2626 strlen(kDtlsSctp), kUdpDtlsSctp);
2614 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2627 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2615 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2628 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2616 2629
2617 // Verify with TCP/DTLS/SCTP. 2630 // Verify with TCP/DTLS/SCTP.
2618 sdp_with_data.replace(sdp_with_data.find(kUdpDtlsSctp), 2631 sdp_with_data.replace(sdp_with_data.find(kUdpDtlsSctp),
2619 strlen(kUdpDtlsSctp), kTcpDtlsSctp); 2632 strlen(kUdpDtlsSctp), kTcpDtlsSctp);
2620 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2633 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2621 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2634 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2622 } 2635 }
2623 2636
2624 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsWithSctpColonPort) { 2637 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsWithSctpColonPort) {
2625 AddSctpDataChannel(); 2638 bool use_sctpmap = false;
2639 AddSctpDataChannel(use_sctpmap);
2626 JsepSessionDescription jdesc(kDummyString); 2640 JsepSessionDescription jdesc(kDummyString);
2627 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2641 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2628 2642
2629 std::string sdp_with_data = kSdpString; 2643 std::string sdp_with_data = kSdpString;
2630 sdp_with_data.append(kSdpSctpDataChannelStringWithSctpColonPort); 2644 sdp_with_data.append(kSdpSctpDataChannelStringWithSctpColonPort);
2631 JsepSessionDescription jdesc_output(kDummyString); 2645 JsepSessionDescription jdesc_output(kDummyString);
2632 2646
2633 // Verify with DTLS/SCTP. 2647 // Verify with DTLS/SCTP.
2634 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2648 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2635 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2649 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2636 2650
2637 // Verify with UDP/DTLS/SCTP. 2651 // Verify with UDP/DTLS/SCTP.
2638 sdp_with_data.replace(sdp_with_data.find(kDtlsSctp), 2652 sdp_with_data.replace(sdp_with_data.find(kDtlsSctp),
2639 strlen(kDtlsSctp), kUdpDtlsSctp); 2653 strlen(kDtlsSctp), kUdpDtlsSctp);
2640 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2654 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2641 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2655 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2642 2656
2643 // Verify with TCP/DTLS/SCTP. 2657 // Verify with TCP/DTLS/SCTP.
2644 sdp_with_data.replace(sdp_with_data.find(kUdpDtlsSctp), 2658 sdp_with_data.replace(sdp_with_data.find(kUdpDtlsSctp),
2645 strlen(kUdpDtlsSctp), kTcpDtlsSctp); 2659 strlen(kUdpDtlsSctp), kTcpDtlsSctp);
2646 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2660 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2647 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2661 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2648 } 2662 }
2649 2663
2650 // Test to check the behaviour if sctp-port is specified 2664 // Test to check the behaviour if sctp-port is specified
2651 // on the m= line and in a=sctp-port. 2665 // on the m= line and in a=sctp-port.
2652 TEST_F(WebRtcSdpTest, DeserializeSdpWithMultiSctpPort) { 2666 TEST_F(WebRtcSdpTest, DeserializeSdpWithMultiSctpPort) {
2653 AddSctpDataChannel(); 2667 bool use_sctpmap = true;
2668 AddSctpDataChannel(use_sctpmap);
2654 JsepSessionDescription jdesc(kDummyString); 2669 JsepSessionDescription jdesc(kDummyString);
2655 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2670 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2656 2671
2657 std::string sdp_with_data = kSdpString; 2672 std::string sdp_with_data = kSdpString;
2658 // Append m= attributes 2673 // Append m= attributes
2659 sdp_with_data.append(kSdpSctpDataChannelString); 2674 sdp_with_data.append(kSdpSctpDataChannelString);
2660 // Append a=sctp-port attribute 2675 // Append a=sctp-port attribute
2661 sdp_with_data.append("a=sctp-port 5000\r\n"); 2676 sdp_with_data.append("a=sctp-port 5000\r\n");
2662 JsepSessionDescription jdesc_output(kDummyString); 2677 JsepSessionDescription jdesc_output(kDummyString);
2663 2678
2664 EXPECT_FALSE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2679 EXPECT_FALSE(SdpDeserialize(sdp_with_data, &jdesc_output));
2665 } 2680 }
2666 2681
2667 // For crbug/344475. 2682 // For crbug/344475.
2668 TEST_F(WebRtcSdpTest, DeserializeSdpWithCorruptedSctpDataChannels) { 2683 TEST_F(WebRtcSdpTest, DeserializeSdpWithCorruptedSctpDataChannels) {
2669 std::string sdp_with_data = kSdpString; 2684 std::string sdp_with_data = kSdpString;
2670 sdp_with_data.append(kSdpSctpDataChannelString); 2685 sdp_with_data.append(kSdpSctpDataChannelString);
2671 // Remove the "\n" at the end. 2686 // Remove the "\n" at the end.
2672 sdp_with_data = sdp_with_data.substr(0, sdp_with_data.size() - 1); 2687 sdp_with_data = sdp_with_data.substr(0, sdp_with_data.size() - 1);
2673 JsepSessionDescription jdesc_output(kDummyString); 2688 JsepSessionDescription jdesc_output(kDummyString);
2674 2689
2675 EXPECT_FALSE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2690 EXPECT_FALSE(SdpDeserialize(sdp_with_data, &jdesc_output));
2676 // No crash is a pass. 2691 // No crash is a pass.
2677 } 2692 }
2678 2693
2679 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelAndNewPort) { 2694 void MutateJsepSctpPort(JsepSessionDescription& jdesc,
2680 AddSctpDataChannel(); 2695 const SessionDescription& desc) {
2681 const uint16_t kUnusualSctpPort = 9556;
2682 char default_portstr[16];
2683 char unusual_portstr[16];
2684 rtc::sprintfn(default_portstr, sizeof(default_portstr), "%d",
2685 kDefaultSctpPort);
2686 rtc::sprintfn(unusual_portstr, sizeof(unusual_portstr), "%d",
2687 kUnusualSctpPort);
2688
2689 // First setup the expected JsepSessionDescription.
2690 JsepSessionDescription jdesc(kDummyString);
2691 // take our pre-built session description and change the SCTP port. 2696 // take our pre-built session description and change the SCTP port.
2692 cricket::SessionDescription* mutant = desc_.Copy(); 2697 cricket::SessionDescription* mutant = desc.Copy();
2693 DataContentDescription* dcdesc = static_cast<DataContentDescription*>( 2698 DataContentDescription* dcdesc = static_cast<DataContentDescription*>(
2694 mutant->GetContentDescriptionByName(kDataContentName)); 2699 mutant->GetContentDescriptionByName(kDataContentName));
2695 std::vector<cricket::DataCodec> codecs(dcdesc->codecs()); 2700 std::vector<cricket::DataCodec> codecs(dcdesc->codecs());
2696 EXPECT_EQ(1U, codecs.size()); 2701 EXPECT_EQ(1U, codecs.size());
2697 EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, codecs[0].id); 2702 EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, codecs[0].id);
2698 codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort); 2703 codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort);
2699 dcdesc->set_codecs(codecs); 2704 dcdesc->set_codecs(codecs);
2700 2705
2701 // note: mutant's owned by jdesc now. 2706 // note: mutant's owned by jdesc now.
2702 ASSERT_TRUE(jdesc.Initialize(mutant, kSessionId, kSessionVersion)); 2707 ASSERT_TRUE(jdesc.Initialize(mutant, kSessionId, kSessionVersion));
2703 mutant = NULL; 2708 mutant = NULL;
2709 }
2710
2711 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelAndUnusualPort) {
2712 bool use_sctpmap = true;
2713 AddSctpDataChannel(use_sctpmap);
2714
2715 // First setup the expected JsepSessionDescription.
2716 JsepSessionDescription jdesc(kDummyString);
2717 MutateJsepSctpPort(jdesc, desc_);
2704 2718
2705 // Then get the deserialized JsepSessionDescription. 2719 // Then get the deserialized JsepSessionDescription.
2706 std::string sdp_with_data = kSdpString; 2720 std::string sdp_with_data = kSdpString;
2707 sdp_with_data.append(kSdpSctpDataChannelString); 2721 sdp_with_data.append(kSdpSctpDataChannelString);
2708 rtc::replace_substrs(default_portstr, strlen(default_portstr), 2722 rtc::replace_substrs(kDefaultSctpPortStr, strlen(kDefaultSctpPortStr),
2709 unusual_portstr, strlen(unusual_portstr), 2723 kUnusualSctpPortStr, strlen(kUnusualSctpPortStr),
2710 &sdp_with_data); 2724 &sdp_with_data);
2711 JsepSessionDescription jdesc_output(kDummyString); 2725 JsepSessionDescription jdesc_output(kDummyString);
2712 2726
2713 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2727 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2714 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2728 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2729 }
2730
2731 TEST_F(WebRtcSdpTest,
2732 DeserializeSdpWithSctpDataChannelAndUnusualPortInAttribute) {
2733 bool use_sctpmap = false;
2734 AddSctpDataChannel(use_sctpmap);
2735
2736 JsepSessionDescription jdesc(kDummyString);
2737 MutateJsepSctpPort(jdesc, desc_);
2715 2738
2716 // We need to test the deserialized JsepSessionDescription from 2739 // We need to test the deserialized JsepSessionDescription from
2717 // kSdpSctpDataChannelStringWithSctpPort for 2740 // kSdpSctpDataChannelStringWithSctpPort for
2718 // draft-ietf-mmusic-sctp-sdp-07 2741 // draft-ietf-mmusic-sctp-sdp-07
2719 // a=sctp-port 2742 // a=sctp-port
2720 sdp_with_data = kSdpString; 2743 std::string sdp_with_data = kSdpString;
2721 sdp_with_data.append(kSdpSctpDataChannelStringWithSctpPort); 2744 sdp_with_data.append(kSdpSctpDataChannelStringWithSctpPort);
2722 rtc::replace_substrs(default_portstr, strlen(default_portstr), 2745 rtc::replace_substrs(kDefaultSctpPortStr, strlen(kDefaultSctpPortStr),
2723 unusual_portstr, strlen(unusual_portstr), 2746 kUnusualSctpPortStr, strlen(kUnusualSctpPortStr),
2724 &sdp_with_data); 2747 &sdp_with_data);
2748 JsepSessionDescription jdesc_output(kDummyString);
2725 2749
2726 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output)); 2750 EXPECT_TRUE(SdpDeserialize(sdp_with_data, &jdesc_output));
2727 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output)); 2751 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output));
2728 } 2752 }
2729 2753
2730 TEST_F(WebRtcSdpTest, DeserializeSdpWithRtpDataChannelsAndBandwidth) { 2754 TEST_F(WebRtcSdpTest, DeserializeSdpWithRtpDataChannelsAndBandwidth) {
2731 // We want to test that deserializing data content limits bandwidth 2755 // We want to test that deserializing data content limits bandwidth
2732 // settings (it should never be greater than the default). 2756 // settings (it should never be greater than the default).
2733 // This should prevent someone from using unlimited data bandwidth through 2757 // This should prevent someone from using unlimited data bandwidth through
2734 // JS and "breaking the Internet". 2758 // JS and "breaking the Internet".
2735 // See: https://code.google.com/p/chromium/issues/detail?id=280726 2759 // See: https://code.google.com/p/chromium/issues/detail?id=280726
2736 std::string sdp_with_bandwidth = kSdpString; 2760 std::string sdp_with_bandwidth = kSdpString;
2737 sdp_with_bandwidth.append(kSdpRtpDataChannelString); 2761 sdp_with_bandwidth.append(kSdpRtpDataChannelString);
2738 InjectAfter("a=mid:data_content_name\r\n", 2762 InjectAfter("a=mid:data_content_name\r\n",
2739 "b=AS:100\r\n", 2763 "b=AS:100\r\n",
2740 &sdp_with_bandwidth); 2764 &sdp_with_bandwidth);
2741 JsepSessionDescription jdesc_with_bandwidth(kDummyString); 2765 JsepSessionDescription jdesc_with_bandwidth(kDummyString);
2742 2766
2743 EXPECT_FALSE(SdpDeserialize(sdp_with_bandwidth, &jdesc_with_bandwidth)); 2767 EXPECT_FALSE(SdpDeserialize(sdp_with_bandwidth, &jdesc_with_bandwidth));
2744 } 2768 }
2745 2769
2746 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsAndBandwidth) { 2770 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsAndBandwidth) {
2747 AddSctpDataChannel(); 2771 bool use_sctpmap = true;
2772 AddSctpDataChannel(use_sctpmap);
2748 JsepSessionDescription jdesc(kDummyString); 2773 JsepSessionDescription jdesc(kDummyString);
2749 DataContentDescription* dcd = static_cast<DataContentDescription*>( 2774 DataContentDescription* dcd = static_cast<DataContentDescription*>(
2750 GetFirstDataContent(&desc_)->description); 2775 GetFirstDataContent(&desc_)->description);
2751 dcd->set_bandwidth(100 * 1000); 2776 dcd->set_bandwidth(100 * 1000);
2752 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); 2777 ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
2753 2778
2754 std::string sdp_with_bandwidth = kSdpString; 2779 std::string sdp_with_bandwidth = kSdpString;
2755 sdp_with_bandwidth.append(kSdpSctpDataChannelString); 2780 sdp_with_bandwidth.append(kSdpSctpDataChannelString);
2756 InjectAfter("a=mid:data_content_name\r\n", 2781 InjectAfter("a=mid:data_content_name\r\n",
2757 "b=AS:100\r\n", 2782 "b=AS:100\r\n",
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
3472 "s=-\r\n" 3497 "s=-\r\n"
3473 "t=0 0\r\n" 3498 "t=0 0\r\n"
3474 "m=audio 9 RTP/SAVPF 111\r\n" 3499 "m=audio 9 RTP/SAVPF 111\r\n"
3475 "c=IN IP4 0.0.0.0\r\n" 3500 "c=IN IP4 0.0.0.0\r\n"
3476 "a=rtpmap:111 opus/48000/2\r\n" 3501 "a=rtpmap:111 opus/48000/2\r\n"
3477 "a=msid: track_id\r\n"; 3502 "a=msid: track_id\r\n";
3478 3503
3479 JsepSessionDescription jdesc_output(kDummyString); 3504 JsepSessionDescription jdesc_output(kDummyString);
3480 EXPECT_FALSE(SdpDeserialize(kSdpWithMissingStreamId, &jdesc_output)); 3505 EXPECT_FALSE(SdpDeserialize(kSdpWithMissingStreamId, &jdesc_output));
3481 } 3506 }
OLDNEW
« no previous file with comments | « webrtc/pc/webrtcsdp.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698