diff --git a/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc b/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc index 0423f57cbf..57dc72d3a5 100644 --- a/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc +++ b/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc @@ -36,8 +36,10 @@ #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h" #include "modules/remote_bitrate_estimator/include/bwe_defines.h" #include "modules/rtp_rtcp/source/rtcp_packet/bye.h" // Arbitrary RTCP message. +#include "modules/rtp_rtcp/source/rtp_header_extensions.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "modules/rtp_rtcp/source/rtp_packet_to_send.h" +#include "rtc_base/arraysize.h" #include "rtc_base/ptr_util.h" #include "rtc_base/random.h" #include "rtc_base/safe_conversions.h" @@ -46,8 +48,29 @@ namespace webrtc { namespace { -const char* const arbitrary_uri = // Just a recognized URI. - "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"; +struct ExtensionInfo { + RTPExtensionType type; + const char* uri; +}; + +template +constexpr ExtensionInfo CreateExtensionInfo() { + return {Extension::kId, Extension::kUri}; +} + +constexpr ExtensionInfo kExtensions[] = { + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), + CreateExtensionInfo(), +}; } // namespace class RtcEventLogEncoderTest : public testing::TestWithParam { @@ -82,9 +105,15 @@ class RtcEventLogEncoderTest : public testing::TestWithParam { return prng_.Rand(std::numeric_limits::max()); } - int RandomRtpExtensionId() { - return static_cast( - prng_.Rand(RtpExtension::kMinId, RtpExtension::kMaxId)); + std::vector RandomRtpExtensions() { + RTC_DCHECK(arraysize(kExtensions) >= 2); + size_t id_1 = prng_.Rand(0u, arraysize(kExtensions) - 1); + size_t id_2 = prng_.Rand(0u, arraysize(kExtensions) - 2); + if (id_2 == id_1) + id_2 = arraysize(kExtensions) - 1; + return std::vector{ + RtpExtension(kExtensions[id_1].uri, kExtensions[id_1].type), + RtpExtension(kExtensions[id_2].uri, kExtensions[id_2].type)}; } int RandomBitrate() { return RandomInt(); } @@ -209,9 +238,11 @@ TEST_P(RtcEventLogEncoderTest, RtcEventAudioReceiveStreamConfig) { auto stream_config = rtc::MakeUnique(); stream_config->local_ssrc = RandomSsrc(); stream_config->remote_ssrc = RandomSsrc(); - // TODO(eladalon): !!! Validate this, here and elsewhere. - stream_config->rtp_extensions.push_back( - RtpExtension(arbitrary_uri, RandomRtpExtensionId())); + // TODO(eladalon): Verify that the extensions are used correctly when + // parsing RTP packets headers. Here and elsewhere. + std::vector extensions = RandomRtpExtensions(); + for (const auto& extension : extensions) + stream_config->rtp_extensions.push_back(extension); auto original_stream_config = *stream_config; @@ -232,8 +263,9 @@ TEST_P(RtcEventLogEncoderTest, RtcEventAudioReceiveStreamConfig) { TEST_P(RtcEventLogEncoderTest, RtcEventAudioSendStreamConfig) { auto stream_config = rtc::MakeUnique(); stream_config->local_ssrc = RandomSsrc(); - stream_config->rtp_extensions.push_back( - RtpExtension(arbitrary_uri, RandomRtpExtensionId())); + std::vector extensions = RandomRtpExtensions(); + for (const auto& extension : extensions) + stream_config->rtp_extensions.push_back(extension); auto original_stream_config = *stream_config; @@ -440,6 +472,8 @@ void RtcEventLogEncoderTest::TestRtcEventRtpPacket(PacketDirection direction) { packet->SetSsrc(RandomSsrc()); packet->SetSequenceNumber(static_cast(RandomInt())); packet->SetPayloadSize(prng_.Rand(0u, 1000u)); + // TODO(terelius): Add marker bit, capture timestamp, CSRCs, and header + // extensions. std::unique_ptr event; if (direction == PacketDirection::kIncomingPacket) { @@ -487,8 +521,9 @@ TEST_P(RtcEventLogEncoderTest, RtcEventVideoReceiveStreamConfig) { stream_config->remote_ssrc = RandomSsrc(); stream_config->rtcp_mode = RtcpMode::kCompound; stream_config->remb = prng_.Rand(); - stream_config->rtp_extensions.push_back( - RtpExtension(arbitrary_uri, RandomRtpExtensionId())); + std::vector extensions = RandomRtpExtensions(); + for (const auto& extension : extensions) + stream_config->rtp_extensions.push_back(extension); stream_config->codecs.emplace_back("CODEC", 122, 7); auto original_stream_config = *stream_config; @@ -510,8 +545,9 @@ TEST_P(RtcEventLogEncoderTest, RtcEventVideoReceiveStreamConfig) { TEST_P(RtcEventLogEncoderTest, RtcEventVideoSendStreamConfig) { auto stream_config = rtc::MakeUnique(); stream_config->local_ssrc = RandomSsrc(); - stream_config->rtp_extensions.push_back( - RtpExtension(arbitrary_uri, RandomRtpExtensionId())); + std::vector extensions = RandomRtpExtensions(); + for (const auto& extension : extensions) + stream_config->rtp_extensions.push_back(extension); stream_config->codecs.emplace_back("CODEC", 120, 3); auto original_stream_config = *stream_config; diff --git a/logging/rtc_event_log/rtc_event_log_unittest.cc b/logging/rtc_event_log/rtc_event_log_unittest.cc index ec553079c2..3d4abb3502 100644 --- a/logging/rtc_event_log/rtc_event_log_unittest.cc +++ b/logging/rtc_event_log/rtc_event_log_unittest.cc @@ -717,473 +717,4 @@ TEST(RtcEventLogTest, LogSessionAndReadBackAllCombinations) { } } -TEST(RtcEventLogTest, LogEventAndReadBack) { - Random prng(987654321); - - // Create one RTP and one RTCP packet containing random data. - size_t packet_size = prng.Rand(1000, 1100); - RtpPacketReceived rtp_packet = - GenerateIncomingRtpPacket(nullptr, 0, packet_size, &prng); - rtc::Buffer rtcp_packet = GenerateRtcpPacket(&prng); - - // 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(); - - // Add RTP, start logging, add RTCP and then stop logging - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - - log_dumper->Log(rtc::MakeUnique(rtp_packet)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - - log_dumper->StartLogging( - rtc::MakeUnique(temp_filename, 10000000)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - - log_dumper->Log(rtc::MakeUnique(rtcp_packet)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - - log_dumper->StopLogging(); - - // Read the generated file from disk. - ParsedRtcEventLog parsed_log; - ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); - - // Verify that what we read back from the event log is the same as - // what we wrote down. - EXPECT_EQ(4u, parsed_log.GetNumberOfEvents()); - - RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); - - RtcEventLogTestHelper::VerifyIncomingRtpEvent(parsed_log, 1, rtp_packet); - - RtcEventLogTestHelper::VerifyRtcpEvent( - parsed_log, 2, kOutgoingPacket, rtcp_packet.data(), rtcp_packet.size()); - - RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 3); - - // Clean up temporary file - can be pretty slow. - remove(temp_filename.c_str()); -} - -TEST(RtcEventLogTest, LogLossBasedBweUpdateAndReadBack) { - Random prng(1234); - - // Generate a random packet loss event. - int32_t bitrate = prng.Rand(0, 10000000); - uint8_t fraction_lost = prng.Rand(); - int32_t total_packets = prng.Rand(1, 1000); - - // 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(); - - // Start logging, add the packet loss event and then stop logging. - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - log_dumper->StartLogging( - rtc::MakeUnique(temp_filename, 10000000)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - bitrate, fraction_lost, total_packets)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->StopLogging(); - - // Read the generated file from disk. - ParsedRtcEventLog parsed_log; - ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); - - // Verify that what we read back from the event log is the same as - // what we wrote down. - EXPECT_EQ(3u, parsed_log.GetNumberOfEvents()); - RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); - RtcEventLogTestHelper::VerifyBweLossEvent(parsed_log, 1, bitrate, - fraction_lost, total_packets); - RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 2); - - // Clean up temporary file - can be pretty slow. - remove(temp_filename.c_str()); -} - -TEST(RtcEventLogTest, LogDelayBasedBweUpdateAndReadBack) { - Random prng(1234); - - // Generate 3 random packet delay event. - int32_t bitrate1 = prng.Rand(0, 10000000); - int32_t bitrate2 = prng.Rand(0, 10000000); - int32_t bitrate3 = prng.Rand(0, 10000000); - - // 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(); - - // Start logging, add the packet delay events and then stop logging. - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - log_dumper->StartLogging( - rtc::MakeUnique(temp_filename, 10000000)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - bitrate1, BandwidthUsage::kBwNormal)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - bitrate2, BandwidthUsage::kBwOverusing)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - bitrate3, BandwidthUsage::kBwUnderusing)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->StopLogging(); - - // Read the generated file from disk. - ParsedRtcEventLog parsed_log; - ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); - - // Verify that what we read back from the event log is the same as - // what we wrote down. - EXPECT_EQ(5u, parsed_log.GetNumberOfEvents()); - RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); - RtcEventLogTestHelper::VerifyBweDelayEvent(parsed_log, 1, bitrate1, - BandwidthUsage::kBwNormal); - RtcEventLogTestHelper::VerifyBweDelayEvent(parsed_log, 2, bitrate2, - BandwidthUsage::kBwOverusing); - RtcEventLogTestHelper::VerifyBweDelayEvent(parsed_log, 3, bitrate3, - BandwidthUsage::kBwUnderusing); - RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 4); - - // Clean up temporary file - can be pretty slow. - remove(temp_filename.c_str()); -} - -TEST(RtcEventLogTest, LogProbeClusterCreatedAndReadBack) { - Random prng(794613); - - int bitrate_bps0 = prng.Rand(0, 10000000); - int bitrate_bps1 = prng.Rand(0, 10000000); - int bitrate_bps2 = prng.Rand(0, 10000000); - int min_probes0 = prng.Rand(0, 100); - int min_probes1 = prng.Rand(0, 100); - int min_probes2 = prng.Rand(0, 100); - int min_bytes0 = prng.Rand(0, 10000); - int min_bytes1 = prng.Rand(0, 10000); - int min_bytes2 = prng.Rand(0, 10000); - - // 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(); - - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - - log_dumper->StartLogging( - rtc::MakeUnique(temp_filename, 10000000)); - log_dumper->Log(rtc::MakeUnique( - 0, bitrate_bps0, min_probes0, min_bytes0)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - 1, bitrate_bps1, min_probes1, min_bytes1)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - 2, bitrate_bps2, min_probes2, min_bytes2)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->StopLogging(); - - // Read the generated file from disk. - ParsedRtcEventLog parsed_log; - ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); - - // Verify that what we read back from the event log is the same as - // what we wrote down. - EXPECT_EQ(5u, parsed_log.GetNumberOfEvents()); - RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); - RtcEventLogTestHelper::VerifyBweProbeCluster(parsed_log, 1, 0, bitrate_bps0, - min_probes0, min_bytes0); - RtcEventLogTestHelper::VerifyBweProbeCluster(parsed_log, 2, 1, bitrate_bps1, - min_probes1, min_bytes1); - RtcEventLogTestHelper::VerifyBweProbeCluster(parsed_log, 3, 2, bitrate_bps2, - min_probes2, min_bytes2); - RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 4); - - // Clean up temporary file - can be pretty slow. - remove(temp_filename.c_str()); -} - -TEST(RtcEventLogTest, LogProbeResultSuccessAndReadBack) { - Random prng(192837); - - int bitrate_bps0 = prng.Rand(0, 10000000); - int bitrate_bps1 = prng.Rand(0, 10000000); - int bitrate_bps2 = prng.Rand(0, 10000000); - - // 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(); - - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - - log_dumper->StartLogging( - rtc::MakeUnique(temp_filename, 10000000)); - log_dumper->Log(rtc::MakeUnique(0, bitrate_bps0)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique(1, bitrate_bps1)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique(2, bitrate_bps2)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->StopLogging(); - - // Read the generated file from disk. - ParsedRtcEventLog parsed_log; - ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); - - // Verify that what we read back from the event log is the same as - // what we wrote down. - EXPECT_EQ(5u, parsed_log.GetNumberOfEvents()); - RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); - RtcEventLogTestHelper::VerifyProbeResultSuccess(parsed_log, 1, 0, - bitrate_bps0); - RtcEventLogTestHelper::VerifyProbeResultSuccess(parsed_log, 2, 1, - bitrate_bps1); - RtcEventLogTestHelper::VerifyProbeResultSuccess(parsed_log, 3, 2, - bitrate_bps2); - RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 4); - - // Clean up temporary file - can be pretty slow. - remove(temp_filename.c_str()); -} - -TEST(RtcEventLogTest, LogProbeResultFailureAndReadBack) { - Random prng(192837); - - // 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(); - - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - - log_dumper->StartLogging( - rtc::MakeUnique(temp_filename, 10000000)); - log_dumper->Log(rtc::MakeUnique( - 0, ProbeFailureReason::kInvalidSendReceiveInterval)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - 1, ProbeFailureReason::kInvalidSendReceiveRatio)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->Log(rtc::MakeUnique( - 2, ProbeFailureReason::kTimeout)); - fake_clock.AdvanceTimeMicros(prng.Rand(1, 1000)); - log_dumper->StopLogging(); - - // Read the generated file from disk. - ParsedRtcEventLog parsed_log; - ASSERT_TRUE(parsed_log.ParseFile(temp_filename)); - - // Verify that what we read back from the event log is the same as - // what we wrote down. - EXPECT_EQ(5u, parsed_log.GetNumberOfEvents()); - RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); - RtcEventLogTestHelper::VerifyProbeResultFailure( - parsed_log, 1, 0, ProbeFailureReason::kInvalidSendReceiveInterval); - RtcEventLogTestHelper::VerifyProbeResultFailure( - parsed_log, 2, 1, ProbeFailureReason::kInvalidSendReceiveRatio); - RtcEventLogTestHelper::VerifyProbeResultFailure(parsed_log, 3, 2, - ProbeFailureReason::kTimeout); - RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 4); - - // Clean up temporary file - can be pretty slow. - remove(temp_filename.c_str()); -} - -class ConfigReadWriteTest { - public: - ConfigReadWriteTest() : prng(987654321) {} - virtual ~ConfigReadWriteTest() {} - virtual void GenerateConfig(const RtpHeaderExtensionMap& extensions) = 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. - RtpHeaderExtensionMap extensions; - for (uint32_t i = 0; i < kNumExtensions; i++) { - extensions.Register(kExtensionTypes[i], kExtensionIds[i]); - } - GenerateConfig(extensions); - - // Log a single config event and stop logging. - rtc::ScopedFakeClock fake_clock; - fake_clock.SetTimeMicros(prng.Rand()); - std::unique_ptr log_dumper( - RtcEventLog::Create(RtcEventLog::EncodingType::Legacy)); - - log_dumper->StartLogging( - rtc::MakeUnique(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(const RtpHeaderExtensionMap& extensions) override { - GenerateAudioReceiveConfig(extensions, &config, &prng); - } - void LogConfig(RtcEventLog* event_log) override { - event_log->Log(rtc::MakeUnique( - rtc::MakeUnique(config))); - } - void VerifyConfig(const ParsedRtcEventLog& parsed_log, - size_t index) override { - RtcEventLogTestHelper::VerifyAudioReceiveStreamConfig(parsed_log, index, - config); - } - rtclog::StreamConfig config; -}; - -class AudioSendConfigReadWriteTest : public ConfigReadWriteTest { - public: - AudioSendConfigReadWriteTest() {} - void GenerateConfig(const RtpHeaderExtensionMap& extensions) override { - GenerateAudioSendConfig(extensions, &config, &prng); - } - void LogConfig(RtcEventLog* event_log) override { - event_log->Log(rtc::MakeUnique( - rtc::MakeUnique(config))); - } - void VerifyConfig(const ParsedRtcEventLog& parsed_log, - size_t index) override { - RtcEventLogTestHelper::VerifyAudioSendStreamConfig(parsed_log, index, - config); - } - rtclog::StreamConfig config; -}; - -class VideoReceiveConfigReadWriteTest : public ConfigReadWriteTest { - public: - VideoReceiveConfigReadWriteTest() {} - void GenerateConfig(const RtpHeaderExtensionMap& extensions) override { - GenerateVideoReceiveConfig(extensions, &config, &prng); - } - void LogConfig(RtcEventLog* event_log) override { - event_log->Log(rtc::MakeUnique( - rtc::MakeUnique(config))); - } - void VerifyConfig(const ParsedRtcEventLog& parsed_log, - size_t index) override { - RtcEventLogTestHelper::VerifyVideoReceiveStreamConfig(parsed_log, index, - config); - } - rtclog::StreamConfig config; -}; - -class VideoSendConfigReadWriteTest : public ConfigReadWriteTest { - public: - VideoSendConfigReadWriteTest() {} - void GenerateConfig(const RtpHeaderExtensionMap& extensions) override { - GenerateVideoSendConfig(extensions, &config, &prng); - } - void LogConfig(RtcEventLog* event_log) override { - event_log->Log(rtc::MakeUnique( - rtc::MakeUnique(config))); - } - void VerifyConfig(const ParsedRtcEventLog& parsed_log, - size_t index) override { - RtcEventLogTestHelper::VerifyVideoSendStreamConfig(parsed_log, index, - config); - } - rtclog::StreamConfig config; -}; - -class AudioNetworkAdaptationReadWriteTest : public ConfigReadWriteTest { - public: - void GenerateConfig(const RtpHeaderExtensionMap& extensions) override { - GenerateAudioNetworkAdaptation(extensions, &config, &prng); - } - void LogConfig(RtcEventLog* event_log) override { - event_log->Log(rtc::MakeUnique( - rtc::MakeUnique(config))); - } - void VerifyConfig(const ParsedRtcEventLog& parsed_log, - size_t index) override { - RtcEventLogTestHelper::VerifyAudioNetworkAdaptation(parsed_log, index, - config); - } - AudioEncoderRuntimeConfig 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(); -} - -TEST(RtcEventLogTest, LogAudioNetworkAdaptation) { - AudioNetworkAdaptationReadWriteTest test; - test.DoTest(); -} - } // namespace webrtc