| 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
|
|
|