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 |