Index: webrtc/logging/rtc_event_log/rtc_event_log_unittest.cc |
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log_unittest.cc b/webrtc/logging/rtc_event_log/rtc_event_log_unittest.cc |
index d6af3e9a12789027e9339e25857dfc390dc8278c..5ca885cd54e855e0e3985bb963fe3b8e8e4d262e 100644 |
--- a/webrtc/logging/rtc_event_log/rtc_event_log_unittest.cc |
+++ b/webrtc/logging/rtc_event_log/rtc_event_log_unittest.cc |
@@ -200,6 +200,35 @@ void GenerateVideoSendConfig(uint32_t extensions_bitvector, |
} |
} |
+void GenerateAudioReceiveConfig(uint32_t extensions_bitvector, |
+ AudioReceiveStream::Config* config, |
+ Random* prng) { |
+ // Add SSRCs for the stream. |
+ config->rtp.remote_ssrc = prng->Rand<uint32_t>(); |
+ config->rtp.local_ssrc = prng->Rand<uint32_t>(); |
+ // Add header extensions. |
+ for (unsigned i = 0; i < kNumExtensions; i++) { |
+ if (extensions_bitvector & (1u << i)) { |
+ config->rtp.extensions.push_back( |
+ RtpExtension(kExtensionNames[i], prng->Rand<int>())); |
+ } |
+ } |
+} |
+ |
+void GenerateAudioSendConfig(uint32_t extensions_bitvector, |
+ AudioSendStream::Config* config, |
+ Random* prng) { |
+ // Add SSRC to the stream. |
+ config->rtp.ssrc = prng->Rand<uint32_t>(); |
+ // Add header extensions. |
+ for (unsigned i = 0; i < kNumExtensions; i++) { |
+ if (extensions_bitvector & (1u << i)) { |
+ config->rtp.extensions.push_back( |
+ RtpExtension(kExtensionNames[i], prng->Rand<int>())); |
+ } |
+ } |
+} |
+ |
// Test for the RtcEventLog class. Dumps some RTP packets and other events |
// to disk, then reads them back to see if they match. |
void LogSessionAndReadBack(size_t rtp_count, |
@@ -324,9 +353,10 @@ void LogSessionAndReadBack(size_t rtp_count, |
PrintExpectedEvents(rtp_count, rtcp_count, playout_count, bwe_loss_count); |
} |
RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); |
- RtcEventLogTestHelper::VerifyReceiveStreamConfig(parsed_log, 1, |
- receiver_config); |
- RtcEventLogTestHelper::VerifySendStreamConfig(parsed_log, 2, sender_config); |
+ RtcEventLogTestHelper::VerifyVideoReceiveStreamConfig(parsed_log, 1, |
+ receiver_config); |
+ RtcEventLogTestHelper::VerifyVideoSendStreamConfig(parsed_log, 2, |
+ sender_config); |
size_t event_index = config_count + 1; |
size_t rtcp_index = 1; |
size_t playout_index = 1; |
@@ -457,4 +487,138 @@ TEST(RtcEventLogTest, LogEventAndReadBack) { |
remove(temp_filename.c_str()); |
} |
+class ConfigReadWriteTest { |
+ public: |
+ ConfigReadWriteTest() : prng(987654321) {} |
+ virtual ~ConfigReadWriteTest() {} |
+ virtual void GenerateConfig(uint32_t extensions_bitvector) = 0; |
+ virtual void VerifyConfig(const ParsedRtcEventLog& parsed_log, |
+ size_t index) = 0; |
+ virtual void LogConfig(RtcEventLog* event_log) = 0; |
+ |
+ void DoTest() { |
+ // 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(); |
+ |
+ // Use all extensions. |
+ uint32_t extensions_bitvector = (1u << kNumExtensions) - 1; |
+ GenerateConfig(extensions_bitvector); |
+ |
+ // Log a single config event and stop logging. |
+ SimulatedClock fake_clock(prng.Rand<uint32_t>()); |
+ std::unique_ptr<RtcEventLog> log_dumper(RtcEventLog::Create(&fake_clock)); |
+ |
+ log_dumper->StartLogging(temp_filename, 10000000); |
+ LogConfig(log_dumper.get()); |
+ log_dumper->StopLogging(); |
+ |
+ // Read the generated file from disk. |
+ ParsedRtcEventLog parsed_log; |
+ ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); |
+ |
+ // Check the generated number of events. |
+ EXPECT_EQ(3u, parsed_log.GetNumberOfEvents()); |
+ |
+ RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); |
+ |
+ // Verify that the parsed config struct matches the one that was logged. |
+ VerifyConfig(parsed_log, 1); |
+ |
+ RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 2); |
+ |
+ // Clean up temporary file - can be pretty slow. |
+ remove(temp_filename.c_str()); |
+ } |
+ Random prng; |
+}; |
+ |
+class AudioReceiveConfigReadWriteTest : public ConfigReadWriteTest { |
+ public: |
+ void GenerateConfig(uint32_t extensions_bitvector) override { |
+ GenerateAudioReceiveConfig(extensions_bitvector, &config, &prng); |
+ } |
+ void LogConfig(RtcEventLog* event_log) override { |
+ event_log->LogAudioReceiveStreamConfig(config); |
+ } |
+ void VerifyConfig(const ParsedRtcEventLog& parsed_log, |
+ size_t index) override { |
+ RtcEventLogTestHelper::VerifyAudioReceiveStreamConfig(parsed_log, index, |
+ config); |
+ } |
+ AudioReceiveStream::Config config; |
+}; |
+ |
+class AudioSendConfigReadWriteTest : public ConfigReadWriteTest { |
+ public: |
+ AudioSendConfigReadWriteTest() : config(nullptr) {} |
+ void GenerateConfig(uint32_t extensions_bitvector) override { |
+ GenerateAudioSendConfig(extensions_bitvector, &config, &prng); |
+ } |
+ void LogConfig(RtcEventLog* event_log) override { |
+ event_log->LogAudioSendStreamConfig(config); |
+ } |
+ void VerifyConfig(const ParsedRtcEventLog& parsed_log, |
+ size_t index) override { |
+ RtcEventLogTestHelper::VerifyAudioSendStreamConfig(parsed_log, index, |
+ config); |
+ } |
+ AudioSendStream::Config config; |
+}; |
+ |
+class VideoReceiveConfigReadWriteTest : public ConfigReadWriteTest { |
+ public: |
+ VideoReceiveConfigReadWriteTest() : config(nullptr) {} |
+ void GenerateConfig(uint32_t extensions_bitvector) override { |
+ GenerateVideoReceiveConfig(extensions_bitvector, &config, &prng); |
+ } |
+ void LogConfig(RtcEventLog* event_log) override { |
+ event_log->LogVideoReceiveStreamConfig(config); |
+ } |
+ void VerifyConfig(const ParsedRtcEventLog& parsed_log, |
+ size_t index) override { |
+ RtcEventLogTestHelper::VerifyVideoReceiveStreamConfig(parsed_log, index, |
+ config); |
+ } |
+ VideoReceiveStream::Config config; |
+}; |
+ |
+class VideoSendConfigReadWriteTest : public ConfigReadWriteTest { |
+ public: |
+ VideoSendConfigReadWriteTest() : config(nullptr) {} |
+ void GenerateConfig(uint32_t extensions_bitvector) override { |
+ GenerateVideoSendConfig(extensions_bitvector, &config, &prng); |
+ } |
+ void LogConfig(RtcEventLog* event_log) override { |
+ event_log->LogVideoSendStreamConfig(config); |
+ } |
+ void VerifyConfig(const ParsedRtcEventLog& parsed_log, |
+ size_t index) override { |
+ RtcEventLogTestHelper::VerifyVideoSendStreamConfig(parsed_log, index, |
+ config); |
+ } |
+ VideoSendStream::Config config; |
+}; |
+ |
+TEST(RtcEventLogTest, LogAudioReceiveConfig) { |
+ AudioReceiveConfigReadWriteTest test; |
+ test.DoTest(); |
+} |
+ |
+TEST(RtcEventLogTest, LogAudioSendConfig) { |
+ AudioSendConfigReadWriteTest test; |
+ test.DoTest(); |
+} |
+ |
+TEST(RtcEventLogTest, LogVideoReceiveConfig) { |
+ VideoReceiveConfigReadWriteTest test; |
+ test.DoTest(); |
+} |
+ |
+TEST(RtcEventLogTest, LogVideoSendConfig) { |
+ VideoSendConfigReadWriteTest test; |
+ test.DoTest(); |
+} |
} // namespace webrtc |