Add a basic unittest for webrtc::voe::ChannelReceive

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‎ <jakobi@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39200}
diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index 1990615..183a99b 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -160,6 +160,7 @@
     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 @@
       "../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 @@
       "../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 @@
     ]
   }
 
+  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 0000000..3d9baeb
--- /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<test::MockAudioDeviceModule> 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