• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "audio_errors.h"
17 #include "audio_manager_listener_stub.h"
18 #include "audio_manager_proxy.h"
19 #include "audio_log.h"
20 #include "audio_process_in_client.h"
21 #include "audio_process_proxy.h"
22 #include "audio_stream.h"
23 #include "audio_system_manager.h"
24 #include <gtest/gtest.h>
25 #include "iservice_registry.h"
26 #include "system_ability_definition.h"
27 
28 using namespace testing::ext;
29 namespace OHOS {
30 namespace AudioStandard {
31 std::unique_ptr<AudioManagerProxy> audioManagerProxy;
32 std::shared_ptr<AudioProcessInClient> processClient_;
33 const int32_t TEST_RET_NUM = 0;
34 const int32_t RENDERER_FLAGS = 0;
35 class AudioServiceUnitTest : public testing::Test {
36 public:
37     static void SetUpTestCase(void);
38     static void TearDownTestCase(void);
39     void SetUp();
40     void TearDown();
41 };
42 
43 class AudioParameterCallbackTest : public AudioParameterCallback {
OnAudioParameterChange(const std::string networkId,const AudioParamKey key,const std::string & condition,const std::string & value)44     virtual void OnAudioParameterChange(const std::string networkId, const AudioParamKey key,
45         const std::string& condition, const std::string& value) {}
46 };
47 
SetUpTestCase(void)48 void AudioServiceUnitTest::SetUpTestCase(void)
49 {
50     // input testsuit setup step,setup invoked before all testcases
51 }
52 
TearDownTestCase(void)53 void AudioServiceUnitTest::TearDownTestCase(void)
54 {
55     // input testsuit teardown step,teardown invoked after all testcases
56 }
57 
SetUp(void)58 void AudioServiceUnitTest::SetUp(void)
59 {
60     // input testcase setup step,setup invoked before each testcases
61 }
62 
TearDown(void)63 void AudioServiceUnitTest::TearDown(void)
64 {
65     // input testcase teardown step,teardown invoked after each testcases
66 }
67 
68 /**
69 * @tc.name  : Test AudioProcessProxy API
70 * @tc.type  : FUNC
71 * @tc.number: AudioProcessProxy_001
72 * @tc.desc  : Test AudioProcessProxy interface.
73 */
74 HWTEST(AudioServiceUnitTest, AudioProcessProxy_001, TestSize.Level1)
75 {
76     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
77     EXPECT_NE(nullptr, samgr);
78     sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_DISTRIBUTED_SERVICE_ID);
79     EXPECT_NE(nullptr, object);
80     std::unique_ptr<AudioProcessProxy> audioProcessProxy = std::make_unique<AudioProcessProxy>(object);
81 
82     int32_t ret = -1;
83     std::shared_ptr<OHAudioBuffer> buffer;
84     uint32_t spanSizeInFrame = 1000;
85     uint32_t totalSizeInFrame = spanSizeInFrame - 1;
86     uint32_t byteSizePerFrame = 1000;
87     buffer = OHAudioBuffer::CreateFormLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
88 
89     ret=audioProcessProxy->ResolveBuffer(buffer);
90     EXPECT_LT(ret, TEST_RET_NUM);
91 
92     ret = audioProcessProxy->Start();
93     EXPECT_LT(ret, TEST_RET_NUM);
94 
95     bool isFlush = true;
96     ret = audioProcessProxy->Pause(isFlush);
97     EXPECT_LT(ret, TEST_RET_NUM);
98 
99     ret = audioProcessProxy->Resume();
100     EXPECT_LT(ret, TEST_RET_NUM);
101 
102     ret = audioProcessProxy->Stop();
103     EXPECT_LT(ret, TEST_RET_NUM);
104 
105     ret = audioProcessProxy->RequestHandleInfo();
106     EXPECT_EQ(ret, SUCCESS);
107 
108     ret = audioProcessProxy->Release();
109     EXPECT_LT(ret, TEST_RET_NUM);
110 }
111 
112 /**
113 * @tc.name  : Test AudioManagerProxy API
114 * @tc.type  : FUNC
115 * @tc.number: AudioManagerProxy_001
116 * @tc.desc  : Test AudioManagerProxy interface.
117 */
118 HWTEST(AudioServiceUnitTest, AudioManagerProxy_001, TestSize.Level1)
119 {
120     int32_t ret = -1;
121 
122     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
123     EXPECT_NE(nullptr, samgr);
124     sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_DISTRIBUTED_SERVICE_ID);
125     EXPECT_NE(nullptr, object);
126 
127     audioManagerProxy = std::make_unique<AudioManagerProxy>(object);
128 
129     bool isMute = true;
130     ret = audioManagerProxy->SetMicrophoneMute(isMute);
131     EXPECT_EQ(ret, SUCCESS);
132 
133     bool isMuteRet = audioManagerProxy->IsMicrophoneMute();
134     EXPECT_EQ(true, isMuteRet);
135 }
136 
137 /**
138 * @tc.name  : Test AudioManagerProxy API
139 * @tc.type  : FUNC
140 * @tc.number: AudioManagerProxy_002
141 * @tc.desc  : Test AudioManagerProxy interface.
142 */
143 HWTEST(AudioServiceUnitTest, AudioManagerProxy_002, TestSize.Level1)
144 {
145     int32_t ret = -1;
146 
147     float volume = 0.1;
148     ret = audioManagerProxy->SetVoiceVolume(volume);
149 
150     const std::string networkId = "LocalDevice";
151     const AudioParamKey key = AudioParamKey::VOLUME;
152     AudioVolumeType volumeType =AudioVolumeType::STREAM_MEDIA;
153     int32_t groupId = 0;
154     std::string condition = "EVENT_TYPE=1;VOLUME_GROUP_ID=" + std::to_string(groupId) + ";AUDIO_VOLUME_TYPE="
155         + std::to_string(volumeType) + ";";
156     std::string value = std::to_string(volume);
157     audioManagerProxy->SetAudioParameter(networkId, key, condition, value);
158     const std::string retStr = audioManagerProxy->GetAudioParameter(networkId, key, condition);
159     EXPECT_NE(retStr, value);
160 
161     bool connected = true;
162     audioManagerProxy->NotifyDeviceInfo(networkId, connected);
163     ret = audioManagerProxy->CheckRemoteDeviceState(networkId, DeviceRole::OUTPUT_DEVICE, true);
164     EXPECT_LT(ret, TEST_RET_NUM);
165 }
166 
167 /**
168 * @tc.name  : Test AudioManagerProxy API
169 * @tc.type  : FUNC
170 * @tc.number: AudioManagerProxy_003
171 * @tc.desc  : Test AudioManagerProxy interface.
172 */
173 HWTEST(AudioServiceUnitTest, AudioManagerProxy_003, TestSize.Level1)
174 {
175     int32_t ret = -1;
176 
177     AudioScene audioScene = AudioScene::AUDIO_SCENE_DEFAULT;
178     DeviceType activeDevice = DeviceType::DEVICE_TYPE_SPEAKER;
179     ret = audioManagerProxy->SetAudioScene(audioScene, activeDevice);
180     EXPECT_EQ(AUDIO_OK, ret);
181 
182     DeviceFlag deviceFlag = DeviceFlag::OUTPUT_DEVICES_FLAG;
183     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors;
184     audioDeviceDescriptors = audioManagerProxy->GetDevices(deviceFlag);
185     EXPECT_EQ(audioDeviceDescriptors.size() > 0, false);
186 
187     ret = audioManagerProxy->UpdateActiveDeviceRoute(DeviceType::DEVICE_TYPE_SPEAKER, DeviceFlag::OUTPUT_DEVICES_FLAG);
188     EXPECT_EQ(AUDIO_OK, ret);
189 
190     sptr<IRemoteObject> object = nullptr;
191     ret = audioManagerProxy->SetParameterCallback(object);
192     EXPECT_EQ(ERR_NULL_OBJECT, ret);
193 
194     auto parameterChangeCbStub = new(std::nothrow) AudioManagerListenerStub();
195     EXPECT_NE(parameterChangeCbStub, nullptr);
196     object = parameterChangeCbStub->AsObject();
197     EXPECT_NE(object, nullptr);
198     ret = audioManagerProxy->SetParameterCallback(object);
199     EXPECT_EQ(AUDIO_OK, ret);
200 }
201 
202 /**
203 * @tc.name  : Test AudioManagerProxy API
204 * @tc.type  : FUNC
205 * @tc.number: AudioManagerProxy_004
206 * @tc.desc  : Test AudioManagerProxy interface.
207 */
208 HWTEST(AudioServiceUnitTest, AudioManagerProxy_004, TestSize.Level1)
209 {
210     AudioProcessConfig config;
211     config.appInfo = {};
212     config.appInfo.appUid=static_cast<int32_t>(getuid());
213 
214     config.audioMode = AudioMode::AUDIO_MODE_RECORD;
215 
216     config.streamInfo = {};
217     config.streamInfo.samplingRate = AudioSamplingRate::SAMPLE_RATE_44100;
218     config.streamInfo.encoding = AudioEncodingType::ENCODING_PCM;
219     config.streamInfo.format = AudioSampleFormat::SAMPLE_S16LE;
220     config.streamInfo.channels = AudioChannel::STEREO;
221 
222     config.rendererInfo = {};
223     config.rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC;
224     config.rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_MEDIA;
225     config.rendererInfo.rendererFlags = 0;
226 
227     config.capturerInfo = {};
228     config.capturerInfo.sourceType = SourceType::SOURCE_TYPE_MIC;
229     config.capturerInfo.capturerFlags = 0;
230     sptr<IRemoteObject> process = audioManagerProxy->CreateAudioProcess(config);
231     EXPECT_EQ(process, nullptr);
232 }
233 
234 /**
235 * @tc.name  : Test AudioManagerProxy API
236 * @tc.type  : FUNC
237 * @tc.number: AudioManagerProxy_005
238 * @tc.desc  : Test AudioManagerProxy interface.
239 */
240 HWTEST(AudioServiceUnitTest, AudioManagerProxy_005, TestSize.Level1)
241 {
242     std::vector<Library> libraries;
243     Library library = {};
244     library.name = "testname";
245     library.path ="test.so";
246     libraries.push_back(library);
247 
248     std::vector<Effect> effects;
249     Effect effect = {};
250     effect.name = "test";
251     effect.libraryName = "test";
252     effects.push_back(effect);
253 
254     std::vector<Effect> successEffects;
255     bool ret = audioManagerProxy->LoadAudioEffectLibraries(libraries, effects, successEffects);
256     EXPECT_EQ(ret, false);
257 }
258 
259 /**
260 * @tc.name  : Test AudioManagerListenerStub API
261 * @tc.type  : FUNC
262 * @tc.number: AudioManagerListenerStub_001
263 * @tc.desc  : Test AudioManagerListenerStub interface.
264 */
265 HWTEST(AudioServiceUnitTest, AudioManagerListenerStub_001, TestSize.Level1)
266 {
267     std::unique_ptr<AudioManagerListenerStub> audioManagerListenerStub = std::make_unique<AudioManagerListenerStub>();
268 
269     const std::weak_ptr<AudioParameterCallback> callback = std::make_shared<AudioParameterCallbackTest>();
270     audioManagerListenerStub->SetParameterCallback(callback);
271     float volume = 0.1;
272     const std::string networkId = "LocalDevice";
273     const AudioParamKey key = AudioParamKey::VOLUME;
274     AudioVolumeType volumeType =AudioVolumeType::STREAM_MEDIA;
275     int32_t groupId = 0;
276     std::string condition = "EVENT_TYPE=1;VOLUME_GROUP_ID=" + std::to_string(groupId) + ";AUDIO_VOLUME_TYPE="
277         + std::to_string(volumeType) + ";";
278     std::string value = std::to_string(volume);
279     audioManagerListenerStub->OnAudioParameterChange(networkId, key, condition, value);
280     EXPECT_NE(value, "");
281 }
282 
283 
284 /**
285 * @tc.name  : Test AudioProcessInClientInner API
286 * @tc.type  : FUNC
287 * @tc.number: AudioProcessInClientInner_001
288 * @tc.desc  : Test AudioProcessInClientInner interface using unsupported parameters.
289 */
290 HWTEST(AudioServiceUnitTest, AudioProcessInClientInner_001, TestSize.Level1)
291 {
292     AudioProcessConfig config;
293     config.appInfo.appPid = getpid();
294     config.appInfo.appUid = getuid();
295 
296     config.audioMode = AUDIO_MODE_PLAYBACK;
297 
298     config.rendererInfo.contentType = CONTENT_TYPE_MUSIC;
299     config.rendererInfo.streamUsage = STREAM_USAGE_MEDIA;
300     config.rendererInfo.rendererFlags = RENDERER_FLAGS;
301 
302     config.streamInfo.channels = STEREO;
303     config.streamInfo.encoding = ENCODING_PCM;
304     config.streamInfo.format = SAMPLE_S16LE;
305     config.streamInfo.samplingRate = SAMPLE_RATE_64000;
306 
307     processClient_ = AudioProcessInClient::Create(config);
308     EXPECT_EQ(processClient_, nullptr);
309 }
310 
311 /**
312 * @tc.name  : Test AudioDeviceDescriptor API
313 * @tc.type  : FUNC
314 * @tc.number: AudioDeviceDescriptor_001
315 * @tc.desc  : Test AudioDeviceDescriptor interface.
316 */
317 HWTEST(AudioServiceUnitTest, AudioDeviceDescriptor_001, TestSize.Level1)
318 {
319     DeviceType type = DeviceType::DEVICE_TYPE_SPEAKER;
320     DeviceRole role = DeviceRole::OUTPUT_DEVICE;
321     int32_t interruptGroupId = 1;
322     int32_t volumeGroupId = 1;
323     std::string networkId = "LocalDevice";
324     std::unique_ptr<AudioDeviceDescriptor> audioDeviceDescriptor =
325         std::make_unique<AudioDeviceDescriptor>(type, role, interruptGroupId, volumeGroupId, networkId);
326     EXPECT_NE(audioDeviceDescriptor, nullptr);
327 
328     AudioDeviceDescriptor deviceDescriptor;
329     deviceDescriptor.deviceType_ = type;
330     deviceDescriptor.deviceRole_ = role;
331     audioDeviceDescriptor = std::make_unique<AudioDeviceDescriptor>(deviceDescriptor);
332     EXPECT_NE(audioDeviceDescriptor, nullptr);
333 
334     std::string deviceName = "";
335     std::string macAddress = "";
336     audioDeviceDescriptor->SetDeviceInfo(deviceName, macAddress);
337 
338     AudioStreamInfo audioStreamInfo;
339     audioStreamInfo.channels = STEREO;
340     audioStreamInfo.encoding = ENCODING_PCM;
341     audioStreamInfo.format = SAMPLE_S16LE;
342     audioStreamInfo.samplingRate = SAMPLE_RATE_48000;
343     int32_t channelMask = 1;
344     audioDeviceDescriptor->SetDeviceCapability(audioStreamInfo, channelMask);
345 
346     AudioStreamInfo streamInfo = audioDeviceDescriptor->audioStreamInfo_;
347     EXPECT_EQ(streamInfo.channels, audioStreamInfo.channels);
348     EXPECT_EQ(streamInfo.encoding, audioStreamInfo.encoding);
349     EXPECT_EQ(streamInfo.format, audioStreamInfo.format);
350     EXPECT_EQ(streamInfo.samplingRate, audioStreamInfo.samplingRate);
351 }
352 
353 /**
354 * @tc.name  : Test AudioServiceClient API
355 * @tc.type  : FUNC
356 * @tc.number: AudioServiceClient_001
357 * @tc.desc  : Test AudioServiceClient interface.
358 */
359 HWTEST(AudioServiceUnitTest, AudioServiceClient_001, TestSize.Level1)
360 {
361     int32_t ret = -1;
362 
363     std::unique_ptr<AudioServiceClient> audioServiceClient = std::make_unique<AudioStream>(STREAM_MUSIC,
364         AUDIO_MODE_PLAYBACK, getuid());
365 
366     ASClientType eClientType = ASClientType::AUDIO_SERVICE_CLIENT_PLAYBACK;
367     ret = audioServiceClient->Initialize(eClientType);
368     EXPECT_EQ(SUCCESS, ret);
369 
370     AudioStreamParams audioParams = {};
371     audioParams.samplingRate = AudioSamplingRate::SAMPLE_RATE_44100;
372     audioParams.encoding = AudioEncodingType::ENCODING_PCM;
373     audioParams.format = AudioSampleFormat::SAMPLE_S16LE;
374     audioParams.channels = AudioChannel::STEREO;
375 
376     ret = audioServiceClient->CreateStream(audioParams, AudioStreamType::STREAM_SYSTEM);
377     EXPECT_EQ(SUCCESS, ret);
378     ret = audioServiceClient->CreateStream(audioParams, AudioStreamType::STREAM_NOTIFICATION);
379     EXPECT_EQ(SUCCESS, ret);
380     ret = audioServiceClient->CreateStream(audioParams, AudioStreamType::STREAM_BLUETOOTH_SCO);
381     EXPECT_EQ(SUCCESS, ret);
382     ret = audioServiceClient->CreateStream(audioParams, AudioStreamType::STREAM_DTMF);
383     EXPECT_EQ(SUCCESS, ret);
384     ret = audioServiceClient->CreateStream(audioParams, AudioStreamType::STREAM_TTS);
385     EXPECT_EQ(SUCCESS, ret);
386     ret = audioServiceClient->CreateStream(audioParams, AudioStreamType::STREAM_DEFAULT);
387     EXPECT_EQ(SUCCESS, ret);
388 
389     ret = audioServiceClient->SetStreamRenderRate(AudioRendererRate::RENDER_RATE_HALF);
390     EXPECT_EQ(SUCCESS, ret);
391     ret = audioServiceClient->SetStreamRenderRate(static_cast<AudioRendererRate>(-1));
392     EXPECT_EQ(SUCCESS - 2, ret);
393     ret = audioServiceClient->SetStreamRenderRate(RENDER_RATE_DOUBLE);
394     EXPECT_EQ(SUCCESS, ret);
395 
396     uint32_t rate = audioServiceClient->GetRendererSamplingRate();
397     EXPECT_EQ((uint32_t)SAMPLE_RATE_44100, rate);
398     ret = audioServiceClient->SetRendererSamplingRate(0);
399     EXPECT_EQ(SUCCESS - 2, ret);
400     rate = audioServiceClient->GetRendererSamplingRate();
401     EXPECT_EQ((uint32_t)SAMPLE_RATE_44100, rate);
402 
403     audioServiceClient->OnTimeOut();
404 }
405 } // namespace AudioStandard
406 } // namespace OHOS