media/webrtc/signaling/test/sdp_unittests.cpp

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
michael@0 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4
michael@0 5 #include "timecard.h"
michael@0 6
michael@0 7 #include "CSFLog.h"
michael@0 8
michael@0 9 #include <string>
michael@0 10
michael@0 11 #define GTEST_HAS_RTTI 0
michael@0 12 #include "gtest/gtest.h"
michael@0 13 #include "gtest_utils.h"
michael@0 14
michael@0 15 #include "nspr.h"
michael@0 16 #include "nss.h"
michael@0 17 #include "ssl.h"
michael@0 18
michael@0 19 #include "nsThreadUtils.h"
michael@0 20 #include "FakeMediaStreams.h"
michael@0 21 #include "FakeMediaStreamsImpl.h"
michael@0 22 #include "PeerConnectionImpl.h"
michael@0 23 #include "PeerConnectionCtx.h"
michael@0 24
michael@0 25 #include "mtransport_test_utils.h"
michael@0 26 MtransportTestUtils *test_utils;
michael@0 27 nsCOMPtr<nsIThread> gThread;
michael@0 28
michael@0 29 extern "C" {
michael@0 30 #include "sdp.h"
michael@0 31 #include "sdp_private.h"
michael@0 32 }
michael@0 33
michael@0 34 namespace test {
michael@0 35
michael@0 36 static bool SetupGlobalThread() {
michael@0 37 if (!gThread) {
michael@0 38 nsIThread *thread;
michael@0 39
michael@0 40 nsresult rv = NS_NewNamedThread("pseudo-main",&thread);
michael@0 41 if (NS_FAILED(rv))
michael@0 42 return false;
michael@0 43
michael@0 44 gThread = thread;
michael@0 45 sipcc::PeerConnectionCtx::InitializeGlobal(gThread,
michael@0 46 test_utils->sts_target());
michael@0 47 }
michael@0 48 return true;
michael@0 49 }
michael@0 50
michael@0 51 class SdpTest : public ::testing::Test {
michael@0 52 public:
michael@0 53 SdpTest() : sdp_ptr_(nullptr) {
michael@0 54 sdp_media_e supported_media[] = {
michael@0 55 SDP_MEDIA_AUDIO,
michael@0 56 SDP_MEDIA_VIDEO,
michael@0 57 SDP_MEDIA_APPLICATION,
michael@0 58 SDP_MEDIA_DATA,
michael@0 59 SDP_MEDIA_CONTROL,
michael@0 60 SDP_MEDIA_NAS_RADIUS,
michael@0 61 SDP_MEDIA_NAS_TACACS,
michael@0 62 SDP_MEDIA_NAS_DIAMETER,
michael@0 63 SDP_MEDIA_NAS_L2TP,
michael@0 64 SDP_MEDIA_NAS_LOGIN,
michael@0 65 SDP_MEDIA_NAS_NONE,
michael@0 66 SDP_MEDIA_IMAGE,
michael@0 67 };
michael@0 68
michael@0 69 config_p_ = sdp_init_config();
michael@0 70 unsigned int i;
michael@0 71 for (i = 0; i < sizeof(supported_media) / sizeof(sdp_media_e); i++) {
michael@0 72 sdp_media_supported(config_p_, supported_media[i], true);
michael@0 73 }
michael@0 74 sdp_nettype_supported(config_p_, SDP_NT_INTERNET, true);
michael@0 75 sdp_addrtype_supported(config_p_, SDP_AT_IP4, true);
michael@0 76 sdp_addrtype_supported(config_p_, SDP_AT_IP6, true);
michael@0 77 sdp_transport_supported(config_p_, SDP_TRANSPORT_RTPSAVPF, true);
michael@0 78 sdp_transport_supported(config_p_, SDP_TRANSPORT_UDPTL, true);
michael@0 79 sdp_require_session_name(config_p_, false);
michael@0 80 }
michael@0 81
michael@0 82 static void SetUpTestCase() {
michael@0 83 ASSERT_TRUE(SetupGlobalThread());
michael@0 84 }
michael@0 85
michael@0 86 void SetUp() {
michael@0 87 final_level_ = 0;
michael@0 88 sdp_ptr_ = nullptr;
michael@0 89 }
michael@0 90
michael@0 91 static void TearDownTestCase() {
michael@0 92 gThread = nullptr;
michael@0 93 }
michael@0 94
michael@0 95 void ResetSdp() {
michael@0 96 if (!sdp_ptr_) {
michael@0 97 sdp_free_description(sdp_ptr_);
michael@0 98 }
michael@0 99 sdp_ptr_ = sdp_init_description("BogusPeerConnectionId", config_p_);
michael@0 100 }
michael@0 101
michael@0 102 void ParseSdp(const std::string &sdp_str) {
michael@0 103 char *bufp = const_cast<char *>(sdp_str.data());
michael@0 104 ResetSdp();
michael@0 105 ASSERT_EQ(sdp_parse(sdp_ptr_, &bufp, sdp_str.size()), SDP_SUCCESS);
michael@0 106 }
michael@0 107
michael@0 108 void InitLocalSdp() {
michael@0 109 ResetSdp();
michael@0 110 ASSERT_EQ(sdp_set_version(sdp_ptr_, 0), SDP_SUCCESS);
michael@0 111 ASSERT_EQ(sdp_set_owner_username(sdp_ptr_, "-"), SDP_SUCCESS);
michael@0 112 ASSERT_EQ(sdp_set_owner_sessionid(sdp_ptr_, "132954853"), SDP_SUCCESS);
michael@0 113 ASSERT_EQ(sdp_set_owner_version(sdp_ptr_, "0"), SDP_SUCCESS);
michael@0 114 ASSERT_EQ(sdp_set_owner_network_type(sdp_ptr_, SDP_NT_INTERNET),
michael@0 115 SDP_SUCCESS);
michael@0 116 ASSERT_EQ(sdp_set_owner_address_type(sdp_ptr_, SDP_AT_IP4), SDP_SUCCESS);
michael@0 117 ASSERT_EQ(sdp_set_owner_address(sdp_ptr_, "198.51.100.7"), SDP_SUCCESS);
michael@0 118 ASSERT_EQ(sdp_set_session_name(sdp_ptr_, "SDP Unit Test"), SDP_SUCCESS);
michael@0 119 ASSERT_EQ(sdp_set_time_start(sdp_ptr_, "0"), SDP_SUCCESS);
michael@0 120 ASSERT_EQ(sdp_set_time_stop(sdp_ptr_, "0"), SDP_SUCCESS);
michael@0 121 }
michael@0 122
michael@0 123 std::string SerializeSdp() {
michael@0 124 flex_string fs;
michael@0 125 flex_string_init(&fs);
michael@0 126 EXPECT_EQ(sdp_build(sdp_ptr_, &fs), SDP_SUCCESS);
michael@0 127 std::string body(fs.buffer);
michael@0 128 flex_string_free(&fs);
michael@0 129 return body;
michael@0 130 }
michael@0 131
michael@0 132 // Returns "level" for new media section
michael@0 133 int AddNewMedia(sdp_media_e type) {
michael@0 134 final_level_++;
michael@0 135 EXPECT_EQ(sdp_insert_media_line(sdp_ptr_, final_level_), SDP_SUCCESS);
michael@0 136 EXPECT_EQ(sdp_set_conn_nettype(sdp_ptr_, final_level_, SDP_NT_INTERNET),
michael@0 137 SDP_SUCCESS);
michael@0 138 EXPECT_EQ(sdp_set_conn_addrtype(sdp_ptr_, final_level_, SDP_AT_IP4),
michael@0 139 SDP_SUCCESS);
michael@0 140 EXPECT_EQ(sdp_set_conn_address(sdp_ptr_, final_level_, "198.51.100.7"),
michael@0 141 SDP_SUCCESS);
michael@0 142 EXPECT_EQ(sdp_set_media_type(sdp_ptr_, final_level_, SDP_MEDIA_VIDEO),
michael@0 143 SDP_SUCCESS);
michael@0 144 EXPECT_EQ(sdp_set_media_transport(sdp_ptr_, final_level_,
michael@0 145 SDP_TRANSPORT_RTPAVP),
michael@0 146 SDP_SUCCESS);
michael@0 147 EXPECT_EQ(sdp_set_media_portnum(sdp_ptr_, final_level_, 12345, 0),
michael@0 148 SDP_SUCCESS);
michael@0 149 EXPECT_EQ(sdp_add_media_payload_type(sdp_ptr_, final_level_, 120,
michael@0 150 SDP_PAYLOAD_NUMERIC),
michael@0 151 SDP_SUCCESS);
michael@0 152 return final_level_;
michael@0 153 }
michael@0 154
michael@0 155 u16 AddNewRtcpFbAck(int level, sdp_rtcp_fb_ack_type_e type,
michael@0 156 u16 payload = SDP_ALL_PAYLOADS) {
michael@0 157 u16 inst_num = 0;
michael@0 158 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_RTCP_FB,
michael@0 159 &inst_num), SDP_SUCCESS);
michael@0 160 EXPECT_EQ(sdp_attr_set_rtcp_fb_ack(sdp_ptr_, level, payload, inst_num,
michael@0 161 type), SDP_SUCCESS);
michael@0 162 return inst_num;
michael@0 163 }
michael@0 164
michael@0 165 u16 AddNewRtcpFbNack(int level, sdp_rtcp_fb_nack_type_e type,
michael@0 166 u16 payload = SDP_ALL_PAYLOADS) {
michael@0 167 u16 inst_num = 0;
michael@0 168 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_RTCP_FB,
michael@0 169 &inst_num), SDP_SUCCESS);
michael@0 170 EXPECT_EQ(sdp_attr_set_rtcp_fb_nack(sdp_ptr_, level, payload, inst_num,
michael@0 171 type), SDP_SUCCESS);
michael@0 172 return inst_num;
michael@0 173 }
michael@0 174
michael@0 175 u16 AddNewRtcpFbTrrInt(int level, u32 interval,
michael@0 176 u16 payload = SDP_ALL_PAYLOADS) {
michael@0 177 u16 inst_num = 0;
michael@0 178 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_RTCP_FB,
michael@0 179 &inst_num), SDP_SUCCESS);
michael@0 180 EXPECT_EQ(sdp_attr_set_rtcp_fb_trr_int(sdp_ptr_, level, payload, inst_num,
michael@0 181 interval), SDP_SUCCESS);
michael@0 182 return inst_num;
michael@0 183 }
michael@0 184
michael@0 185 u16 AddNewRtcpFbCcm(int level, sdp_rtcp_fb_ccm_type_e type,
michael@0 186 u16 payload = SDP_ALL_PAYLOADS) {
michael@0 187 u16 inst_num = 0;
michael@0 188 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_RTCP_FB,
michael@0 189 &inst_num), SDP_SUCCESS);
michael@0 190 EXPECT_EQ(sdp_attr_set_rtcp_fb_ccm(sdp_ptr_, level, payload, inst_num,
michael@0 191 type), SDP_SUCCESS);
michael@0 192 return inst_num;
michael@0 193 }
michael@0 194 u16 AddNewExtMap(int level, const char* uri) {
michael@0 195 u16 inst_num = 0;
michael@0 196 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_EXTMAP,
michael@0 197 &inst_num), SDP_SUCCESS);
michael@0 198 EXPECT_EQ(sdp_attr_set_extmap(sdp_ptr_, level, inst_num,
michael@0 199 uri, inst_num), SDP_SUCCESS);
michael@0 200 return inst_num;
michael@0 201 }
michael@0 202
michael@0 203 u16 AddNewFmtpMaxFs(int level, u32 max_fs) {
michael@0 204 u16 inst_num = 0;
michael@0 205 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_FMTP,
michael@0 206 &inst_num), SDP_SUCCESS);
michael@0 207 EXPECT_EQ(sdp_attr_set_fmtp_payload_type(sdp_ptr_, level, 0, inst_num,
michael@0 208 120), SDP_SUCCESS);
michael@0 209 EXPECT_EQ(sdp_attr_set_fmtp_max_fs(sdp_ptr_, level, 0, inst_num, max_fs),
michael@0 210 SDP_SUCCESS);
michael@0 211 return inst_num;
michael@0 212 }
michael@0 213
michael@0 214 u16 AddNewFmtpMaxFr(int level, u32 max_fr) {
michael@0 215 u16 inst_num = 0;
michael@0 216 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_FMTP,
michael@0 217 &inst_num), SDP_SUCCESS);
michael@0 218 EXPECT_EQ(sdp_attr_set_fmtp_payload_type(sdp_ptr_, level, 0, inst_num,
michael@0 219 120), SDP_SUCCESS);
michael@0 220 EXPECT_EQ(sdp_attr_set_fmtp_max_fr(sdp_ptr_, level, 0, inst_num, max_fr),
michael@0 221 SDP_SUCCESS);
michael@0 222 return inst_num;
michael@0 223 }
michael@0 224
michael@0 225 u16 AddNewFmtpMaxFsFr(int level, u32 max_fs, u32 max_fr) {
michael@0 226 u16 inst_num = 0;
michael@0 227 EXPECT_EQ(sdp_add_new_attr(sdp_ptr_, level, 0, SDP_ATTR_FMTP,
michael@0 228 &inst_num), SDP_SUCCESS);
michael@0 229 EXPECT_EQ(sdp_attr_set_fmtp_payload_type(sdp_ptr_, level, 0, inst_num,
michael@0 230 120), SDP_SUCCESS);
michael@0 231 EXPECT_EQ(sdp_attr_set_fmtp_max_fs(sdp_ptr_, level, 0, inst_num, max_fs),
michael@0 232 SDP_SUCCESS);
michael@0 233 EXPECT_EQ(sdp_attr_set_fmtp_max_fr(sdp_ptr_, level, 0, inst_num, max_fr),
michael@0 234 SDP_SUCCESS);
michael@0 235 return inst_num;
michael@0 236 }
michael@0 237
michael@0 238 protected:
michael@0 239 int final_level_;
michael@0 240 void *config_p_;
michael@0 241 sdp_t *sdp_ptr_;
michael@0 242 };
michael@0 243
michael@0 244 static const std::string kVideoSdp =
michael@0 245 "v=0\r\n"
michael@0 246 "o=- 137331303 2 IN IP4 127.0.0.1\r\n"
michael@0 247 "s=SIP Call\r\n"
michael@0 248 "t=0 0\r\n"
michael@0 249 "m=video 56436 RTP/SAVPF 120\r\n"
michael@0 250 "c=IN IP4 198.51.100.7\r\n"
michael@0 251 "a=rtpmap:120 VP8/90000\r\n";
michael@0 252
michael@0 253 TEST_F(SdpTest, parseRtcpFbAckRpsi) {
michael@0 254 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ack rpsi\r\n");
michael@0 255 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 1),
michael@0 256 SDP_RTCP_FB_ACK_RPSI);
michael@0 257 }
michael@0 258
michael@0 259 TEST_F(SdpTest, parseRtcpFbAckApp) {
michael@0 260 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ack app\r\n");
michael@0 261 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 1), SDP_RTCP_FB_ACK_APP);
michael@0 262 }
michael@0 263
michael@0 264 TEST_F(SdpTest, parseRtcpFbAckAppFoo) {
michael@0 265 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ack app foo\r\n");
michael@0 266 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 1), SDP_RTCP_FB_ACK_APP);
michael@0 267 }
michael@0 268
michael@0 269 TEST_F(SdpTest, parseRtcpFbAckFooBar) {
michael@0 270 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ack foo bar\r\n");
michael@0 271 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 1),
michael@0 272 SDP_RTCP_FB_ACK_UNKNOWN);
michael@0 273 }
michael@0 274
michael@0 275 TEST_F(SdpTest, parseRtcpFbAckFooBarBaz) {
michael@0 276 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ack foo bar baz\r\n");
michael@0 277 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 1),
michael@0 278 SDP_RTCP_FB_ACK_UNKNOWN);
michael@0 279 }
michael@0 280
michael@0 281 TEST_F(SdpTest, parseRtcpFbNack) {
michael@0 282 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack\r\n");
michael@0 283 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 284 SDP_RTCP_FB_NACK_BASIC);
michael@0 285 }
michael@0 286
michael@0 287 TEST_F(SdpTest, parseRtcpFbNackPli) {
michael@0 288 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack pli\r\n");
michael@0 289 }
michael@0 290
michael@0 291 TEST_F(SdpTest, parseRtcpFbNackSli) {
michael@0 292 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack sli\r\n");
michael@0 293 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 294 SDP_RTCP_FB_NACK_SLI);
michael@0 295 }
michael@0 296
michael@0 297 TEST_F(SdpTest, parseRtcpFbNackRpsi) {
michael@0 298 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack rpsi\r\n");
michael@0 299 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 300 SDP_RTCP_FB_NACK_RPSI);
michael@0 301 }
michael@0 302
michael@0 303 TEST_F(SdpTest, parseRtcpFbNackApp) {
michael@0 304 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack app\r\n");
michael@0 305 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 306 SDP_RTCP_FB_NACK_APP);
michael@0 307 }
michael@0 308
michael@0 309 TEST_F(SdpTest, parseRtcpFbNackAppFoo) {
michael@0 310 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack app foo\r\n");
michael@0 311 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 312 SDP_RTCP_FB_NACK_APP);
michael@0 313 }
michael@0 314
michael@0 315 TEST_F(SdpTest, parseRtcpFbNackAppFooBar) {
michael@0 316 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack app foo bar\r\n");
michael@0 317 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 318 SDP_RTCP_FB_NACK_APP);
michael@0 319 }
michael@0 320
michael@0 321 TEST_F(SdpTest, parseRtcpFbNackFooBarBaz) {
michael@0 322 ParseSdp(kVideoSdp + "a=rtcp-fb:120 nack foo bar baz\r\n");
michael@0 323 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 324 SDP_RTCP_FB_NACK_UNKNOWN);
michael@0 325 }
michael@0 326
michael@0 327 TEST_F(SdpTest, parseRtcpFbTrrInt0) {
michael@0 328 ParseSdp(kVideoSdp + "a=rtcp-fb:120 trr-int 0\r\n");
michael@0 329 ASSERT_EQ(sdp_attr_get_rtcp_fb_trr_int(sdp_ptr_, 1, 120, 1), 0U);
michael@0 330 }
michael@0 331
michael@0 332 TEST_F(SdpTest, parseRtcpFbTrrInt123) {
michael@0 333 ParseSdp(kVideoSdp + "a=rtcp-fb:120 trr-int 123\r\n");
michael@0 334 ASSERT_EQ(sdp_attr_get_rtcp_fb_trr_int(sdp_ptr_, 1, 120, 1), 123U);
michael@0 335 }
michael@0 336
michael@0 337 TEST_F(SdpTest, parseRtcpFbCcmFir) {
michael@0 338 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm fir\r\n");
michael@0 339 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1), SDP_RTCP_FB_CCM_FIR);
michael@0 340 }
michael@0 341
michael@0 342 TEST_F(SdpTest, parseRtcpFbCcmTmmbr) {
michael@0 343 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm tmmbr\r\n");
michael@0 344 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1),
michael@0 345 SDP_RTCP_FB_CCM_TMMBR);
michael@0 346 }
michael@0 347
michael@0 348 TEST_F(SdpTest, parseRtcpFbCcmTmmbrSmaxpr) {
michael@0 349 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm tmmbr smaxpr=456\r\n");
michael@0 350 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1),
michael@0 351 SDP_RTCP_FB_CCM_TMMBR);
michael@0 352 }
michael@0 353
michael@0 354 TEST_F(SdpTest, parseRtcpFbCcmTstr) {
michael@0 355 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm tstr\r\n");
michael@0 356 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1),
michael@0 357 SDP_RTCP_FB_CCM_TSTR);
michael@0 358 }
michael@0 359
michael@0 360 TEST_F(SdpTest, parseRtcpFbCcmVbcm) {
michael@0 361 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm vbcm 123 456 789\r\n");
michael@0 362 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1),
michael@0 363 SDP_RTCP_FB_CCM_VBCM);
michael@0 364 // We don't currently parse out VBCM submessage types, since we don't have
michael@0 365 // any use for them.
michael@0 366 }
michael@0 367
michael@0 368 TEST_F(SdpTest, parseRtcpFbCcmFoo) {
michael@0 369 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm foo\r\n");
michael@0 370 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1),
michael@0 371 SDP_RTCP_FB_CCM_UNKNOWN);
michael@0 372 }
michael@0 373
michael@0 374 TEST_F(SdpTest, parseRtcpFbCcmFooBarBaz) {
michael@0 375 ParseSdp(kVideoSdp + "a=rtcp-fb:120 ccm foo bar baz\r\n");
michael@0 376 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1),
michael@0 377 SDP_RTCP_FB_CCM_UNKNOWN);
michael@0 378 }
michael@0 379
michael@0 380 TEST_F(SdpTest, parseRtcpFbFoo) {
michael@0 381 ParseSdp(kVideoSdp + "a=rtcp-fb:120 foo\r\n");
michael@0 382 }
michael@0 383
michael@0 384 TEST_F(SdpTest, parseRtcpFbFooBar) {
michael@0 385 ParseSdp(kVideoSdp + "a=rtcp-fb:120 foo bar\r\n");
michael@0 386 }
michael@0 387
michael@0 388 TEST_F(SdpTest, parseRtcpFbFooBarBaz) {
michael@0 389 ParseSdp(kVideoSdp + "a=rtcp-fb:120 foo bar baz\r\n");
michael@0 390 }
michael@0 391
michael@0 392
michael@0 393 TEST_F(SdpTest, parseRtcpFbKitchenSink) {
michael@0 394 ParseSdp(kVideoSdp +
michael@0 395 "a=rtcp-fb:120 ack rpsi\r\n"
michael@0 396 "a=rtcp-fb:120 ack app\r\n"
michael@0 397 "a=rtcp-fb:120 ack app foo\r\n"
michael@0 398 "a=rtcp-fb:120 ack foo bar\r\n"
michael@0 399 "a=rtcp-fb:120 ack foo bar baz\r\n"
michael@0 400 "a=rtcp-fb:120 nack\r\n"
michael@0 401 "a=rtcp-fb:120 nack pli\r\n"
michael@0 402 "a=rtcp-fb:120 nack sli\r\n"
michael@0 403 "a=rtcp-fb:120 nack rpsi\r\n"
michael@0 404 "a=rtcp-fb:120 nack app\r\n"
michael@0 405 "a=rtcp-fb:120 nack app foo\r\n"
michael@0 406 "a=rtcp-fb:120 nack app foo bar\r\n"
michael@0 407 "a=rtcp-fb:120 nack foo bar baz\r\n"
michael@0 408 "a=rtcp-fb:120 trr-int 0\r\n"
michael@0 409 "a=rtcp-fb:120 trr-int 123\r\n"
michael@0 410 "a=rtcp-fb:120 ccm fir\r\n"
michael@0 411 "a=rtcp-fb:120 ccm tmmbr\r\n"
michael@0 412 "a=rtcp-fb:120 ccm tmmbr smaxpr=456\r\n"
michael@0 413 "a=rtcp-fb:120 ccm tstr\r\n"
michael@0 414 "a=rtcp-fb:120 ccm vbcm 123 456 789\r\n"
michael@0 415 "a=rtcp-fb:120 ccm foo\r\n"
michael@0 416 "a=rtcp-fb:120 ccm foo bar baz\r\n"
michael@0 417 "a=rtcp-fb:120 foo\r\n"
michael@0 418 "a=rtcp-fb:120 foo bar\r\n"
michael@0 419 "a=rtcp-fb:120 foo bar baz\r\n");
michael@0 420
michael@0 421 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 1), SDP_RTCP_FB_ACK_RPSI);
michael@0 422 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 2), SDP_RTCP_FB_ACK_APP);
michael@0 423 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 3), SDP_RTCP_FB_ACK_APP);
michael@0 424 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 4),
michael@0 425 SDP_RTCP_FB_ACK_UNKNOWN);
michael@0 426 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 5),
michael@0 427 SDP_RTCP_FB_ACK_UNKNOWN);
michael@0 428 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, 120, 6),
michael@0 429 SDP_RTCP_FB_ACK_NOT_FOUND);
michael@0 430
michael@0 431 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 1),
michael@0 432 SDP_RTCP_FB_NACK_BASIC);
michael@0 433 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 2),
michael@0 434 SDP_RTCP_FB_NACK_PLI);
michael@0 435 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 3),
michael@0 436 SDP_RTCP_FB_NACK_SLI);
michael@0 437 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 4),
michael@0 438 SDP_RTCP_FB_NACK_RPSI);
michael@0 439 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 5),
michael@0 440 SDP_RTCP_FB_NACK_APP);
michael@0 441 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 6),
michael@0 442 SDP_RTCP_FB_NACK_APP);
michael@0 443 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 7),
michael@0 444 SDP_RTCP_FB_NACK_APP);
michael@0 445 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 8),
michael@0 446 SDP_RTCP_FB_NACK_UNKNOWN);
michael@0 447 ASSERT_EQ(sdp_attr_get_rtcp_fb_nack(sdp_ptr_, 1, 120, 9),
michael@0 448 SDP_RTCP_FB_NACK_NOT_FOUND);
michael@0 449
michael@0 450 ASSERT_EQ(sdp_attr_get_rtcp_fb_trr_int(sdp_ptr_, 1, 120, 1), 0U);
michael@0 451 ASSERT_EQ(sdp_attr_get_rtcp_fb_trr_int(sdp_ptr_, 1, 120, 2), 123U);
michael@0 452 ASSERT_EQ(sdp_attr_get_rtcp_fb_trr_int(sdp_ptr_, 1, 120, 3), 0xFFFFFFFF);
michael@0 453
michael@0 454 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 1), SDP_RTCP_FB_CCM_FIR);
michael@0 455 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 2),
michael@0 456 SDP_RTCP_FB_CCM_TMMBR);
michael@0 457 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 3),
michael@0 458 SDP_RTCP_FB_CCM_TMMBR);
michael@0 459 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 4),
michael@0 460 SDP_RTCP_FB_CCM_TSTR);
michael@0 461 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 5),
michael@0 462 SDP_RTCP_FB_CCM_VBCM);
michael@0 463 // We don't currently parse out VBCM submessage types, since we don't have
michael@0 464 // any use for them.
michael@0 465 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 6),
michael@0 466 SDP_RTCP_FB_CCM_UNKNOWN);
michael@0 467 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 7),
michael@0 468 SDP_RTCP_FB_CCM_UNKNOWN);
michael@0 469 ASSERT_EQ(sdp_attr_get_rtcp_fb_ccm(sdp_ptr_, 1, 120, 8),
michael@0 470 SDP_RTCP_FB_CCM_NOT_FOUND);
michael@0 471 }
michael@0 472
michael@0 473 TEST_F(SdpTest, addRtcpFbAckRpsi) {
michael@0 474 InitLocalSdp();
michael@0 475 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 476 AddNewRtcpFbAck(level, SDP_RTCP_FB_ACK_RPSI, 120);
michael@0 477 std::string body = SerializeSdp();
michael@0 478 ASSERT_NE(body.find("a=rtcp-fb:120 ack rpsi\r\n"), std::string::npos);
michael@0 479 }
michael@0 480
michael@0 481 TEST_F(SdpTest, addRtcpFbAckRpsiAllPt) {
michael@0 482 InitLocalSdp();
michael@0 483 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 484 AddNewRtcpFbAck(level, SDP_RTCP_FB_ACK_RPSI);
michael@0 485 std::string body = SerializeSdp();
michael@0 486 ASSERT_NE(body.find("a=rtcp-fb:* ack rpsi\r\n"), std::string::npos);
michael@0 487 }
michael@0 488
michael@0 489 TEST_F(SdpTest, addRtcpFbAckApp) {
michael@0 490 InitLocalSdp();
michael@0 491 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 492 AddNewRtcpFbAck(level, SDP_RTCP_FB_ACK_APP, 120);
michael@0 493 std::string body = SerializeSdp();
michael@0 494 ASSERT_NE(body.find("a=rtcp-fb:120 ack app\r\n"), std::string::npos);
michael@0 495 }
michael@0 496
michael@0 497 TEST_F(SdpTest, addRtcpFbAckAppAllPt) {
michael@0 498 InitLocalSdp();
michael@0 499 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 500 AddNewRtcpFbAck(level, SDP_RTCP_FB_ACK_APP);
michael@0 501 std::string body = SerializeSdp();
michael@0 502 ASSERT_NE(body.find("a=rtcp-fb:* ack app\r\n"), std::string::npos);
michael@0 503 }
michael@0 504
michael@0 505 TEST_F(SdpTest, addRtcpFbNack) {
michael@0 506 InitLocalSdp();
michael@0 507 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 508 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_BASIC, 120);
michael@0 509 std::string body = SerializeSdp();
michael@0 510 ASSERT_NE(body.find("a=rtcp-fb:120 nack\r\n"), std::string::npos);
michael@0 511 }
michael@0 512
michael@0 513 TEST_F(SdpTest, addRtcpFbNackAllPt) {
michael@0 514 InitLocalSdp();
michael@0 515 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 516 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_BASIC);
michael@0 517 std::string body = SerializeSdp();
michael@0 518 ASSERT_NE(body.find("a=rtcp-fb:* nack\r\n"), std::string::npos);
michael@0 519 }
michael@0 520
michael@0 521 TEST_F(SdpTest, addRtcpFbNackSli) {
michael@0 522 InitLocalSdp();
michael@0 523 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 524 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_SLI, 120);
michael@0 525 std::string body = SerializeSdp();
michael@0 526 ASSERT_NE(body.find("a=rtcp-fb:120 nack sli\r\n"), std::string::npos);
michael@0 527 }
michael@0 528
michael@0 529 TEST_F(SdpTest, addRtcpFbNackSliAllPt) {
michael@0 530 InitLocalSdp();
michael@0 531 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 532 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_SLI);
michael@0 533 std::string body = SerializeSdp();
michael@0 534 ASSERT_NE(body.find("a=rtcp-fb:* nack sli\r\n"), std::string::npos);
michael@0 535 }
michael@0 536
michael@0 537 TEST_F(SdpTest, addRtcpFbNackPli) {
michael@0 538 InitLocalSdp();
michael@0 539 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 540 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_PLI, 120);
michael@0 541 std::string body = SerializeSdp();
michael@0 542 ASSERT_NE(body.find("a=rtcp-fb:120 nack pli\r\n"), std::string::npos);
michael@0 543 }
michael@0 544
michael@0 545 TEST_F(SdpTest, addRtcpFbNackPliAllPt) {
michael@0 546 InitLocalSdp();
michael@0 547 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 548 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_PLI);
michael@0 549 std::string body = SerializeSdp();
michael@0 550 ASSERT_NE(body.find("a=rtcp-fb:* nack pli\r\n"), std::string::npos);
michael@0 551 }
michael@0 552
michael@0 553 TEST_F(SdpTest, addRtcpFbNackRpsi) {
michael@0 554 InitLocalSdp();
michael@0 555 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 556 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_RPSI, 120);
michael@0 557 std::string body = SerializeSdp();
michael@0 558 ASSERT_NE(body.find("a=rtcp-fb:120 nack rpsi\r\n"), std::string::npos);
michael@0 559 }
michael@0 560
michael@0 561 TEST_F(SdpTest, addRtcpFbNackRpsiAllPt) {
michael@0 562 InitLocalSdp();
michael@0 563 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 564 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_RPSI);
michael@0 565 std::string body = SerializeSdp();
michael@0 566 ASSERT_NE(body.find("a=rtcp-fb:* nack rpsi\r\n"), std::string::npos);
michael@0 567 }
michael@0 568
michael@0 569 TEST_F(SdpTest, addRtcpFbNackApp) {
michael@0 570 InitLocalSdp();
michael@0 571 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 572 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_APP, 120);
michael@0 573 std::string body = SerializeSdp();
michael@0 574 ASSERT_NE(body.find("a=rtcp-fb:120 nack app\r\n"), std::string::npos);
michael@0 575 }
michael@0 576
michael@0 577 TEST_F(SdpTest, addRtcpFbNackAppAllPt) {
michael@0 578 InitLocalSdp();
michael@0 579 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 580 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_APP);
michael@0 581 std::string body = SerializeSdp();
michael@0 582 ASSERT_NE(body.find("a=rtcp-fb:* nack app\r\n"), std::string::npos);
michael@0 583 }
michael@0 584
michael@0 585 TEST_F(SdpTest, addRtcpFbNackRai) {
michael@0 586 InitLocalSdp();
michael@0 587 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 588 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_RAI, 120);
michael@0 589 std::string body = SerializeSdp();
michael@0 590 ASSERT_NE(body.find("a=rtcp-fb:120 nack rai\r\n"), std::string::npos);
michael@0 591 }
michael@0 592
michael@0 593 TEST_F(SdpTest, addRtcpFbNackRaiAllPt) {
michael@0 594 InitLocalSdp();
michael@0 595 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 596 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_RAI);
michael@0 597 std::string body = SerializeSdp();
michael@0 598 ASSERT_NE(body.find("a=rtcp-fb:* nack rai\r\n"), std::string::npos);
michael@0 599 }
michael@0 600
michael@0 601 TEST_F(SdpTest, addRtcpFbNackTllei) {
michael@0 602 InitLocalSdp();
michael@0 603 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 604 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_TLLEI, 120);
michael@0 605 std::string body = SerializeSdp();
michael@0 606 ASSERT_NE(body.find("a=rtcp-fb:120 nack tllei\r\n"), std::string::npos);
michael@0 607 }
michael@0 608
michael@0 609 TEST_F(SdpTest, addRtcpFbNackTlleiAllPt) {
michael@0 610 InitLocalSdp();
michael@0 611 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 612 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_TLLEI);
michael@0 613 std::string body = SerializeSdp();
michael@0 614 ASSERT_NE(body.find("a=rtcp-fb:* nack tllei\r\n"), std::string::npos);
michael@0 615 }
michael@0 616
michael@0 617 TEST_F(SdpTest, addRtcpFbNackPslei) {
michael@0 618 InitLocalSdp();
michael@0 619 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 620 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_PSLEI, 120);
michael@0 621 std::string body = SerializeSdp();
michael@0 622 ASSERT_NE(body.find("a=rtcp-fb:120 nack pslei\r\n"), std::string::npos);
michael@0 623 }
michael@0 624
michael@0 625 TEST_F(SdpTest, addRtcpFbNackPsleiAllPt) {
michael@0 626 InitLocalSdp();
michael@0 627 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 628 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_PSLEI);
michael@0 629 std::string body = SerializeSdp();
michael@0 630 ASSERT_NE(body.find("a=rtcp-fb:* nack pslei\r\n"), std::string::npos);
michael@0 631 }
michael@0 632
michael@0 633 TEST_F(SdpTest, addRtcpFbNackEcn) {
michael@0 634 InitLocalSdp();
michael@0 635 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 636 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_ECN, 120);
michael@0 637 std::string body = SerializeSdp();
michael@0 638 ASSERT_NE(body.find("a=rtcp-fb:120 nack ecn\r\n"), std::string::npos);
michael@0 639 }
michael@0 640
michael@0 641 TEST_F(SdpTest, addRtcpFbNackEcnAllPt) {
michael@0 642 InitLocalSdp();
michael@0 643 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 644 AddNewRtcpFbNack(level, SDP_RTCP_FB_NACK_ECN);
michael@0 645 std::string body = SerializeSdp();
michael@0 646 ASSERT_NE(body.find("a=rtcp-fb:* nack ecn\r\n"), std::string::npos);
michael@0 647 }
michael@0 648
michael@0 649 TEST_F(SdpTest, addRtcpFbTrrInt) {
michael@0 650 InitLocalSdp();
michael@0 651 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 652 AddNewRtcpFbTrrInt(level, 12345, 120);
michael@0 653 std::string body = SerializeSdp();
michael@0 654 ASSERT_NE(body.find("a=rtcp-fb:120 trr-int 12345\r\n"), std::string::npos);
michael@0 655 }
michael@0 656
michael@0 657 TEST_F(SdpTest, addRtcpFbNackTrrIntAllPt) {
michael@0 658 InitLocalSdp();
michael@0 659 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 660 AddNewRtcpFbTrrInt(level, 0);
michael@0 661 std::string body = SerializeSdp();
michael@0 662 ASSERT_NE(body.find("a=rtcp-fb:* trr-int 0\r\n"), std::string::npos);
michael@0 663 }
michael@0 664
michael@0 665 TEST_F(SdpTest, addRtcpFbCcmFir) {
michael@0 666 InitLocalSdp();
michael@0 667 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 668 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_FIR, 120);
michael@0 669 std::string body = SerializeSdp();
michael@0 670 ASSERT_NE(body.find("a=rtcp-fb:120 ccm fir\r\n"), std::string::npos);
michael@0 671 }
michael@0 672
michael@0 673 TEST_F(SdpTest, addRtcpFbCcmFirAllPt) {
michael@0 674 InitLocalSdp();
michael@0 675 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 676 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_FIR);
michael@0 677 std::string body = SerializeSdp();
michael@0 678 ASSERT_NE(body.find("a=rtcp-fb:* ccm fir\r\n"), std::string::npos);
michael@0 679 }
michael@0 680
michael@0 681 TEST_F(SdpTest, addRtcpFbCcmTmmbr) {
michael@0 682 InitLocalSdp();
michael@0 683 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 684 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_TMMBR, 120);
michael@0 685 std::string body = SerializeSdp();
michael@0 686 ASSERT_NE(body.find("a=rtcp-fb:120 ccm tmmbr\r\n"), std::string::npos);
michael@0 687 }
michael@0 688
michael@0 689 TEST_F(SdpTest, addRtcpFbCcmTmmbrAllPt) {
michael@0 690 InitLocalSdp();
michael@0 691 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 692 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_TMMBR);
michael@0 693 std::string body = SerializeSdp();
michael@0 694 ASSERT_NE(body.find("a=rtcp-fb:* ccm tmmbr\r\n"), std::string::npos);
michael@0 695 }
michael@0 696
michael@0 697 TEST_F(SdpTest, addRtcpFbCcmTstr) {
michael@0 698 InitLocalSdp();
michael@0 699 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 700 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_TSTR, 120);
michael@0 701 std::string body = SerializeSdp();
michael@0 702 ASSERT_NE(body.find("a=rtcp-fb:120 ccm tstr\r\n"), std::string::npos);
michael@0 703 }
michael@0 704
michael@0 705 TEST_F(SdpTest, addRtcpFbCcmTstrAllPt) {
michael@0 706 InitLocalSdp();
michael@0 707 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 708 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_TSTR);
michael@0 709 std::string body = SerializeSdp();
michael@0 710 ASSERT_NE(body.find("a=rtcp-fb:* ccm tstr\r\n"), std::string::npos);
michael@0 711 }
michael@0 712
michael@0 713 TEST_F(SdpTest, addRtcpFbCcmVbcm) {
michael@0 714 InitLocalSdp();
michael@0 715 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 716 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_VBCM, 120);
michael@0 717 std::string body = SerializeSdp();
michael@0 718 ASSERT_NE(body.find("a=rtcp-fb:120 ccm vbcm\r\n"), std::string::npos);
michael@0 719 }
michael@0 720
michael@0 721 TEST_F(SdpTest, addRtcpFbCcmVbcmAllPt) {
michael@0 722 InitLocalSdp();
michael@0 723 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 724 AddNewRtcpFbCcm(level, SDP_RTCP_FB_CCM_VBCM);
michael@0 725 std::string body = SerializeSdp();
michael@0 726 ASSERT_NE(body.find("a=rtcp-fb:* ccm vbcm\r\n"), std::string::npos);
michael@0 727 }
michael@0 728
michael@0 729 TEST_F(SdpTest, parseRtcpFbAllPayloads) {
michael@0 730 ParseSdp(kVideoSdp + "a=rtcp-fb:* ack rpsi\r\n");
michael@0 731 for (int i = 0; i < 128; i++) {
michael@0 732 ASSERT_EQ(sdp_attr_get_rtcp_fb_ack(sdp_ptr_, 1, i, 1),
michael@0 733 SDP_RTCP_FB_ACK_RPSI);
michael@0 734 }
michael@0 735 }
michael@0 736 TEST_F(SdpTest, addExtMap) {
michael@0 737 InitLocalSdp();
michael@0 738 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 739 AddNewExtMap(level, SDP_EXTMAP_AUDIO_LEVEL);
michael@0 740 std::string body = SerializeSdp();
michael@0 741 ASSERT_NE(body.find("a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n"), std::string::npos);
michael@0 742 }
michael@0 743
michael@0 744 TEST_F(SdpTest, parseExtMap) {
michael@0 745 ParseSdp(kVideoSdp +
michael@0 746 "a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n");
michael@0 747 ASSERT_STREQ(sdp_attr_get_extmap_uri(sdp_ptr_, 1, 1),
michael@0 748 SDP_EXTMAP_AUDIO_LEVEL);
michael@0 749 ASSERT_EQ(sdp_attr_get_extmap_id(sdp_ptr_, 1, 1),
michael@0 750 1);
michael@0 751
michael@0 752 }
michael@0 753
michael@0 754 TEST_F(SdpTest, parseFmtpMaxFs) {
michael@0 755 u32 val = 0;
michael@0 756 ParseSdp(kVideoSdp + "a=fmtp:120 max-fs=300;max-fr=30\r\n");
michael@0 757 ASSERT_EQ(sdp_attr_get_fmtp_max_fs(sdp_ptr_, 1, 0, 1, &val), SDP_SUCCESS);
michael@0 758 ASSERT_EQ(val, 300U);
michael@0 759 }
michael@0 760 TEST_F(SdpTest, parseFmtpMaxFr) {
michael@0 761 u32 val = 0;
michael@0 762 ParseSdp(kVideoSdp + "a=fmtp:120 max-fs=300;max-fr=30\r\n");
michael@0 763 ASSERT_EQ(sdp_attr_get_fmtp_max_fr(sdp_ptr_, 1, 0, 1, &val), SDP_SUCCESS);
michael@0 764 ASSERT_EQ(val, 30U);
michael@0 765 }
michael@0 766
michael@0 767 TEST_F(SdpTest, addFmtpMaxFs) {
michael@0 768 InitLocalSdp();
michael@0 769 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 770 AddNewFmtpMaxFs(level, 300);
michael@0 771 std::string body = SerializeSdp();
michael@0 772 ASSERT_NE(body.find("a=fmtp:120 max-fs=300\r\n"), std::string::npos);
michael@0 773 }
michael@0 774
michael@0 775 TEST_F(SdpTest, addFmtpMaxFr) {
michael@0 776 InitLocalSdp();
michael@0 777 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 778 AddNewFmtpMaxFr(level, 30);
michael@0 779 std::string body = SerializeSdp();
michael@0 780 ASSERT_NE(body.find("a=fmtp:120 max-fr=30\r\n"), std::string::npos);
michael@0 781 }
michael@0 782
michael@0 783 TEST_F(SdpTest, addFmtpMaxFsFr) {
michael@0 784 InitLocalSdp();
michael@0 785 int level = AddNewMedia(SDP_MEDIA_VIDEO);
michael@0 786 AddNewFmtpMaxFsFr(level, 300, 30);
michael@0 787 std::string body = SerializeSdp();
michael@0 788 ASSERT_NE(body.find("a=fmtp:120 max-fs=300;max-fr=30\r\n"),
michael@0 789 std::string::npos);
michael@0 790 }
michael@0 791
michael@0 792 static const std::string kBrokenFmtp =
michael@0 793 "v=0\r\n"
michael@0 794 "o=- 137331303 2 IN IP4 127.0.0.1\r\n"
michael@0 795 "s=SIP Call\r\n"
michael@0 796 "t=0 0\r\n"
michael@0 797 "m=video 56436 RTP/SAVPF 120\r\n"
michael@0 798 "c=IN IP4 198.51.100.7\r\n"
michael@0 799 "a=rtpmap:120 VP8/90000\r\n"
michael@0 800 /* Note: the \0 in this string triggered bz://1089207
michael@0 801 */
michael@0 802 "a=fmtp:120 max-fs=300;max\0fr=30";
michael@0 803
michael@0 804 TEST_F(SdpTest, parseBrokenFmtp) {
michael@0 805 u32 val = 0;
michael@0 806 char *buf = const_cast<char *>(kBrokenFmtp.data());
michael@0 807 ResetSdp();
michael@0 808 /* We need to manually invoke the parser here to be able to specify the length
michael@0 809 * of the string beyond the \0 in last line of the string.
michael@0 810 */
michael@0 811 ASSERT_EQ(sdp_parse(sdp_ptr_, &buf, 165), SDP_SUCCESS);
michael@0 812 ASSERT_EQ(sdp_attr_get_fmtp_max_fs(sdp_ptr_, 1, 0, 1, &val), SDP_INVALID_PARAMETER);
michael@0 813 }
michael@0 814
michael@0 815 } // End namespace test.
michael@0 816
michael@0 817 int main(int argc, char **argv) {
michael@0 818 test_utils = new MtransportTestUtils();
michael@0 819 NSS_NoDB_Init(nullptr);
michael@0 820 NSS_SetDomesticPolicy();
michael@0 821
michael@0 822 ::testing::InitGoogleTest(&argc, argv);
michael@0 823 int result = RUN_ALL_TESTS();
michael@0 824
michael@0 825 sipcc::PeerConnectionCtx::Destroy();
michael@0 826 delete test_utils;
michael@0 827
michael@0 828 return result;
michael@0 829 }

mercurial