From e15b9ff408239dec2b65c2e548611c3bf68a0a7b Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Wed, 25 Jan 2023 16:32:54 +0000 Subject: [PATCH] Add a basic unittest for webrtc::voe::ChannelReceive MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL adds an unittest that a ChannelReceive can be constructed and destroyed without crashing. It is a basis for further testing. Lack of unit test was discovered while pursuing bug mentioned below. Bug: webrtc:13931 Change-Id: Iddb110f2df25e3806c74a5d00bbfab6d6d8e267f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291338 Reviewed-by: Jakob Ivarsson‎ Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#39200} --- audio/BUILD.gn | 19 ++++++++++++ audio/channel_receive_unittest.cc | 50 +++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 audio/channel_receive_unittest.cc diff --git a/audio/BUILD.gn b/audio/BUILD.gn index 199061586b..183a99b1a1 100644 --- a/audio/BUILD.gn +++ b/audio/BUILD.gn @@ -160,6 +160,7 @@ if (rtc_include_tests) { deps = [ ":audio", ":audio_end_to_end_test", + ":channel_receive_unittest", "../api:libjingle_peerconnection_api", "../api:mock_audio_mixer", "../api:mock_frame_decryptor", @@ -181,6 +182,7 @@ if (rtc_include_tests) { "../call:rtp_sender", "../common_audio", "../logging:mocks", + "../modules/audio_device:audio_device_api", "../modules/audio_device:audio_device_impl", # For TestAudioDeviceModule "../modules/audio_device:mock_audio_device", "../modules/audio_mixer:audio_mixer_impl", @@ -197,6 +199,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_tests_utils", "../rtc_base:safe_compare", "../rtc_base:task_queue_for_test", + "../rtc_base:threading", "../rtc_base:timeutils", "../system_wrappers", "../test:audio_codec_mocks", @@ -214,6 +217,22 @@ if (rtc_include_tests) { ] } + rtc_library("channel_receive_unittest") { + testonly = true + sources = [ "channel_receive_unittest.cc" ] + deps = [ + ":audio", + "../api/crypto:frame_decryptor_interface", + "../api/task_queue:default_task_queue_factory", + "../modules/audio_device:audio_device_api", + "../modules/audio_device:mock_audio_device", + "../rtc_base:threading", + "../test:mock_transport", + "../test:test_support", + "../test/time_controller", + ] + } + if (rtc_enable_protobuf && !build_with_chromium) { rtc_test("low_bandwidth_audio_test") { testonly = true diff --git a/audio/channel_receive_unittest.cc b/audio/channel_receive_unittest.cc new file mode 100644 index 0000000000..3d9baebe89 --- /dev/null +++ b/audio/channel_receive_unittest.cc @@ -0,0 +1,50 @@ +/* + * Copyright 2023 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "audio/channel_receive.h" + +#include "api/crypto/frame_decryptor_interface.h" +#include "api/task_queue/default_task_queue_factory.h" +#include "modules/audio_device/include/audio_device.h" +#include "modules/audio_device/include/mock_audio_device.h" +#include "rtc_base/thread.h" +#include "test/gmock.h" +#include "test/gtest.h" +#include "test/mock_transport.h" +#include "test/time_controller/simulated_time_controller.h" + +namespace webrtc { +namespace voe { + +TEST(ChannelReceiveTest, CreateAndDestroy) { + GlobalSimulatedTimeController time_controller(Timestamp::Seconds(5555)); + uint32_t local_ssrc = 1111; + uint32_t remote_ssrc = 2222; + webrtc::CryptoOptions crypto_options; + rtc::scoped_refptr audio_device_module = + test::MockAudioDeviceModule::CreateNice(); + MockTransport transport; + auto channel = CreateChannelReceive( + time_controller.GetClock(), + /* neteq_factory= */ nullptr, audio_device_module.get(), &transport, + /* rtc_event_log= */ nullptr, local_ssrc, remote_ssrc, + /* jitter_buffer_max_packets= */ 0, + /* jitter_buffer_fast_playout= */ false, + /* jitter_buffer_min_delay_ms= */ 0, + /* enable_non_sender_rtt= */ false, + /* decoder_factory= */ nullptr, + /* codec_pair_id= */ absl::nullopt, + /* frame_decryptor_interface= */ nullptr, crypto_options, + /* frame_transformer= */ nullptr); + EXPECT_TRUE(!!channel); +} + +} // namespace voe +} // namespace webrtc