| 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 * This file includes unit tests for the RTPPacketHistory. | 10 * This file includes unit tests for the RTPPacketHistory. |
| 11 */ | 11 */ |
| 12 | 12 |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 14 |
| 15 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 15 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
| 16 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_history.h" | 16 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_history.h" |
| 17 #include "webrtc/system_wrappers/include/clock.h" | 17 #include "webrtc/system_wrappers/include/clock.h" |
| 18 #include "webrtc/video_engine/vie_defines.h" | |
| 19 #include "webrtc/typedefs.h" | 18 #include "webrtc/typedefs.h" |
| 20 | 19 |
| 21 namespace webrtc { | 20 namespace webrtc { |
| 22 | 21 |
| 23 class RtpPacketHistoryTest : public ::testing::Test { | 22 class RtpPacketHistoryTest : public ::testing::Test { |
| 24 protected: | 23 protected: |
| 25 RtpPacketHistoryTest() | 24 RtpPacketHistoryTest() |
| 26 : fake_clock_(123456), | 25 : fake_clock_(123456), |
| 27 hist_(new RTPPacketHistory(&fake_clock_)) { | 26 hist_(new RTPPacketHistory(&fake_clock_)) { |
| 28 } | 27 } |
| 29 ~RtpPacketHistoryTest() { | 28 ~RtpPacketHistoryTest() { |
| 30 delete hist_; | 29 delete hist_; |
| 31 } | 30 } |
| 32 | 31 |
| 33 SimulatedClock fake_clock_; | 32 SimulatedClock fake_clock_; |
| 34 RTPPacketHistory* hist_; | 33 RTPPacketHistory* hist_; |
| 35 enum {kPayload = 127}; | 34 enum {kPayload = 127}; |
| 36 enum {kSsrc = 12345678}; | 35 enum {kSsrc = 12345678}; |
| 37 enum {kSeqNum = 88}; | 36 enum {kSeqNum = 88}; |
| 38 enum {kTimestamp = 127}; | 37 enum {kTimestamp = 127}; |
| 39 enum {kMaxPacketLength = 1500}; | 38 enum {kMaxPacketLength = 1500}; |
| 40 uint8_t packet_[kMaxPacketLength]; | 39 uint8_t packet_[kMaxPacketLength]; |
| 41 uint8_t packet_out_[kMaxPacketLength]; | 40 uint8_t packet_out_[kMaxPacketLength]; |
| 42 | 41 |
| 43 void CreateRtpPacket(uint16_t seq_num, uint32_t ssrc, uint8_t payload, | 42 void CreateRtpPacket(uint16_t seq_num, uint32_t ssrc, uint8_t payload, |
| 44 uint32_t timestamp, uint8_t* array, size_t* cur_pos) { | 43 uint32_t timestamp, uint8_t* array, size_t* cur_pos) { |
| 45 array[(*cur_pos)++] = 0x80; | 44 array[(*cur_pos)++] = 0x80; |
| 46 array[(*cur_pos)++] = payload; | 45 array[(*cur_pos)++] = payload; |
| 47 array[(*cur_pos)++] = seq_num >> 8; | 46 array[(*cur_pos)++] = seq_num >> 8; |
| 48 array[(*cur_pos)++] = seq_num; | 47 array[(*cur_pos)++] = seq_num; |
| 49 array[(*cur_pos)++] = timestamp >> 24; | 48 array[(*cur_pos)++] = timestamp >> 24; |
| 50 array[(*cur_pos)++] = timestamp >> 16; | 49 array[(*cur_pos)++] = timestamp >> 16; |
| 51 array[(*cur_pos)++] = timestamp >> 8; | 50 array[(*cur_pos)++] = timestamp >> 8; |
| 52 array[(*cur_pos)++] = timestamp; | 51 array[(*cur_pos)++] = timestamp; |
| 53 array[(*cur_pos)++] = ssrc >> 24; | 52 array[(*cur_pos)++] = ssrc >> 24; |
| 54 array[(*cur_pos)++] = ssrc >> 16; | 53 array[(*cur_pos)++] = ssrc >> 16; |
| 55 array[(*cur_pos)++] = ssrc >> 8; | 54 array[(*cur_pos)++] = ssrc >> 8; |
| 56 array[(*cur_pos)++] = ssrc; | 55 array[(*cur_pos)++] = ssrc; |
| 57 } | 56 } |
| 58 }; | 57 }; |
| 59 | 58 |
| 60 TEST_F(RtpPacketHistoryTest, SetStoreStatus) { | 59 TEST_F(RtpPacketHistoryTest, SetStoreStatus) { |
| 61 EXPECT_FALSE(hist_->StorePackets()); | 60 EXPECT_FALSE(hist_->StorePackets()); |
| 62 hist_->SetStorePacketsStatus(true, 10); | 61 hist_->SetStorePacketsStatus(true, 10); |
| 63 EXPECT_TRUE(hist_->StorePackets()); | 62 EXPECT_TRUE(hist_->StorePackets()); |
| 64 hist_->SetStorePacketsStatus(false, 0); | 63 hist_->SetStorePacketsStatus(false, 0); |
| 65 EXPECT_FALSE(hist_->StorePackets()); | 64 EXPECT_FALSE(hist_->StorePackets()); |
| 66 } | 65 } |
| 67 | 66 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 260 |
| 262 // Retransmit last 16 packets. | 261 // Retransmit last 16 packets. |
| 263 for (int i = 4; i < 20; ++i) { | 262 for (int i = 4; i < 20; ++i) { |
| 264 len = kMaxPacketLength; | 263 len = kMaxPacketLength; |
| 265 EXPECT_TRUE(hist_->GetPacketAndSetSendTime(kSeqNum + i, 100, false, packet_, | 264 EXPECT_TRUE(hist_->GetPacketAndSetSendTime(kSeqNum + i, 100, false, packet_, |
| 266 &len, &time)); | 265 &len, &time)); |
| 267 } | 266 } |
| 268 } | 267 } |
| 269 | 268 |
| 270 TEST_F(RtpPacketHistoryTest, FullExpansion) { | 269 TEST_F(RtpPacketHistoryTest, FullExpansion) { |
| 270 static const int kSendSidePacketHistorySize = 600; |
| 271 hist_->SetStorePacketsStatus(true, kSendSidePacketHistorySize); | 271 hist_->SetStorePacketsStatus(true, kSendSidePacketHistorySize); |
| 272 size_t len; | 272 size_t len; |
| 273 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 273 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 274 int64_t time; | 274 int64_t time; |
| 275 for (size_t i = 0; i < kMaxHistoryCapacity + 1; ++i) { | 275 for (size_t i = 0; i < kMaxHistoryCapacity + 1; ++i) { |
| 276 len = 0; | 276 len = 0; |
| 277 CreateRtpPacket(kSeqNum + i, kSsrc, kPayload, kTimestamp, packet_, &len); | 277 CreateRtpPacket(kSeqNum + i, kSsrc, kPayload, kTimestamp, packet_, &len); |
| 278 EXPECT_EQ(0, hist_->PutRTPPacket(packet_, len, capture_time_ms, | 278 EXPECT_EQ(0, hist_->PutRTPPacket(packet_, len, capture_time_ms, |
| 279 kAllowRetransmission)); | 279 kAllowRetransmission)); |
| 280 } | 280 } |
| 281 | 281 |
| 282 fake_clock_.AdvanceTimeMilliseconds(100); | 282 fake_clock_.AdvanceTimeMilliseconds(100); |
| 283 | 283 |
| 284 // Retransmit all packets currently in buffer. | 284 // Retransmit all packets currently in buffer. |
| 285 for (size_t i = 1; i < kMaxHistoryCapacity + 1; ++i) { | 285 for (size_t i = 1; i < kMaxHistoryCapacity + 1; ++i) { |
| 286 len = kMaxPacketLength; | 286 len = kMaxPacketLength; |
| 287 EXPECT_TRUE(hist_->GetPacketAndSetSendTime(kSeqNum + i, 100, false, packet_, | 287 EXPECT_TRUE(hist_->GetPacketAndSetSendTime(kSeqNum + i, 100, false, packet_, |
| 288 &len, &time)); | 288 &len, &time)); |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 | 291 |
| 292 } // namespace webrtc | 292 } // namespace webrtc |
| OLD | NEW |