Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 85 "dummy_session_params\r\n"; | 85 "dummy_session_params\r\n"; |
| 86 static const char kAttributeCryptoVideo[] = | 86 static const char kAttributeCryptoVideo[] = |
| 87 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 " | 87 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 " |
| 88 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"; | 88 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"; |
| 89 static const char kFingerprint[] = "a=fingerprint:sha-1 " | 89 static const char kFingerprint[] = "a=fingerprint:sha-1 " |
| 90 "4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB\r\n"; | 90 "4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB\r\n"; |
| 91 static const int kExtmapId = 1; | 91 static const int kExtmapId = 1; |
| 92 static const char kExtmapUri[] = "http://example.com/082005/ext.htm#ttime"; | 92 static const char kExtmapUri[] = "http://example.com/082005/ext.htm#ttime"; |
| 93 static const char kExtmap[] = | 93 static const char kExtmap[] = |
| 94 "a=extmap:1 http://example.com/082005/ext.htm#ttime\r\n"; | 94 "a=extmap:1 http://example.com/082005/ext.htm#ttime\r\n"; |
| 95 static const char kExtmapEncrypted[] = | |
| 96 "a=extmap:1 urn:ietf:params:rtp-hdrext:encrypt " | |
| 97 "http://example.com/082005/ext.htm#ttime\r\n"; | |
| 95 static const char kExtmapWithDirectionAndAttribute[] = | 98 static const char kExtmapWithDirectionAndAttribute[] = |
| 96 "a=extmap:1/sendrecv http://example.com/082005/ext.htm#ttime a1 a2\r\n"; | 99 "a=extmap:1/sendrecv http://example.com/082005/ext.htm#ttime a1 a2\r\n"; |
| 100 static const char kExtmapWithDirectionAndAttributeEncrypted[] = | |
| 101 "a=extmap:1/sendrecv urn:ietf:params:rtp-hdrext:encrypt " | |
| 102 "http://example.com/082005/ext.htm#ttime a1 a2\r\n"; | |
| 97 | 103 |
| 98 static const uint8_t kIdentityDigest[] = { | 104 static const uint8_t kIdentityDigest[] = { |
| 99 0x4A, 0xAD, 0xB9, 0xB1, 0x3F, 0x82, 0x18, 0x3B, 0x54, 0x02, | 105 0x4A, 0xAD, 0xB9, 0xB1, 0x3F, 0x82, 0x18, 0x3B, 0x54, 0x02, |
| 100 0x12, 0xDF, 0x3E, 0x5D, 0x49, 0x6B, 0x19, 0xE5, 0x7C, 0xAB}; | 106 0x12, 0xDF, 0x3E, 0x5D, 0x49, 0x6B, 0x19, 0xE5, 0x7C, 0xAB}; |
| 101 | 107 |
| 102 static const char kDtlsSctp[] = "DTLS/SCTP"; | 108 static const char kDtlsSctp[] = "DTLS/SCTP"; |
| 103 static const char kUdpDtlsSctp[] = "UDP/DTLS/SCTP"; | 109 static const char kUdpDtlsSctp[] = "UDP/DTLS/SCTP"; |
| 104 static const char kTcpDtlsSctp[] = "TCP/DTLS/SCTP"; | 110 static const char kTcpDtlsSctp[] = "TCP/DTLS/SCTP"; |
| 105 | 111 |
| 106 struct CodecParams { | 112 struct CodecParams { |
| (...skipping 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1203 EXPECT_EQ(cd1->streams(), cd2->streams()); | 1209 EXPECT_EQ(cd1->streams(), cd2->streams()); |
| 1204 | 1210 |
| 1205 // extmap | 1211 // extmap |
| 1206 ASSERT_EQ(cd1->rtp_header_extensions().size(), | 1212 ASSERT_EQ(cd1->rtp_header_extensions().size(), |
| 1207 cd2->rtp_header_extensions().size()); | 1213 cd2->rtp_header_extensions().size()); |
| 1208 for (size_t i = 0; i< cd1->rtp_header_extensions().size(); ++i) { | 1214 for (size_t i = 0; i< cd1->rtp_header_extensions().size(); ++i) { |
| 1209 const RtpExtension ext1 = cd1->rtp_header_extensions().at(i); | 1215 const RtpExtension ext1 = cd1->rtp_header_extensions().at(i); |
| 1210 const RtpExtension ext2 = cd2->rtp_header_extensions().at(i); | 1216 const RtpExtension ext2 = cd2->rtp_header_extensions().at(i); |
| 1211 EXPECT_EQ(ext1.uri, ext2.uri); | 1217 EXPECT_EQ(ext1.uri, ext2.uri); |
| 1212 EXPECT_EQ(ext1.id, ext2.id); | 1218 EXPECT_EQ(ext1.id, ext2.id); |
| 1219 EXPECT_EQ(ext1.encrypted, ext2.encrypted); | |
| 1213 } | 1220 } |
| 1214 } | 1221 } |
| 1215 | 1222 |
| 1216 void CompareDataContentDescription(const DataContentDescription* dcd1, | 1223 void CompareDataContentDescription(const DataContentDescription* dcd1, |
| 1217 const DataContentDescription* dcd2) { | 1224 const DataContentDescription* dcd2) { |
| 1218 EXPECT_EQ(dcd1->use_sctpmap(), dcd2->use_sctpmap()); | 1225 EXPECT_EQ(dcd1->use_sctpmap(), dcd2->use_sctpmap()); |
| 1219 CompareMediaContentDescription<DataContentDescription>(dcd1, dcd2); | 1226 CompareMediaContentDescription<DataContentDescription>(dcd1, dcd2); |
| 1220 } | 1227 } |
| 1221 | 1228 |
| 1222 void CompareSessionDescription(const SessionDescription& desc1, | 1229 void CompareSessionDescription(const SessionDescription& desc1, |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1424 TransportDescription(std::vector<std::string>(), kUfragVoice, kPwdVoice, | 1431 TransportDescription(std::vector<std::string>(), kUfragVoice, kPwdVoice, |
| 1425 cricket::ICEMODE_FULL, | 1432 cricket::ICEMODE_FULL, |
| 1426 cricket::CONNECTIONROLE_NONE, &fingerprint)))); | 1433 cricket::CONNECTIONROLE_NONE, &fingerprint)))); |
| 1427 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo( | 1434 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo( |
| 1428 kVideoContentName, | 1435 kVideoContentName, |
| 1429 TransportDescription(std::vector<std::string>(), kUfragVideo, kPwdVideo, | 1436 TransportDescription(std::vector<std::string>(), kUfragVideo, kPwdVideo, |
| 1430 cricket::ICEMODE_FULL, | 1437 cricket::ICEMODE_FULL, |
| 1431 cricket::CONNECTIONROLE_NONE, &fingerprint)))); | 1438 cricket::CONNECTIONROLE_NONE, &fingerprint)))); |
| 1432 } | 1439 } |
| 1433 | 1440 |
| 1434 void AddExtmap() { | 1441 void AddExtmap(bool encrypted) { |
| 1435 audio_desc_ = static_cast<AudioContentDescription*>( | 1442 audio_desc_ = static_cast<AudioContentDescription*>( |
| 1436 audio_desc_->Copy()); | 1443 audio_desc_->Copy()); |
| 1437 video_desc_ = static_cast<VideoContentDescription*>( | 1444 video_desc_ = static_cast<VideoContentDescription*>( |
| 1438 video_desc_->Copy()); | 1445 video_desc_->Copy()); |
| 1439 audio_desc_->AddRtpHeaderExtension(RtpExtension(kExtmapUri, kExtmapId)); | 1446 audio_desc_->AddRtpHeaderExtension( |
| 1440 video_desc_->AddRtpHeaderExtension(RtpExtension(kExtmapUri, kExtmapId)); | 1447 RtpExtension(kExtmapUri, kExtmapId, encrypted)); |
| 1448 video_desc_->AddRtpHeaderExtension( | |
| 1449 RtpExtension(kExtmapUri, kExtmapId, encrypted)); | |
| 1441 desc_.RemoveContentByName(kAudioContentName); | 1450 desc_.RemoveContentByName(kAudioContentName); |
| 1442 desc_.RemoveContentByName(kVideoContentName); | 1451 desc_.RemoveContentByName(kVideoContentName); |
| 1443 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_desc_); | 1452 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_desc_); |
| 1444 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_desc_); | 1453 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_desc_); |
| 1445 } | 1454 } |
| 1446 | 1455 |
| 1447 void RemoveCryptos() { | 1456 void RemoveCryptos() { |
| 1448 audio_desc_->set_cryptos(std::vector<CryptoParams>()); | 1457 audio_desc_->set_cryptos(std::vector<CryptoParams>()); |
| 1449 video_desc_->set_cryptos(std::vector<CryptoParams>()); | 1458 video_desc_->set_cryptos(std::vector<CryptoParams>()); |
| 1450 } | 1459 } |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1568 video_rejected ? "" : kPwdVideo); | 1577 video_rejected ? "" : kPwdVideo); |
| 1569 JsepSessionDescription jdesc_no_candidates(kDummyString); | 1578 JsepSessionDescription jdesc_no_candidates(kDummyString); |
| 1570 if (!jdesc_no_candidates.Initialize(desc_.Copy(), jdesc_.session_id(), | 1579 if (!jdesc_no_candidates.Initialize(desc_.Copy(), jdesc_.session_id(), |
| 1571 jdesc_.session_version())) { | 1580 jdesc_.session_version())) { |
| 1572 return false; | 1581 return false; |
| 1573 } | 1582 } |
| 1574 EXPECT_TRUE(CompareSessionDescription(jdesc_no_candidates, new_jdesc)); | 1583 EXPECT_TRUE(CompareSessionDescription(jdesc_no_candidates, new_jdesc)); |
| 1575 return true; | 1584 return true; |
| 1576 } | 1585 } |
| 1577 | 1586 |
| 1578 void TestDeserializeExtmap(bool session_level, bool media_level) { | 1587 void TestDeserializeExtmap(bool session_level, bool media_level, |
| 1579 AddExtmap(); | 1588 bool encrypted) { |
| 1589 AddExtmap(encrypted); | |
| 1580 JsepSessionDescription new_jdesc("dummy"); | 1590 JsepSessionDescription new_jdesc("dummy"); |
| 1581 ASSERT_TRUE(new_jdesc.Initialize(desc_.Copy(), | 1591 ASSERT_TRUE(new_jdesc.Initialize(desc_.Copy(), |
| 1582 jdesc_.session_id(), | 1592 jdesc_.session_id(), |
| 1583 jdesc_.session_version())); | 1593 jdesc_.session_version())); |
| 1584 JsepSessionDescription jdesc_with_extmap("dummy"); | 1594 JsepSessionDescription jdesc_with_extmap("dummy"); |
| 1585 std::string sdp_with_extmap = kSdpString; | 1595 std::string sdp_with_extmap = kSdpString; |
| 1586 if (session_level) { | 1596 if (session_level) { |
| 1587 InjectAfter(kSessionTime, kExtmapWithDirectionAndAttribute, | 1597 InjectAfter(kSessionTime, |
| 1598 encrypted ? kExtmapWithDirectionAndAttributeEncrypted | |
| 1599 : kExtmapWithDirectionAndAttribute, | |
| 1588 &sdp_with_extmap); | 1600 &sdp_with_extmap); |
| 1589 } | 1601 } |
| 1590 if (media_level) { | 1602 if (media_level) { |
| 1591 InjectAfter(kAttributeIcePwdVoice, kExtmapWithDirectionAndAttribute, | 1603 InjectAfter(kAttributeIcePwdVoice, |
| 1604 encrypted ? kExtmapWithDirectionAndAttributeEncrypted | |
| 1605 : kExtmapWithDirectionAndAttribute, | |
| 1592 &sdp_with_extmap); | 1606 &sdp_with_extmap); |
| 1593 InjectAfter(kAttributeIcePwdVideo, kExtmapWithDirectionAndAttribute, | 1607 InjectAfter(kAttributeIcePwdVideo, |
| 1608 encrypted ? kExtmapWithDirectionAndAttributeEncrypted | |
| 1609 : kExtmapWithDirectionAndAttribute, | |
| 1594 &sdp_with_extmap); | 1610 &sdp_with_extmap); |
| 1595 } | 1611 } |
| 1596 // The extmap can't be present at the same time in both session level and | 1612 // The extmap can't be present at the same time in both session level and |
| 1597 // media level. | 1613 // media level. |
| 1598 if (session_level && media_level) { | 1614 if (session_level && media_level) { |
| 1599 SdpParseError error; | 1615 SdpParseError error; |
| 1600 EXPECT_FALSE(webrtc::SdpDeserialize(sdp_with_extmap, | 1616 EXPECT_FALSE(webrtc::SdpDeserialize(sdp_with_extmap, |
| 1601 &jdesc_with_extmap, &error)); | 1617 &jdesc_with_extmap, &error)); |
| 1602 EXPECT_NE(std::string::npos, error.description.find("a=extmap")); | 1618 EXPECT_NE(std::string::npos, error.description.find("a=extmap")); |
| 1603 } else { | 1619 } else { |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2122 std::string expected_sdp = kSdpString; | 2138 std::string expected_sdp = kSdpString; |
| 2123 expected_sdp.append(kSdpRtpDataChannelString); | 2139 expected_sdp.append(kSdpRtpDataChannelString); |
| 2124 // Serializing data content shouldn't ignore bandwidth settings. | 2140 // Serializing data content shouldn't ignore bandwidth settings. |
| 2125 InjectAfter("m=application 9 RTP/SAVPF 101\r\nc=IN IP4 0.0.0.0\r\n", | 2141 InjectAfter("m=application 9 RTP/SAVPF 101\r\nc=IN IP4 0.0.0.0\r\n", |
| 2126 "b=AS:100\r\n", | 2142 "b=AS:100\r\n", |
| 2127 &expected_sdp); | 2143 &expected_sdp); |
| 2128 EXPECT_EQ(expected_sdp, message); | 2144 EXPECT_EQ(expected_sdp, message); |
| 2129 } | 2145 } |
| 2130 | 2146 |
| 2131 TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithExtmap) { | 2147 TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithExtmap) { |
| 2132 AddExtmap(); | 2148 bool encrypted = false; |
| 2149 AddExtmap(encrypted); | |
| 2133 JsepSessionDescription desc_with_extmap("dummy"); | 2150 JsepSessionDescription desc_with_extmap("dummy"); |
| 2134 ASSERT_TRUE(desc_with_extmap.Initialize(desc_.Copy(), | 2151 ASSERT_TRUE(desc_with_extmap.Initialize(desc_.Copy(), |
| 2135 kSessionId, kSessionVersion)); | 2152 kSessionId, kSessionVersion)); |
| 2136 std::string message = webrtc::SdpSerialize(desc_with_extmap, false); | 2153 std::string message = webrtc::SdpSerialize(desc_with_extmap, false); |
| 2137 | 2154 |
| 2138 std::string sdp_with_extmap = kSdpString; | 2155 std::string sdp_with_extmap = kSdpString; |
| 2139 InjectAfter("a=mid:audio_content_name\r\n", | 2156 InjectAfter("a=mid:audio_content_name\r\n", |
| 2140 kExtmap, &sdp_with_extmap); | 2157 kExtmap, &sdp_with_extmap); |
| 2141 InjectAfter("a=mid:video_content_name\r\n", | 2158 InjectAfter("a=mid:video_content_name\r\n", |
| 2142 kExtmap, &sdp_with_extmap); | 2159 kExtmap, &sdp_with_extmap); |
| 2143 | 2160 |
| 2144 EXPECT_EQ(sdp_with_extmap, message); | 2161 EXPECT_EQ(sdp_with_extmap, message); |
| 2145 } | 2162 } |
| 2146 | 2163 |
| 2164 TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithExtmapEncrypted) { | |
| 2165 bool encrypted = true; | |
| 2166 AddExtmap(encrypted); | |
| 2167 JsepSessionDescription desc_with_extmap("dummy"); | |
| 2168 ASSERT_TRUE(desc_with_extmap.Initialize(desc_.Copy(), | |
| 2169 kSessionId, kSessionVersion)); | |
| 2170 std::string message = webrtc::SdpSerialize(desc_with_extmap, false); | |
| 2171 | |
| 2172 std::string sdp_with_extmap = kSdpString; | |
| 2173 InjectAfter("a=mid:audio_content_name\r\n", | |
| 2174 kExtmapEncrypted, &sdp_with_extmap); | |
| 2175 InjectAfter("a=mid:video_content_name\r\n", | |
| 2176 kExtmapEncrypted, &sdp_with_extmap); | |
| 2177 | |
| 2178 EXPECT_EQ(sdp_with_extmap, message); | |
|
Taylor Brandstetter
2017/03/22 18:00:11
nit: Tests for SDP string equality are fragile sin
joachim
2017/03/23 00:04:34
I based my test on "SerializeSessionDescriptionWit
| |
| 2179 } | |
| 2180 | |
| 2147 TEST_F(WebRtcSdpTest, SerializeCandidates) { | 2181 TEST_F(WebRtcSdpTest, SerializeCandidates) { |
| 2148 std::string message = webrtc::SdpSerializeCandidate(*jcandidate_); | 2182 std::string message = webrtc::SdpSerializeCandidate(*jcandidate_); |
| 2149 EXPECT_EQ(std::string(kRawCandidate), message); | 2183 EXPECT_EQ(std::string(kRawCandidate), message); |
| 2150 | 2184 |
| 2151 Candidate candidate_with_ufrag(candidates_.front()); | 2185 Candidate candidate_with_ufrag(candidates_.front()); |
| 2152 candidate_with_ufrag.set_username("ABC"); | 2186 candidate_with_ufrag.set_username("ABC"); |
| 2153 jcandidate_.reset(new JsepIceCandidate(std::string("audio_content_name"), 0, | 2187 jcandidate_.reset(new JsepIceCandidate(std::string("audio_content_name"), 0, |
| 2154 candidate_with_ufrag)); | 2188 candidate_with_ufrag)); |
| 2155 message = webrtc::SdpSerializeCandidate(*jcandidate_); | 2189 message = webrtc::SdpSerializeCandidate(*jcandidate_); |
| 2156 EXPECT_EQ(std::string(kRawCandidate) + " ufrag ABC", message); | 2190 EXPECT_EQ(std::string(kRawCandidate) + " ufrag ABC", message); |
| (...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2782 "b=AS:100\r\n", | 2816 "b=AS:100\r\n", |
| 2783 &sdp_with_bandwidth); | 2817 &sdp_with_bandwidth); |
| 2784 JsepSessionDescription jdesc_with_bandwidth(kDummyString); | 2818 JsepSessionDescription jdesc_with_bandwidth(kDummyString); |
| 2785 | 2819 |
| 2786 // SCTP has congestion control, so we shouldn't limit the bandwidth | 2820 // SCTP has congestion control, so we shouldn't limit the bandwidth |
| 2787 // as we do for RTP. | 2821 // as we do for RTP. |
| 2788 EXPECT_TRUE(SdpDeserialize(sdp_with_bandwidth, &jdesc_with_bandwidth)); | 2822 EXPECT_TRUE(SdpDeserialize(sdp_with_bandwidth, &jdesc_with_bandwidth)); |
| 2789 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_with_bandwidth)); | 2823 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_with_bandwidth)); |
| 2790 } | 2824 } |
| 2791 | 2825 |
| 2792 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithSessionLevelExtmap) { | 2826 class WebRtcSdpExtmapTest |
| 2793 TestDeserializeExtmap(true, false); | 2827 : public WebRtcSdpTest, public testing::WithParamInterface<bool> { |
| 2828 }; | |
| 2829 | |
| 2830 TEST_P(WebRtcSdpExtmapTest, | |
| 2831 DeserializeSessionDescriptionWithSessionLevelExtmap) { | |
| 2832 bool encrypted = GetParam(); | |
| 2833 TestDeserializeExtmap(true, false, encrypted); | |
| 2794 } | 2834 } |
| 2795 | 2835 |
| 2796 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithMediaLevelExtmap) { | 2836 TEST_P(WebRtcSdpExtmapTest, |
| 2797 TestDeserializeExtmap(false, true); | 2837 DeserializeSessionDescriptionWithMediaLevelExtmap) { |
| 2838 bool encrypted = GetParam(); | |
| 2839 TestDeserializeExtmap(false, true, encrypted); | |
| 2798 } | 2840 } |
| 2799 | 2841 |
| 2800 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithInvalidExtmap) { | 2842 TEST_P(WebRtcSdpExtmapTest, |
| 2801 TestDeserializeExtmap(true, true); | 2843 DeserializeSessionDescriptionWithInvalidExtmap) { |
| 2844 bool encrypted = GetParam(); | |
| 2845 TestDeserializeExtmap(true, true, encrypted); | |
| 2802 } | 2846 } |
| 2803 | 2847 |
| 2848 INSTANTIATE_TEST_CASE_P(Encrypted, | |
| 2849 WebRtcSdpExtmapTest, | |
| 2850 ::testing::Values(false, true)); | |
| 2851 | |
| 2804 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutEndLineBreak) { | 2852 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutEndLineBreak) { |
| 2805 JsepSessionDescription jdesc(kDummyString); | 2853 JsepSessionDescription jdesc(kDummyString); |
| 2806 std::string sdp = kSdpFullString; | 2854 std::string sdp = kSdpFullString; |
| 2807 sdp = sdp.substr(0, sdp.size() - 2); // Remove \r\n at the end. | 2855 sdp = sdp.substr(0, sdp.size() - 2); // Remove \r\n at the end. |
| 2808 // Deserialize | 2856 // Deserialize |
| 2809 SdpParseError error; | 2857 SdpParseError error; |
| 2810 EXPECT_FALSE(webrtc::SdpDeserialize(sdp, &jdesc, &error)); | 2858 EXPECT_FALSE(webrtc::SdpDeserialize(sdp, &jdesc, &error)); |
| 2811 const std::string lastline = "a=ssrc:3 label:video_track_id_1"; | 2859 const std::string lastline = "a=ssrc:3 label:video_track_id_1"; |
| 2812 EXPECT_EQ(lastline, error.line); | 2860 EXPECT_EQ(lastline, error.line); |
| 2813 EXPECT_EQ("Invalid SDP line.", error.description); | 2861 EXPECT_EQ("Invalid SDP line.", error.description); |
| (...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3497 "s=-\r\n" | 3545 "s=-\r\n" |
| 3498 "t=0 0\r\n" | 3546 "t=0 0\r\n" |
| 3499 "m=audio 9 RTP/SAVPF 111\r\n" | 3547 "m=audio 9 RTP/SAVPF 111\r\n" |
| 3500 "c=IN IP4 0.0.0.0\r\n" | 3548 "c=IN IP4 0.0.0.0\r\n" |
| 3501 "a=rtpmap:111 opus/48000/2\r\n" | 3549 "a=rtpmap:111 opus/48000/2\r\n" |
| 3502 "a=msid: track_id\r\n"; | 3550 "a=msid: track_id\r\n"; |
| 3503 | 3551 |
| 3504 JsepSessionDescription jdesc_output(kDummyString); | 3552 JsepSessionDescription jdesc_output(kDummyString); |
| 3505 EXPECT_FALSE(SdpDeserialize(kSdpWithMissingStreamId, &jdesc_output)); | 3553 EXPECT_FALSE(SdpDeserialize(kSdpWithMissingStreamId, &jdesc_output)); |
| 3506 } | 3554 } |
| OLD | NEW |