blob: 7ed1f01dfb2398c9c80424852a129127649892f7 [file] [log] [blame]
Shunkai Yao67b1be62022-07-13 05:01:42 +00001/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000017#define LOG_TAG "VtsHalAudioEffectTargetTest"
18
Shunkai Yao45905172022-08-24 18:14:02 +000019#include <memory>
Shunkai Yao67b1be62022-07-13 05:01:42 +000020#include <string>
Shunkai Yao45905172022-08-24 18:14:02 +000021#include <unordered_map>
22#include <unordered_set>
23#include <vector>
Shunkai Yao67b1be62022-07-13 05:01:42 +000024
Shunkai Yao67b1be62022-07-13 05:01:42 +000025#include <aidl/Gtest.h>
26#include <aidl/Vintf.h>
27#include <android-base/logging.h>
28#include <android-base/properties.h>
29#include <android/binder_interface_utils.h>
30#include <android/binder_manager.h>
31#include <android/binder_process.h>
32
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000033#include <Utils.h>
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000034#include <aidl/android/hardware/audio/effect/IEffect.h>
Shunkai Yao67b1be62022-07-13 05:01:42 +000035#include <aidl/android/hardware/audio/effect/IFactory.h>
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000036#include <aidl/android/media/audio/common/AudioDeviceType.h>
Shunkai Yao67b1be62022-07-13 05:01:42 +000037
38#include "AudioHalBinderServiceUtil.h"
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000039#include "EffectHelper.h"
Shunkai Yao121c6dd2022-09-21 23:42:08 +000040#include "TestUtils.h"
Shunkai Yao67b1be62022-07-13 05:01:42 +000041
42using namespace android;
43
44using ndk::ScopedAStatus;
45
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000046using aidl::android::hardware::audio::effect::CommandId;
Shunkai Yao67b1be62022-07-13 05:01:42 +000047using aidl::android::hardware::audio::effect::Descriptor;
Shunkai Yao45905172022-08-24 18:14:02 +000048using aidl::android::hardware::audio::effect::IEffect;
Shunkai Yao67b1be62022-07-13 05:01:42 +000049using aidl::android::hardware::audio::effect::IFactory;
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000050using aidl::android::hardware::audio::effect::Parameter;
51using aidl::android::hardware::audio::effect::State;
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000052using aidl::android::media::audio::common::AudioDeviceType;
Shunkai Yao67b1be62022-07-13 05:01:42 +000053
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000054class AudioEffectTest : public testing::TestWithParam<std::string>, public EffectHelper {
Shunkai Yao45905172022-08-24 18:14:02 +000055 public:
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000056 AudioEffectTest() : EffectHelper(GetParam()) {}
57
Shunkai Yao45905172022-08-24 18:14:02 +000058 void SetUp() override {
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000059 CreateEffects();
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000060 initParamCommonFormat();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000061 initParamCommon();
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000062 // initParamSpecific();
Shunkai Yao45905172022-08-24 18:14:02 +000063 }
64
65 void TearDown() override {
66 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000067 DestroyEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000068 }
Shunkai Yao45905172022-08-24 18:14:02 +000069};
70
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000071TEST_P(AudioEffectTest, OpenEffectTest) {
72 OpenEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000073}
74
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000075TEST_P(AudioEffectTest, OpenAndCloseEffect) {
76 OpenEffects();
77 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000078}
79
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000080TEST_P(AudioEffectTest, CloseUnopenedEffectTest) {
81 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000082}
83
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000084TEST_P(AudioEffectTest, DoubleOpenCloseEffects) {
85 OpenEffects();
86 CloseEffects();
87 OpenEffects();
88 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000089
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000090 OpenEffects();
91 OpenEffects();
92 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000093
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000094 OpenEffects();
95 CloseEffects();
96 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000097}
98
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000099TEST_P(AudioEffectTest, GetDescriptors) {
100 GetEffectDescriptors();
Shunkai Yao45905172022-08-24 18:14:02 +0000101}
102
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000103TEST_P(AudioEffectTest, DescriptorIdExistAndUnique) {
Shunkai Yao45905172022-08-24 18:14:02 +0000104 auto checker = [&](const std::shared_ptr<IEffect>& effect) {
105 Descriptor desc;
106 std::vector<Descriptor::Identity> idList;
Shunkai Yao121c6dd2022-09-21 23:42:08 +0000107 EXPECT_IS_OK(effect->getDescriptor(&desc));
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000108 QueryEffects(desc.common.id.type, desc.common.id.uuid, &idList);
Shunkai Yao121c6dd2022-09-21 23:42:08 +0000109 EXPECT_EQ(idList.size(), 1UL);
Shunkai Yao45905172022-08-24 18:14:02 +0000110 };
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000111 ForEachEffect(checker);
Shunkai Yao45905172022-08-24 18:14:02 +0000112
113 // Check unique with a set
114 auto stringHash = [](const Descriptor::Identity& id) {
115 return std::hash<std::string>()(id.toString());
116 };
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000117 auto vec = GetCompleteEffectIdList();
Shunkai Yao45905172022-08-24 18:14:02 +0000118 std::unordered_set<Descriptor::Identity, decltype(stringHash)> idSet(0, stringHash);
119 for (auto it : vec) {
Shunkai Yao121c6dd2022-09-21 23:42:08 +0000120 EXPECT_EQ(idSet.count(it), 0UL);
Shunkai Yao45905172022-08-24 18:14:02 +0000121 idSet.insert(it);
122 }
123}
124
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000125/// State testing.
126// An effect instance is in INIT state by default after it was created.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000127TEST_P(AudioEffectTest, InitStateAfterCreation) {
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000128 ExpectState(State::INIT);
129}
130
131// An effect instance transfer to INIT state after it was open successfully with IEffect.open().
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000132TEST_P(AudioEffectTest, IdleStateAfterOpen) {
133 OpenEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000134 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000135 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000136}
137
138// An effect instance is in PROCESSING state after it receive an START command.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000139TEST_P(AudioEffectTest, ProcessingStateAfterStart) {
140 OpenEffects();
141 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000142 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000143 CommandEffects(CommandId::STOP);
144 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000145}
146
147// An effect instance transfer to IDLE state after Command.Id.STOP in PROCESSING state.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000148TEST_P(AudioEffectTest, IdleStateAfterStop) {
149 OpenEffects();
150 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000151 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000152 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000153 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000154 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000155}
156
157// An effect instance transfer to IDLE state after Command.Id.RESET in PROCESSING state.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000158TEST_P(AudioEffectTest, IdleStateAfterReset) {
159 OpenEffects();
160 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000161 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000162 CommandEffects(CommandId::RESET);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000163 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000164 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000165}
166
167// An effect instance transfer to INIT if instance receive a close() call.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000168TEST_P(AudioEffectTest, InitStateAfterClose) {
169 OpenEffects();
170 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000171 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000172 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000173 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000174 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000175 ExpectState(State::INIT);
176}
177
178// An effect instance shouldn't accept any command before open.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000179TEST_P(AudioEffectTest, NoCommandAcceptedBeforeOpen) {
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000180 ExpectState(State::INIT);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000181 CommandEffectsExpectStatus(CommandId::START, EX_ILLEGAL_STATE);
182 CommandEffectsExpectStatus(CommandId::STOP, EX_ILLEGAL_STATE);
183 CommandEffectsExpectStatus(CommandId::RESET, EX_ILLEGAL_STATE);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000184 ExpectState(State::INIT);
185}
186
187// No-op when receive STOP command in IDLE state.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000188TEST_P(AudioEffectTest, StopCommandInIdleStateNoOp) {
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000189 ExpectState(State::INIT);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000190 OpenEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000191 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000192 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000193 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000194 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000195}
196
197// No-op when receive STOP command in IDLE state.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000198TEST_P(AudioEffectTest, ResetCommandInIdleStateNoOp) {
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000199 ExpectState(State::INIT);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000200 OpenEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000201 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000202 CommandEffects(CommandId::RESET);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000203 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000204 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000205}
206
207// Repeat START and STOP command.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000208TEST_P(AudioEffectTest, RepeatStartAndStop) {
209 OpenEffects();
210 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000211 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000212 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000213 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000214 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000215 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000216 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000217 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000218 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000219}
220
221// Repeat START and RESET command.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000222TEST_P(AudioEffectTest, RepeatStartAndReset) {
223 OpenEffects();
224 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000225 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000226 CommandEffects(CommandId::RESET);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000227 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000228 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000229 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000230 CommandEffects(CommandId::RESET);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000231 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000232 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000233}
234
235// Repeat START and STOP command, try to close at PROCESSING state.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000236TEST_P(AudioEffectTest, CloseProcessingStateEffects) {
237 OpenEffects();
238 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000239 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000240 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000241 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000242 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000243 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000244 CloseEffects(EX_ILLEGAL_STATE);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000245 // cleanup
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000246 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000247 ExpectState(State::IDLE);
248}
249
250// Expect EX_ILLEGAL_STATE if the effect instance is not in a proper state to be destroyed.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000251TEST_P(AudioEffectTest, DestroyOpenEffects) {
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000252 // cleanup all effects.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000253 CloseEffects();
254 DestroyEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000255
256 // open effects, destroy without close, expect to get EX_ILLEGAL_STATE status.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000257 CreateEffects();
258 OpenEffects();
259 DestroyEffects(EX_ILLEGAL_STATE, 1);
260 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000261}
262
263/// Parameter testing.
264// Verify parameters pass in open can be successfully get.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000265TEST_P(AudioEffectTest, VerifyParametersAfterOpen) {
266 OpenEffects();
267 VerifyParameters();
268 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000269}
270
271// Verify parameters pass in set can be successfully get.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000272TEST_P(AudioEffectTest, SetAndGetParameter) {
273 OpenEffects();
274 VerifyParameters();
275 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
276 44100 /* oSampleRate */);
277 SetParameter();
278 VerifyParameters();
279 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000280}
281
282// Verify parameters pass in set can be successfully get.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000283TEST_P(AudioEffectTest, SetAndGetParameterInProcessing) {
284 OpenEffects();
285 VerifyParameters();
286 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000287 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000288 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
289 44100 /* oSampleRate */);
290 SetParameter();
291 VerifyParameters();
292 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000293 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000294 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000295}
296
297// Parameters kept after reset.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000298TEST_P(AudioEffectTest, ResetAndVerifyParameter) {
299 OpenEffects();
300 VerifyParameters();
301 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000302 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000303 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
304 44100 /* oSampleRate */);
305 SetParameter();
306 VerifyParameters();
307 CommandEffects(CommandId::RESET);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000308 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000309 VerifyParameters();
310 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000311}
312
313// Multiple instances of same implementation running.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000314TEST_P(AudioEffectTest, MultipleInstancesRunning) {
315 CreateEffects(3);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000316 ExpectState(State::INIT);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000317 OpenEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000318 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000319 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000320 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000321 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
322 44100 /* oSampleRate */);
323 SetParameter();
324 VerifyParameters();
325 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000326 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000327 VerifyParameters();
328 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000329}
330
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000331// Send data to effects and expect it to consume by check statusMQ.
332TEST_P(AudioEffectTest, ExpectEffectsToConsumeDataInMQ) {
333 OpenEffects();
334 PrepareInputData(mWriteMQSize);
335
336 CommandEffects(CommandId::START);
337 writeToFmq(mWriteMQSize);
338 readFromFmq(mWriteMQSize);
339
340 ExpectState(State::PROCESSING);
341 CommandEffects(CommandId::STOP);
342 // cleanup
343 CommandEffects(CommandId::STOP);
344 ExpectState(State::IDLE);
345 CloseEffects();
346}
347
348INSTANTIATE_TEST_SUITE_P(AudioEffectTestTest, AudioEffectTest,
Shunkai Yao45905172022-08-24 18:14:02 +0000349 testing::ValuesIn(android::getAidlHalInstanceNames(IFactory::descriptor)),
350 android::PrintInstanceNameToString);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000351GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AudioEffectTest);
Shunkai Yao67b1be62022-07-13 05:01:42 +0000352
353int main(int argc, char** argv) {
354 ::testing::InitGoogleTest(&argc, argv);
355 ABinderProcess_setThreadPoolMaxThreadCount(1);
356 ABinderProcess_startThreadPool();
357 return RUN_ALL_TESTS();
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000358}