blob: 3ea67bc96b9346f6f1a2d0a190bdb914bf6f8bf6 [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 Yao45905172022-08-24 18:14:02 +000062 }
63
64 void TearDown() override {
65 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +000066 DestroyEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000067 }
Shunkai Yao45905172022-08-24 18:14:02 +000068};
69
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000070TEST_P(AudioEffectTest, OpenEffectTest) {
71 OpenEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000072}
73
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000074TEST_P(AudioEffectTest, OpenAndCloseEffect) {
75 OpenEffects();
76 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000077}
78
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000079TEST_P(AudioEffectTest, CloseUnopenedEffectTest) {
80 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000081}
82
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000083TEST_P(AudioEffectTest, DoubleOpenCloseEffects) {
84 OpenEffects();
85 CloseEffects();
86 OpenEffects();
87 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000088
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000089 OpenEffects();
90 OpenEffects();
91 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000092
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000093 OpenEffects();
94 CloseEffects();
95 CloseEffects();
Shunkai Yao45905172022-08-24 18:14:02 +000096}
97
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +000098TEST_P(AudioEffectTest, GetDescriptors) {
99 GetEffectDescriptors();
Shunkai Yao45905172022-08-24 18:14:02 +0000100}
101
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000102TEST_P(AudioEffectTest, DescriptorIdExistAndUnique) {
Shunkai Yao45905172022-08-24 18:14:02 +0000103 auto checker = [&](const std::shared_ptr<IEffect>& effect) {
104 Descriptor desc;
105 std::vector<Descriptor::Identity> idList;
Shunkai Yao121c6dd2022-09-21 23:42:08 +0000106 EXPECT_IS_OK(effect->getDescriptor(&desc));
Shunkai Yao6afc8552022-10-26 22:47:20 +0000107 QueryEffects(desc.common.id.type, desc.common.id.uuid, desc.common.id.proxy, &idList);
108 // Must have at least one instance.
109 EXPECT_NE(idList.size(), 0UL);
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 Yao6afc8552022-10-26 22:47:20 +0000120 EXPECT_EQ(idSet.count(it), 0UL) << it.toString();
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();
Shunkai Yao6afc8552022-10-26 22:47:20 +0000259 auto vec = GetCompleteEffectIdList();
260 DestroyEffects(EX_ILLEGAL_STATE, vec.size());
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000261 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000262}
263
264/// Parameter testing.
265// Verify parameters pass in open can be successfully get.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000266TEST_P(AudioEffectTest, VerifyParametersAfterOpen) {
267 OpenEffects();
268 VerifyParameters();
269 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000270}
271
272// Verify parameters pass in set can be successfully get.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000273TEST_P(AudioEffectTest, SetAndGetParameter) {
274 OpenEffects();
275 VerifyParameters();
276 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
277 44100 /* oSampleRate */);
278 SetParameter();
279 VerifyParameters();
280 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000281}
282
283// Verify parameters pass in set can be successfully get.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000284TEST_P(AudioEffectTest, SetAndGetParameterInProcessing) {
285 OpenEffects();
286 VerifyParameters();
287 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000288 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000289 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
290 44100 /* oSampleRate */);
291 SetParameter();
292 VerifyParameters();
293 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000294 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000295 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000296}
297
298// Parameters kept after reset.
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000299TEST_P(AudioEffectTest, ResetAndVerifyParameter) {
300 OpenEffects();
301 VerifyParameters();
302 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000303 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000304 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
305 44100 /* oSampleRate */);
306 SetParameter();
307 VerifyParameters();
308 CommandEffects(CommandId::RESET);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000309 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000310 VerifyParameters();
311 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000312}
313
Shunkai Yao6afc8552022-10-26 22:47:20 +0000314// TODO: need a way to support setting different sessionId to different effect instances
315#if 0
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000316// Multiple instances of same implementation running.
Shunkai Yao6afc8552022-10-26 22:47:20 +0000317TEST_P(AudioEffectTest, MultipleInstancesRunningWithDiffSessionId) {
318 CreateEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000319 ExpectState(State::INIT);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000320 OpenEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000321 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000322 CommandEffects(CommandId::START);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000323 ExpectState(State::PROCESSING);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000324 initParamCommon(1 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */,
325 44100 /* oSampleRate */);
326 SetParameter();
327 VerifyParameters();
328 CommandEffects(CommandId::STOP);
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000329 ExpectState(State::IDLE);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000330 VerifyParameters();
331 CloseEffects();
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000332}
Shunkai Yao6afc8552022-10-26 22:47:20 +0000333#endif
Shunkai Yaoea24c1a2022-09-28 17:39:23 +0000334
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000335// Send data to effects and expect it to consume by check statusMQ.
336TEST_P(AudioEffectTest, ExpectEffectsToConsumeDataInMQ) {
337 OpenEffects();
Shunkai Yao6afc8552022-10-26 22:47:20 +0000338 PrepareInputData(mWriteMQBytes);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000339
340 CommandEffects(CommandId::START);
Shunkai Yao6afc8552022-10-26 22:47:20 +0000341 writeToFmq(mWriteMQBytes);
342 readFromFmq(mWriteMQBytes);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000343
344 ExpectState(State::PROCESSING);
345 CommandEffects(CommandId::STOP);
346 // cleanup
347 CommandEffects(CommandId::STOP);
348 ExpectState(State::IDLE);
349 CloseEffects();
350}
351
352INSTANTIATE_TEST_SUITE_P(AudioEffectTestTest, AudioEffectTest,
Shunkai Yao45905172022-08-24 18:14:02 +0000353 testing::ValuesIn(android::getAidlHalInstanceNames(IFactory::descriptor)),
354 android::PrintInstanceNameToString);
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000355GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AudioEffectTest);
Shunkai Yao67b1be62022-07-13 05:01:42 +0000356
357int main(int argc, char** argv) {
358 ::testing::InitGoogleTest(&argc, argv);
359 ABinderProcess_setThreadPoolMaxThreadCount(1);
360 ABinderProcess_startThreadPool();
361 return RUN_ALL_TESTS();
Shunkai Yaoa4ab38c2022-10-14 01:07:47 +0000362}