| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 |
| 11 #include <memory> |
| 11 #include <string> | 12 #include <string> |
| 12 | 13 |
| 13 #include "webrtc/base/buffer.h" | 14 #include "webrtc/base/buffer.h" |
| 14 #include "webrtc/base/gunit.h" | 15 #include "webrtc/base/gunit.h" |
| 15 #include "webrtc/base/helpers.h" | 16 #include "webrtc/base/helpers.h" |
| 16 #include "webrtc/base/scoped_ptr.h" | |
| 17 #include "webrtc/base/ssladapter.h" | 17 #include "webrtc/base/ssladapter.h" |
| 18 #include "webrtc/base/timing.h" | 18 #include "webrtc/base/timing.h" |
| 19 #include "webrtc/media/base/constants.h" | 19 #include "webrtc/media/base/constants.h" |
| 20 #include "webrtc/media/base/fakenetworkinterface.h" | 20 #include "webrtc/media/base/fakenetworkinterface.h" |
| 21 #include "webrtc/media/base/rtpdataengine.h" | 21 #include "webrtc/media/base/rtpdataengine.h" |
| 22 #include "webrtc/media/base/rtputils.h" | 22 #include "webrtc/media/base/rtputils.h" |
| 23 | 23 |
| 24 class FakeTiming : public rtc::Timing { | 24 class FakeTiming : public rtc::Timing { |
| 25 public: | 25 public: |
| 26 FakeTiming() : now_(0.0) {} | 26 FakeTiming() : now_(0.0) {} |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 cricket::ReceiveDataParams GetReceivedDataParams() { | 117 cricket::ReceiveDataParams GetReceivedDataParams() { |
| 118 return receiver_->last_received_data_params(); | 118 return receiver_->last_received_data_params(); |
| 119 } | 119 } |
| 120 | 120 |
| 121 bool HasSentData(int count) { | 121 bool HasSentData(int count) { |
| 122 return (iface_->NumRtpPackets() > count); | 122 return (iface_->NumRtpPackets() > count); |
| 123 } | 123 } |
| 124 | 124 |
| 125 std::string GetSentData(int index) { | 125 std::string GetSentData(int index) { |
| 126 // Assume RTP header of length 12 | 126 // Assume RTP header of length 12 |
| 127 rtc::scoped_ptr<const rtc::Buffer> packet( | 127 std::unique_ptr<const rtc::Buffer> packet( |
| 128 iface_->GetRtpPacket(index)); | 128 iface_->GetRtpPacket(index)); |
| 129 if (packet->size() > 12) { | 129 if (packet->size() > 12) { |
| 130 return std::string(packet->data<char>() + 12, packet->size() - 12); | 130 return std::string(packet->data<char>() + 12, packet->size() - 12); |
| 131 } else { | 131 } else { |
| 132 return ""; | 132 return ""; |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 | 135 |
| 136 cricket::RtpHeader GetSentDataHeader(int index) { | 136 cricket::RtpHeader GetSentDataHeader(int index) { |
| 137 rtc::scoped_ptr<const rtc::Buffer> packet( | 137 std::unique_ptr<const rtc::Buffer> packet( |
| 138 iface_->GetRtpPacket(index)); | 138 iface_->GetRtpPacket(index)); |
| 139 cricket::RtpHeader header; | 139 cricket::RtpHeader header; |
| 140 GetRtpHeader(packet->data(), packet->size(), &header); | 140 GetRtpHeader(packet->data(), packet->size(), &header); |
| 141 return header; | 141 return header; |
| 142 } | 142 } |
| 143 | 143 |
| 144 private: | 144 private: |
| 145 rtc::scoped_ptr<cricket::RtpDataEngine> dme_; | 145 std::unique_ptr<cricket::RtpDataEngine> dme_; |
| 146 // Timing passed into dme_. Owned by dme_; | 146 // Timing passed into dme_. Owned by dme_; |
| 147 FakeTiming* timing_; | 147 FakeTiming* timing_; |
| 148 rtc::scoped_ptr<cricket::FakeNetworkInterface> iface_; | 148 std::unique_ptr<cricket::FakeNetworkInterface> iface_; |
| 149 rtc::scoped_ptr<FakeDataReceiver> receiver_; | 149 std::unique_ptr<FakeDataReceiver> receiver_; |
| 150 }; | 150 }; |
| 151 | 151 |
| 152 TEST_F(RtpDataMediaChannelTest, SetUnknownCodecs) { | 152 TEST_F(RtpDataMediaChannelTest, SetUnknownCodecs) { |
| 153 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 153 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 154 | 154 |
| 155 cricket::DataCodec known_codec; | 155 cricket::DataCodec known_codec; |
| 156 known_codec.id = 103; | 156 known_codec.id = 103; |
| 157 known_codec.name = "google-data"; | 157 known_codec.name = "google-data"; |
| 158 cricket::DataCodec unknown_codec; | 158 cricket::DataCodec unknown_codec; |
| 159 unknown_codec.id = 104; | 159 unknown_codec.id = 104; |
| 160 unknown_codec.name = "unknown-data"; | 160 unknown_codec.name = "unknown-data"; |
| 161 | 161 |
| 162 cricket::DataSendParameters send_parameters_known; | 162 cricket::DataSendParameters send_parameters_known; |
| 163 send_parameters_known.codecs.push_back(known_codec); | 163 send_parameters_known.codecs.push_back(known_codec); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 178 | 178 |
| 179 EXPECT_TRUE(dmc->SetSendParameters(send_parameters_known)); | 179 EXPECT_TRUE(dmc->SetSendParameters(send_parameters_known)); |
| 180 EXPECT_FALSE(dmc->SetSendParameters(send_parameters_unknown)); | 180 EXPECT_FALSE(dmc->SetSendParameters(send_parameters_unknown)); |
| 181 EXPECT_TRUE(dmc->SetSendParameters(send_parameters_mixed)); | 181 EXPECT_TRUE(dmc->SetSendParameters(send_parameters_mixed)); |
| 182 EXPECT_TRUE(dmc->SetRecvParameters(recv_parameters_known)); | 182 EXPECT_TRUE(dmc->SetRecvParameters(recv_parameters_known)); |
| 183 EXPECT_FALSE(dmc->SetRecvParameters(recv_parameters_unknown)); | 183 EXPECT_FALSE(dmc->SetRecvParameters(recv_parameters_unknown)); |
| 184 EXPECT_FALSE(dmc->SetRecvParameters(recv_parameters_mixed)); | 184 EXPECT_FALSE(dmc->SetRecvParameters(recv_parameters_mixed)); |
| 185 } | 185 } |
| 186 | 186 |
| 187 TEST_F(RtpDataMediaChannelTest, AddRemoveSendStream) { | 187 TEST_F(RtpDataMediaChannelTest, AddRemoveSendStream) { |
| 188 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 188 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 189 | 189 |
| 190 cricket::StreamParams stream1; | 190 cricket::StreamParams stream1; |
| 191 stream1.add_ssrc(41); | 191 stream1.add_ssrc(41); |
| 192 EXPECT_TRUE(dmc->AddSendStream(stream1)); | 192 EXPECT_TRUE(dmc->AddSendStream(stream1)); |
| 193 cricket::StreamParams stream2; | 193 cricket::StreamParams stream2; |
| 194 stream2.add_ssrc(42); | 194 stream2.add_ssrc(42); |
| 195 EXPECT_TRUE(dmc->AddSendStream(stream2)); | 195 EXPECT_TRUE(dmc->AddSendStream(stream2)); |
| 196 | 196 |
| 197 EXPECT_TRUE(dmc->RemoveSendStream(41)); | 197 EXPECT_TRUE(dmc->RemoveSendStream(41)); |
| 198 EXPECT_TRUE(dmc->RemoveSendStream(42)); | 198 EXPECT_TRUE(dmc->RemoveSendStream(42)); |
| 199 EXPECT_FALSE(dmc->RemoveSendStream(43)); | 199 EXPECT_FALSE(dmc->RemoveSendStream(43)); |
| 200 } | 200 } |
| 201 | 201 |
| 202 TEST_F(RtpDataMediaChannelTest, AddRemoveRecvStream) { | 202 TEST_F(RtpDataMediaChannelTest, AddRemoveRecvStream) { |
| 203 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 203 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 204 | 204 |
| 205 cricket::StreamParams stream1; | 205 cricket::StreamParams stream1; |
| 206 stream1.add_ssrc(41); | 206 stream1.add_ssrc(41); |
| 207 EXPECT_TRUE(dmc->AddRecvStream(stream1)); | 207 EXPECT_TRUE(dmc->AddRecvStream(stream1)); |
| 208 cricket::StreamParams stream2; | 208 cricket::StreamParams stream2; |
| 209 stream2.add_ssrc(42); | 209 stream2.add_ssrc(42); |
| 210 EXPECT_TRUE(dmc->AddRecvStream(stream2)); | 210 EXPECT_TRUE(dmc->AddRecvStream(stream2)); |
| 211 EXPECT_FALSE(dmc->AddRecvStream(stream2)); | 211 EXPECT_FALSE(dmc->AddRecvStream(stream2)); |
| 212 | 212 |
| 213 EXPECT_TRUE(dmc->RemoveRecvStream(41)); | 213 EXPECT_TRUE(dmc->RemoveRecvStream(41)); |
| 214 EXPECT_TRUE(dmc->RemoveRecvStream(42)); | 214 EXPECT_TRUE(dmc->RemoveRecvStream(42)); |
| 215 } | 215 } |
| 216 | 216 |
| 217 TEST_F(RtpDataMediaChannelTest, SendData) { | 217 TEST_F(RtpDataMediaChannelTest, SendData) { |
| 218 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 218 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 219 | 219 |
| 220 cricket::SendDataParams params; | 220 cricket::SendDataParams params; |
| 221 params.ssrc = 42; | 221 params.ssrc = 42; |
| 222 unsigned char data[] = "food"; | 222 unsigned char data[] = "food"; |
| 223 rtc::Buffer payload(data, 4); | 223 rtc::Buffer payload(data, 4); |
| 224 unsigned char padded_data[] = { | 224 unsigned char padded_data[] = { |
| 225 0x00, 0x00, 0x00, 0x00, | 225 0x00, 0x00, 0x00, 0x00, |
| 226 'f', 'o', 'o', 'd', | 226 'f', 'o', 'o', 'd', |
| 227 }; | 227 }; |
| 228 cricket::SendDataResult result; | 228 cricket::SendDataResult result; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 EXPECT_EQ(header1.ssrc, 42U); | 286 EXPECT_EQ(header1.ssrc, 42U); |
| 287 EXPECT_EQ(header1.payload_type, 103); | 287 EXPECT_EQ(header1.payload_type, 103); |
| 288 EXPECT_EQ(static_cast<uint16_t>(header0.seq_num + 1), | 288 EXPECT_EQ(static_cast<uint16_t>(header0.seq_num + 1), |
| 289 static_cast<uint16_t>(header1.seq_num)); | 289 static_cast<uint16_t>(header1.seq_num)); |
| 290 EXPECT_EQ(header0.timestamp + 180000, header1.timestamp); | 290 EXPECT_EQ(header0.timestamp + 180000, header1.timestamp); |
| 291 } | 291 } |
| 292 | 292 |
| 293 TEST_F(RtpDataMediaChannelTest, SendDataMultipleClocks) { | 293 TEST_F(RtpDataMediaChannelTest, SendDataMultipleClocks) { |
| 294 // Timings owned by RtpDataEngines. | 294 // Timings owned by RtpDataEngines. |
| 295 FakeTiming* timing1 = new FakeTiming(); | 295 FakeTiming* timing1 = new FakeTiming(); |
| 296 rtc::scoped_ptr<cricket::RtpDataEngine> dme1(CreateEngine(timing1)); | 296 std::unique_ptr<cricket::RtpDataEngine> dme1(CreateEngine(timing1)); |
| 297 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc1( | 297 std::unique_ptr<cricket::RtpDataMediaChannel> dmc1( |
| 298 CreateChannel(dme1.get())); | 298 CreateChannel(dme1.get())); |
| 299 FakeTiming* timing2 = new FakeTiming(); | 299 FakeTiming* timing2 = new FakeTiming(); |
| 300 rtc::scoped_ptr<cricket::RtpDataEngine> dme2(CreateEngine(timing2)); | 300 std::unique_ptr<cricket::RtpDataEngine> dme2(CreateEngine(timing2)); |
| 301 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc2( | 301 std::unique_ptr<cricket::RtpDataMediaChannel> dmc2( |
| 302 CreateChannel(dme2.get())); | 302 CreateChannel(dme2.get())); |
| 303 | 303 |
| 304 ASSERT_TRUE(dmc1->SetSend(true)); | 304 ASSERT_TRUE(dmc1->SetSend(true)); |
| 305 ASSERT_TRUE(dmc2->SetSend(true)); | 305 ASSERT_TRUE(dmc2->SetSend(true)); |
| 306 | 306 |
| 307 cricket::StreamParams stream1; | 307 cricket::StreamParams stream1; |
| 308 stream1.add_ssrc(41); | 308 stream1.add_ssrc(41); |
| 309 ASSERT_TRUE(dmc1->AddSendStream(stream1)); | 309 ASSERT_TRUE(dmc1->AddSendStream(stream1)); |
| 310 cricket::StreamParams stream2; | 310 cricket::StreamParams stream2; |
| 311 stream2.add_ssrc(42); | 311 stream2.add_ssrc(42); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 | 347 |
| 348 EXPECT_EQ(static_cast<uint16_t>(header1a.seq_num + 1), | 348 EXPECT_EQ(static_cast<uint16_t>(header1a.seq_num + 1), |
| 349 static_cast<uint16_t>(header1b.seq_num)); | 349 static_cast<uint16_t>(header1b.seq_num)); |
| 350 EXPECT_EQ(header1a.timestamp + 90000, header1b.timestamp); | 350 EXPECT_EQ(header1a.timestamp + 90000, header1b.timestamp); |
| 351 EXPECT_EQ(static_cast<uint16_t>(header2a.seq_num + 1), | 351 EXPECT_EQ(static_cast<uint16_t>(header2a.seq_num + 1), |
| 352 static_cast<uint16_t>(header2b.seq_num)); | 352 static_cast<uint16_t>(header2b.seq_num)); |
| 353 EXPECT_EQ(header2a.timestamp + 180000, header2b.timestamp); | 353 EXPECT_EQ(header2a.timestamp + 180000, header2b.timestamp); |
| 354 } | 354 } |
| 355 | 355 |
| 356 TEST_F(RtpDataMediaChannelTest, SendDataRate) { | 356 TEST_F(RtpDataMediaChannelTest, SendDataRate) { |
| 357 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 357 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 358 | 358 |
| 359 ASSERT_TRUE(dmc->SetSend(true)); | 359 ASSERT_TRUE(dmc->SetSend(true)); |
| 360 | 360 |
| 361 cricket::DataCodec codec; | 361 cricket::DataCodec codec; |
| 362 codec.id = 103; | 362 codec.id = 103; |
| 363 codec.name = cricket::kGoogleRtpDataCodecName; | 363 codec.name = cricket::kGoogleRtpDataCodecName; |
| 364 cricket::DataSendParameters parameters; | 364 cricket::DataSendParameters parameters; |
| 365 parameters.codecs.push_back(codec); | 365 parameters.codecs.push_back(codec); |
| 366 ASSERT_TRUE(dmc->SetSendParameters(parameters)); | 366 ASSERT_TRUE(dmc->SetSendParameters(parameters)); |
| 367 | 367 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 | 405 |
| 406 TEST_F(RtpDataMediaChannelTest, ReceiveData) { | 406 TEST_F(RtpDataMediaChannelTest, ReceiveData) { |
| 407 // PT= 103, SN=2, TS=3, SSRC = 4, data = "abcde" | 407 // PT= 103, SN=2, TS=3, SSRC = 4, data = "abcde" |
| 408 unsigned char data[] = { | 408 unsigned char data[] = { |
| 409 0x80, 0x67, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, | 409 0x80, 0x67, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, |
| 410 0x00, 0x00, 0x00, 0x00, | 410 0x00, 0x00, 0x00, 0x00, |
| 411 'a', 'b', 'c', 'd', 'e' | 411 'a', 'b', 'c', 'd', 'e' |
| 412 }; | 412 }; |
| 413 rtc::Buffer packet(data, sizeof(data)); | 413 rtc::Buffer packet(data, sizeof(data)); |
| 414 | 414 |
| 415 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 415 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 416 | 416 |
| 417 // SetReceived not called. | 417 // SetReceived not called. |
| 418 dmc->OnPacketReceived(&packet, rtc::PacketTime()); | 418 dmc->OnPacketReceived(&packet, rtc::PacketTime()); |
| 419 EXPECT_FALSE(HasReceivedData()); | 419 EXPECT_FALSE(HasReceivedData()); |
| 420 | 420 |
| 421 dmc->SetReceive(true); | 421 dmc->SetReceive(true); |
| 422 | 422 |
| 423 // Unknown payload id | 423 // Unknown payload id |
| 424 dmc->OnPacketReceived(&packet, rtc::PacketTime()); | 424 dmc->OnPacketReceived(&packet, rtc::PacketTime()); |
| 425 EXPECT_FALSE(HasReceivedData()); | 425 EXPECT_FALSE(HasReceivedData()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 445 EXPECT_EQ("abcde", GetReceivedData()); | 445 EXPECT_EQ("abcde", GetReceivedData()); |
| 446 EXPECT_EQ(5U, GetReceivedDataLen()); | 446 EXPECT_EQ(5U, GetReceivedDataLen()); |
| 447 } | 447 } |
| 448 | 448 |
| 449 TEST_F(RtpDataMediaChannelTest, InvalidRtpPackets) { | 449 TEST_F(RtpDataMediaChannelTest, InvalidRtpPackets) { |
| 450 unsigned char data[] = { | 450 unsigned char data[] = { |
| 451 0x80, 0x65, 0x00, 0x02 | 451 0x80, 0x65, 0x00, 0x02 |
| 452 }; | 452 }; |
| 453 rtc::Buffer packet(data, sizeof(data)); | 453 rtc::Buffer packet(data, sizeof(data)); |
| 454 | 454 |
| 455 rtc::scoped_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); | 455 std::unique_ptr<cricket::RtpDataMediaChannel> dmc(CreateChannel()); |
| 456 | 456 |
| 457 // Too short | 457 // Too short |
| 458 dmc->OnPacketReceived(&packet, rtc::PacketTime()); | 458 dmc->OnPacketReceived(&packet, rtc::PacketTime()); |
| 459 EXPECT_FALSE(HasReceivedData()); | 459 EXPECT_FALSE(HasReceivedData()); |
| 460 } | 460 } |
| OLD | NEW |