Thu, 15 Jan 2015 15:59:08 +0100
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 | } |