From 1a72c0ccb99d5292a340667c428d1325ce9eae77 Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Tue, 28 Jan 2025 07:48:04 +0000 Subject: [PATCH] Move a test from media_session_unittest to codec_vendor_unittest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This test was only testing codec vendor functionality. Bug: webrtc:360058654 Change-Id: I5763e766a44f6bb1542c4281b1d6c177a52c8c74 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/375600 Commit-Queue: Harald Alvestrand Reviewed-by: Henrik Boström Cr-Commit-Position: refs/heads/main@{#43811} --- pc/BUILD.gn | 2 + pc/codec_vendor_unittest.cc | 105 +++++++++++++++++++++++++++++++++++ pc/media_session_unittest.cc | 70 ----------------------- 3 files changed, 107 insertions(+), 70 deletions(-) create mode 100644 pc/codec_vendor_unittest.cc diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 4afc0a2140..90bab05a12 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -2010,6 +2010,7 @@ if (rtc_include_tests && !build_with_chromium) { sources = [ "audio_rtp_receiver_unittest.cc", "channel_unittest.cc", + "codec_vendor_unittest.cc", "dtls_srtp_transport_integrationtest.cc", "dtls_srtp_transport_unittest.cc", "dtls_transport_unittest.cc", @@ -2036,6 +2037,7 @@ if (rtc_include_tests && !build_with_chromium) { deps = [ ":audio_rtp_receiver", ":channel", + ":codec_vendor", ":dtls_srtp_transport", ":dtls_transport", ":ice_transport", diff --git a/pc/codec_vendor_unittest.cc b/pc/codec_vendor_unittest.cc new file mode 100644 index 0000000000..943b314fa8 --- /dev/null +++ b/pc/codec_vendor_unittest.cc @@ -0,0 +1,105 @@ +/* + * Copyright 2004 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 "pc/codec_vendor.h" + +#include + +#include +#include + +#include "absl/strings/string_view.h" +#include "media/base/codec.h" +#include "media/base/codec_list.h" +#include "media/base/media_constants.h" +#include "media/base/test_utils.h" +#include "rtc_base/checks.h" +#include "test/gtest.h" + +namespace cricket { +namespace { + +Codec CreateRedAudioCodec(absl::string_view encoding_id) { + Codec red = CreateAudioCodec(63, "red", 48000, 2); + red.SetParam(kCodecParamNotInNameValueFormat, + std::string(encoding_id) + '/' + std::string(encoding_id)); + return red; +} + +const Codec kAudioCodecs1[] = {CreateAudioCodec(111, "opus", 48000, 2), + CreateRedAudioCodec("111"), + CreateAudioCodec(102, "iLBC", 8000, 1), + CreateAudioCodec(0, "PCMU", 8000, 1), + CreateAudioCodec(8, "PCMA", 8000, 1), + CreateAudioCodec(107, "CN", 48000, 1)}; + +const Codec kAudioCodecs2[] = { + CreateAudioCodec(126, "foo", 16000, 1), + CreateAudioCodec(0, "PCMU", 8000, 1), + CreateAudioCodec(127, "iLBC", 8000, 1), +}; + +const Codec kAudioCodecsAnswer[] = { + CreateAudioCodec(102, "iLBC", 8000, 1), + CreateAudioCodec(0, "PCMU", 8000, 1), +}; + +TEST(CodecVendorTest, TestSetAudioCodecs) { + CodecVendor codec_vendor(nullptr, false); + std::vector send_codecs = MAKE_VECTOR(kAudioCodecs1); + std::vector recv_codecs = MAKE_VECTOR(kAudioCodecs2); + + // The merged list of codecs should contain any send codecs that are also + // nominally in the receive codecs list. Payload types should be picked from + // the send codecs and a number-of-channels of 0 and 1 should be equivalent + // (set to 1). This equals what happens when the send codecs are used in an + // offer and the receive codecs are used in the following answer. + const std::vector sendrecv_codecs = MAKE_VECTOR(kAudioCodecsAnswer); + const std::vector no_codecs; + + RTC_CHECK_EQ(send_codecs[2].name, "iLBC") + << "Please don't change shared test data!"; + RTC_CHECK_EQ(recv_codecs[2].name, "iLBC") + << "Please don't change shared test data!"; + // Alter iLBC send codec to have zero channels, to test that that is handled + // properly. + send_codecs[2].channels = 0; + + // Alter iLBC receive codec to be lowercase, to test that case conversions + // are handled properly. + recv_codecs[2].name = "ilbc"; + + // Test proper merge + codec_vendor.set_audio_codecs(send_codecs, recv_codecs); + EXPECT_EQ(send_codecs, codec_vendor.audio_send_codecs().codecs()); + EXPECT_EQ(recv_codecs, codec_vendor.audio_recv_codecs().codecs()); + EXPECT_EQ(sendrecv_codecs, codec_vendor.audio_sendrecv_codecs().codecs()); + + // Test empty send codecs list + codec_vendor.set_audio_codecs(no_codecs, recv_codecs); + EXPECT_EQ(no_codecs, codec_vendor.audio_send_codecs().codecs()); + EXPECT_EQ(recv_codecs, codec_vendor.audio_recv_codecs().codecs()); + EXPECT_EQ(no_codecs, codec_vendor.audio_sendrecv_codecs().codecs()); + + // Test empty recv codecs list + codec_vendor.set_audio_codecs(send_codecs, no_codecs); + EXPECT_EQ(send_codecs, codec_vendor.audio_send_codecs().codecs()); + EXPECT_EQ(no_codecs, codec_vendor.audio_recv_codecs().codecs()); + EXPECT_EQ(no_codecs, codec_vendor.audio_sendrecv_codecs().codecs()); + + // Test all empty codec lists + codec_vendor.set_audio_codecs(no_codecs, no_codecs); + EXPECT_EQ(no_codecs, codec_vendor.audio_send_codecs().codecs()); + EXPECT_EQ(no_codecs, codec_vendor.audio_recv_codecs().codecs()); + EXPECT_EQ(no_codecs, codec_vendor.audio_sendrecv_codecs().codecs()); +} + +} // namespace +} // namespace cricket diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc index 7c8f012a91..44b53494b4 100644 --- a/pc/media_session_unittest.cc +++ b/pc/media_session_unittest.cc @@ -4652,76 +4652,6 @@ INSTANTIATE_TEST_SUITE_P(MediaProtocolDtlsPatternTest, MediaProtocolTest, ValuesIn(kMediaProtocolsDtls)); -TEST_F(MediaSessionDescriptionFactoryTest, TestSetAudioCodecs) { - webrtc::test::ScopedKeyValueConfig field_trials; - TransportDescriptionFactory tdf(field_trials); - tdf.set_certificate(rtc::RTCCertificate::Create( - std::unique_ptr(new rtc::FakeSSLIdentity("id")))); - - UniqueRandomIdGenerator ssrc_generator; - webrtc::FakePayloadTypeSuggester pt_suggester; - MediaSessionDescriptionFactory sf(nullptr, false, &ssrc_generator, &tdf, - &pt_suggester); - std::vector send_codecs = MAKE_VECTOR(kAudioCodecs1); - std::vector recv_codecs = MAKE_VECTOR(kAudioCodecs2); - - // The merged list of codecs should contain any send codecs that are also - // nominally in the receive codecs list. Payload types should be picked from - // the send codecs and a number-of-channels of 0 and 1 should be equivalent - // (set to 1). This equals what happens when the send codecs are used in an - // offer and the receive codecs are used in the following answer. - const std::vector sendrecv_codecs = MAKE_VECTOR(kAudioCodecsAnswer); - const std::vector no_codecs; - - RTC_CHECK_EQ(send_codecs[2].name, "iLBC") - << "Please don't change shared test data!"; - RTC_CHECK_EQ(recv_codecs[2].name, "iLBC") - << "Please don't change shared test data!"; - // Alter iLBC send codec to have zero channels, to test that that is handled - // properly. - send_codecs[2].channels = 0; - - // Alter iLBC receive codec to be lowercase, to test that case conversions - // are handled properly. - recv_codecs[2].name = "ilbc"; - - // Test proper merge - sf.CodecVendorForTesting()->set_audio_codecs(send_codecs, recv_codecs); - EXPECT_EQ(send_codecs, - sf.CodecVendorForTesting()->audio_send_codecs().codecs()); - EXPECT_EQ(recv_codecs, - sf.CodecVendorForTesting()->audio_recv_codecs().codecs()); - EXPECT_EQ(sendrecv_codecs, - sf.CodecVendorForTesting()->audio_sendrecv_codecs().codecs()); - - // Test empty send codecs list - sf.CodecVendorForTesting()->set_audio_codecs(no_codecs, recv_codecs); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_send_codecs().codecs()); - EXPECT_EQ(recv_codecs, - sf.CodecVendorForTesting()->audio_recv_codecs().codecs()); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_sendrecv_codecs().codecs()); - - // Test empty recv codecs list - sf.CodecVendorForTesting()->set_audio_codecs(send_codecs, no_codecs); - EXPECT_EQ(send_codecs, - sf.CodecVendorForTesting()->audio_send_codecs().codecs()); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_recv_codecs().codecs()); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_sendrecv_codecs().codecs()); - - // Test all empty codec lists - sf.CodecVendorForTesting()->set_audio_codecs(no_codecs, no_codecs); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_send_codecs().codecs()); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_recv_codecs().codecs()); - EXPECT_EQ(no_codecs, - sf.CodecVendorForTesting()->audio_sendrecv_codecs().codecs()); -} - // Compare the two vectors of codecs ignoring the payload type. bool CodecsMatch(const std::vector& codecs1, const std::vector& codecs2) {