Chromium Code Reviews| Index: webrtc/video/rtc_event_log_unittest.cc |
| diff --git a/webrtc/video/rtc_event_log_unittest.cc b/webrtc/video/rtc_event_log_unittest.cc |
| index 0c18e750cc79cbd5938890211b8b64d43ee45135..5109b9f41bf82398040d76d4db299c8543d73aa1 100644 |
| --- a/webrtc/video/rtc_event_log_unittest.cc |
| +++ b/webrtc/video/rtc_event_log_unittest.cc |
| @@ -17,6 +17,7 @@ |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "webrtc/base/checks.h" |
| #include "webrtc/base/scoped_ptr.h" |
| +#include "webrtc/base/thread.h" |
| #include "webrtc/call.h" |
| #include "webrtc/system_wrappers/interface/clock.h" |
| #include "webrtc/test/test_suite.h" |
| @@ -424,6 +425,93 @@ TEST(RtcEventLogTest, LogSessionAndReadBack) { |
| LogSessionAndReadBack(9, 2718281828u); |
| } |
| +void DropOldEvents(unsigned random_seed) { |
| + std::vector<uint8_t> old_rtp_packet; |
| + std::vector<uint8_t> recent_rtp_packet; |
| + std::vector<uint8_t> old_rtcp_packet; |
| + std::vector<uint8_t> recent_rtcp_packet; |
| + |
| + VideoReceiveStream::Config receiver_config; |
| + VideoSendStream::Config sender_config; |
| + |
| + srand(random_seed); |
| + |
| + // Create two RTP packets containing random data. |
| + const size_t rtp_header_size = 20; |
| + size_t packet_size = 1000 + rand() % 64; |
| + old_rtp_packet.reserve(packet_size); |
| + for (size_t j = 0; j < packet_size; j++) { |
| + old_rtp_packet.push_back(rand()); |
| + } |
| + packet_size = 1000 + rand() % 64; |
| + recent_rtp_packet.reserve(packet_size); |
| + for (size_t j = 0; j < packet_size; j++) { |
| + recent_rtp_packet.push_back(rand()); |
| + } |
| + // Create two RTCP packets containing random data. |
| + packet_size = 1000 + rand() % 64; |
| + old_rtcp_packet.reserve(packet_size); |
| + for (size_t j = 0; j < packet_size; j++) { |
| + old_rtcp_packet.push_back(rand()); |
| + } |
| + packet_size = 1000 + rand() % 64; |
| + recent_rtcp_packet.reserve(packet_size); |
| + for (size_t j = 0; j < packet_size; j++) { |
| + recent_rtcp_packet.push_back(rand()); |
| + } |
| + // Create configurations for the video streams. |
| + GenerateVideoReceiveConfig(&receiver_config); |
| + GenerateVideoSendConfig(&sender_config); |
| + |
| + // Find the name of the current test, in order to use it as a temporary |
| + // filename. |
| + auto test_info = ::testing::UnitTest::GetInstance()->current_test_info(); |
| + const std::string temp_filename = |
| + test::OutputPath() + test_info->test_case_name() + test_info->name(); |
| + |
| + // The log file will be flushed to disk when the log_dumper goes out of scope. |
| + { |
| + rtc::scoped_ptr<RtcEventLog> log_dumper(RtcEventLog::Create()); |
| + log_dumper->SetBufferDuration(50000); |
| + log_dumper->LogVideoReceiveStreamConfig(receiver_config); |
| + log_dumper->LogVideoSendStreamConfig(sender_config); |
| + log_dumper->LogRtpHeader(false, MediaType::AUDIO, old_rtp_packet.data(), |
| + rtp_header_size, old_rtp_packet.size()); |
| + log_dumper->LogRtcpPacket(true, MediaType::AUDIO, old_rtcp_packet.data(), |
| + old_rtcp_packet.size()); |
| + rtc::Thread::SleepMs(50); |
|
ivoc
2015/08/25 08:03:21
I wonder if the sleep should be a little bit longe
terelius
2015/08/25 16:41:44
On POSIX systems it uses nanosleep() which should
|
| + log_dumper->StartLogging(temp_filename, 10000000); |
| + log_dumper->LogRtpHeader(true, MediaType::VIDEO, recent_rtp_packet.data(), |
| + rtp_header_size, recent_rtp_packet.size()); |
| + log_dumper->LogRtcpPacket(false, MediaType::VIDEO, |
| + recent_rtcp_packet.data(), |
| + recent_rtcp_packet.size()); |
| + } |
| + |
| + // Read the generated file from disk. |
| + rtclog::EventStream parsed_stream; |
| + ASSERT_TRUE(RtcEventLog::ParseRtcEventLog(temp_filename, &parsed_stream)); |
| + |
| + // Verify the result. |
| + EXPECT_EQ(5, parsed_stream.stream_size()); |
| + VerifyReceiveStreamConfig(parsed_stream.stream(0), receiver_config); |
| + VerifySendStreamConfig(parsed_stream.stream(1), sender_config); |
| + VerifyLogStartEvent(parsed_stream.stream(2)); |
| + VerifyRtpEvent(parsed_stream.stream(3), true, MediaType::VIDEO, |
| + recent_rtp_packet.data(), rtp_header_size, |
| + recent_rtp_packet.size()); |
| + VerifyRtcpEvent(parsed_stream.stream(4), false, MediaType::VIDEO, |
| + recent_rtcp_packet.data(), recent_rtcp_packet.size()); |
| + |
| + // Clean up temporary file - can be pretty slow. |
| + remove(temp_filename.c_str()); |
| +} |
| + |
| +TEST(RtcEventLogTest, DropOldEvents) { |
| + DropOldEvents(141421356); |
| + DropOldEvents(173205080); |
| +} |
| + |
| } // namespace webrtc |
| #endif // ENABLE_RTC_EVENT_LOG |