blob: 394a2eae012ee2f8699530945b80adea33f7e5d5 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
ossu7bb87ee2017-01-23 04:56:25 -080011#include "webrtc/pc/localaudiosource.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000012
13#include <string>
14#include <vector>
15
Henrik Kjellander15583c12016-02-10 10:53:12 +010016#include "webrtc/api/test/fakeconstraints.h"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000017#include "webrtc/base/gunit.h"
kjellandera96e2d72016-02-04 23:52:28 -080018#include "webrtc/media/base/fakemediaengine.h"
19#include "webrtc/media/base/fakevideorenderer.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020
21using webrtc::LocalAudioSource;
22using webrtc::MediaConstraintsInterface;
23using webrtc::MediaSourceInterface;
wu@webrtc.org97077a32013-10-25 21:18:33 +000024using webrtc::PeerConnectionFactoryInterface;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000025
26TEST(LocalAudioSourceTest, SetValidOptions) {
27 webrtc::FakeConstraints constraints;
Tommi70c7fe12015-06-15 09:14:03 +020028 constraints.AddMandatory(
29 MediaConstraintsInterface::kGoogEchoCancellation, false);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000030 constraints.AddOptional(
Henrik Lundin441f6342015-06-09 16:03:13 +020031 MediaConstraintsInterface::kExtendedFilterEchoCancellation, true);
Bjorn Volcker1ba344a2015-04-29 07:28:10 +020032 constraints.AddOptional(MediaConstraintsInterface::kDAEchoCancellation, true);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000033 constraints.AddOptional(MediaConstraintsInterface::kAutoGainControl, true);
34 constraints.AddOptional(
35 MediaConstraintsInterface::kExperimentalAutoGainControl, true);
36 constraints.AddMandatory(MediaConstraintsInterface::kNoiseSuppression, false);
37 constraints.AddOptional(MediaConstraintsInterface::kHighpassFilter, true);
38
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000039 rtc::scoped_refptr<LocalAudioSource> source =
wu@webrtc.org97077a32013-10-25 21:18:33 +000040 LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(),
41 &constraints);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000042
Karl Wibergbe579832015-11-10 22:34:18 +010043 EXPECT_EQ(rtc::Optional<bool>(false), source->options().echo_cancellation);
44 EXPECT_EQ(rtc::Optional<bool>(true), source->options().extended_filter_aec);
45 EXPECT_EQ(rtc::Optional<bool>(true), source->options().delay_agnostic_aec);
46 EXPECT_EQ(rtc::Optional<bool>(true), source->options().auto_gain_control);
47 EXPECT_EQ(rtc::Optional<bool>(true), source->options().experimental_agc);
48 EXPECT_EQ(rtc::Optional<bool>(false), source->options().noise_suppression);
49 EXPECT_EQ(rtc::Optional<bool>(true), source->options().highpass_filter);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000050}
51
52TEST(LocalAudioSourceTest, OptionNotSet) {
53 webrtc::FakeConstraints constraints;
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000054 rtc::scoped_refptr<LocalAudioSource> source =
wu@webrtc.org97077a32013-10-25 21:18:33 +000055 LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(),
56 &constraints);
Karl Wibergbe579832015-11-10 22:34:18 +010057 EXPECT_EQ(rtc::Optional<bool>(), source->options().highpass_filter);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000058}
59
60TEST(LocalAudioSourceTest, MandatoryOverridesOptional) {
61 webrtc::FakeConstraints constraints;
Tommi70c7fe12015-06-15 09:14:03 +020062 constraints.AddMandatory(
63 MediaConstraintsInterface::kGoogEchoCancellation, false);
64 constraints.AddOptional(
65 MediaConstraintsInterface::kGoogEchoCancellation, true);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000066
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000067 rtc::scoped_refptr<LocalAudioSource> source =
wu@webrtc.org97077a32013-10-25 21:18:33 +000068 LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(),
69 &constraints);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000070
Karl Wibergbe579832015-11-10 22:34:18 +010071 EXPECT_EQ(rtc::Optional<bool>(false), source->options().echo_cancellation);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000072}
73
74TEST(LocalAudioSourceTest, InvalidOptional) {
75 webrtc::FakeConstraints constraints;
76 constraints.AddOptional(MediaConstraintsInterface::kHighpassFilter, false);
77 constraints.AddOptional("invalidKey", false);
78
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000079 rtc::scoped_refptr<LocalAudioSource> source =
wu@webrtc.org97077a32013-10-25 21:18:33 +000080 LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(),
81 &constraints);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000082
83 EXPECT_EQ(MediaSourceInterface::kLive, source->state());
Karl Wibergbe579832015-11-10 22:34:18 +010084 EXPECT_EQ(rtc::Optional<bool>(false), source->options().highpass_filter);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000085}
86
87TEST(LocalAudioSourceTest, InvalidMandatory) {
88 webrtc::FakeConstraints constraints;
89 constraints.AddMandatory(MediaConstraintsInterface::kHighpassFilter, false);
90 constraints.AddMandatory("invalidKey", false);
91
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000092 rtc::scoped_refptr<LocalAudioSource> source =
wu@webrtc.org97077a32013-10-25 21:18:33 +000093 LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(),
94 &constraints);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000095
xians@webrtc.org38d88812014-08-13 13:51:58 +000096 EXPECT_EQ(MediaSourceInterface::kLive, source->state());
Karl Wibergbe579832015-11-10 22:34:18 +010097 EXPECT_EQ(rtc::Optional<bool>(false), source->options().highpass_filter);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000098}
htaa2a49d92016-03-04 02:51:39 -080099
100TEST(LocalAudioSourceTest, InitWithAudioOptions) {
101 cricket::AudioOptions audio_options;
102 audio_options.highpass_filter = rtc::Optional<bool>(true);
103 rtc::scoped_refptr<LocalAudioSource> source = LocalAudioSource::Create(
104 PeerConnectionFactoryInterface::Options(), &audio_options);
105 EXPECT_EQ(rtc::Optional<bool>(true), source->options().highpass_filter);
106}
107
108TEST(LocalAudioSourceTest, InitWithNoOptions) {
109 rtc::scoped_refptr<LocalAudioSource> source =
110 LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(),
111 (cricket::AudioOptions*)nullptr);
112 EXPECT_EQ(rtc::Optional<bool>(), source->options().highpass_filter);
113}