1 /*
2 * Copyright (c) 2021-2022 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_system_manager.h"
18 #include "audio_policy_test.h"
19
20 using namespace std;
21 using namespace OHOS::AudioStandard;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace AudioStandard {
26 namespace V1_0 {
SetUpTestCase(void)27 void AudioPolicyTest::SetUpTestCase(void)
28 {
29 ASSERT_NE(nullptr, AudioSystemManager::GetInstance());
30 }
31
TearDownTestCase(void)32 void AudioPolicyTest::TearDownTestCase(void) {}
33
SetUp(void)34 void AudioPolicyTest::SetUp(void) {}
35
TearDown(void)36 void AudioPolicyTest::TearDown(void) {}
37
OnRingerModeUpdated(const AudioRingerMode & ringerMode)38 void AudioRingerModeCallbackTest::OnRingerModeUpdated(const AudioRingerMode &ringerMode)
39 {
40 ringerMode_ = ringerMode;
41 }
42
43 namespace {
44 const PolicyParam VOLUME_PARAMS[] = {
45 {
46 .volume = 8,
47 .streamType = STREAM_MUSIC
48 },
49 {
50 .volume = 8,
51 .streamType = STREAM_RING
52 }
53 };
54
55 const PolicyParam MUTE_PARAMS[] = {
56 {
57 .streamType = STREAM_MUSIC,
58 .mute = true
59 },
60 {
61 .streamType = STREAM_MUSIC,
62 .mute = false
63 }
64 };
65
66 const PolicyParam STREAM_PARAMS[] = {
67 {
68 .streamType = STREAM_MUSIC,
69 .active = true
70 },
71 {
72 .streamType = STREAM_RING,
73 .active = false
74 }
75 };
76
77 const PolicyParam ACTIVE_DEVICE_PARAMS[] = {
78 {
79 .actDeviceType = SPEAKER,
80 .active = true
81 },
82 {
83 .actDeviceType = BLUETOOTH_SCO,
84 .active = true
85 },
86 {
87 .actDeviceType = BLUETOOTH_SCO,
88 .active = false
89 },
90 {
91 .actDeviceType = SPEAKER,
92 .active = true
93 },
94 {
95 .actDeviceType = BLUETOOTH_SCO,
96 .active = true
97 },
98 {
99 .actDeviceType = SPEAKER,
100 .active = false
101 },
102 {
103 .actDeviceType = SPEAKER,
104 .active = true
105 },
106 };
107
108 const PolicyParam RINGER_MODE_PARAMS[] = {
109 {
110 .ringerMode = RINGER_MODE_NORMAL
111 },
112 {
113 .ringerMode = RINGER_MODE_SILENT
114 },
115 {
116 .ringerMode = RINGER_MODE_VIBRATE
117 },
118 };
119
120 const PolicyParam MIC_MUTE_PARAMS[] = {
121 {
122 .mute = true
123 },
124 {
125 .mute = false
126 }
127 };
128
129 const PolicyParam VOLUME_RANGE_PARAMS[] = {
130 {
131 .streamType = STREAM_MUSIC
132 },
133 {
134 .streamType = STREAM_RING
135 }
136 };
137
138 const PolicyParam AUDIO_PARAMS[] = {
139 {
140 .key = "sampling_rate",
141 .value = "8000"
142 },
143 {
144 .key = "sampling_rate",
145 .value = "44100"
146 },
147 {
148 .key = "sampling_rate",
149 .value = "96000"
150 }
151 };
152
153 const PolicyParam DEVICES_PARAMS[] = {
154 {
155 .deviceType = DEVICE_TYPE_MIC,
156 .deviceFlag = INPUT_DEVICES_FLAG,
157 .deviceRole = INPUT_DEVICE
158 },
159 {
160 .deviceType = DEVICE_TYPE_SPEAKER,
161 .deviceFlag = OUTPUT_DEVICES_FLAG,
162 .deviceRole = OUTPUT_DEVICE
163 }
164 };
165
166 const PolicyParam AUDIO_SCENE_PARAMS[] = {
167 {
168 .audioScene = AUDIO_SCENE_DEFAULT
169 },
170 {
171 .audioScene = AUDIO_SCENE_PHONE_CHAT
172 }
173 };
174 } // namespace
175
176 /*
177 * Set Volume
178 *
179 */
180 class AudioPolicySetVolumeTest : public AudioPolicyTest {};
181
182 HWTEST_P(AudioPolicySetVolumeTest, SetVolume, TestSize.Level1)
183 {
184 PolicyParam params = GetParam();
185
186 AudioSystemManager::AudioVolumeType volumeType
187 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
188 float volume = params.volume;
189 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetVolume(volumeType, volume));
190 }
191
192 INSTANTIATE_TEST_CASE_P(
193 SetVolume,
194 AudioPolicySetVolumeTest,
195 ValuesIn(VOLUME_PARAMS));
196
197 /*
198 * Get Volume
199 *
200 */
201 class AudioPolicyGetVolumeTest : public AudioPolicyTest {};
202
203 HWTEST_P(AudioPolicyGetVolumeTest, GetVolume, TestSize.Level1)
204 {
205 PolicyParam params = GetParam();
206 AudioSystemManager::AudioVolumeType volumeType
207 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
208 float volume = params.volume;
209
210 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetVolume(volumeType, volume));
211 EXPECT_EQ(volume, AudioSystemManager::GetInstance()->GetVolume(volumeType));
212 }
213
214 INSTANTIATE_TEST_CASE_P(
215 GetVolume,
216 AudioPolicyGetVolumeTest,
217 ValuesIn(VOLUME_PARAMS));
218
219 /*
220 * Set Mute
221 *
222 */
223 class AudioPolicySetMuteTest : public AudioPolicyTest {};
224
225 HWTEST_P(AudioPolicySetMuteTest, SetMute, TestSize.Level1)
226 {
227 PolicyParam params = GetParam();
228 AudioSystemManager::AudioVolumeType volumeType
229 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
230 bool mute = params.mute;
231
232 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetMute(volumeType, mute));
233 }
234
235 INSTANTIATE_TEST_CASE_P(
236 SetMute,
237 AudioPolicySetMuteTest,
238 ValuesIn(MUTE_PARAMS));
239
240 /*
241 * Is Mute
242 *
243 */
244 class AudioPolicyGetMuteTest : public AudioPolicyTest {};
245
246 HWTEST_P(AudioPolicyGetMuteTest, IsStreamMute, TestSize.Level1)
247 {
248 PolicyParam params = GetParam();
249 AudioSystemManager::AudioVolumeType volumeType
250 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
251 bool mute = params.mute;
252
253 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetMute(volumeType, mute));
254 EXPECT_EQ(mute, AudioSystemManager::GetInstance()->IsStreamMute(volumeType));
255 }
256
257 INSTANTIATE_TEST_CASE_P(
258 IsStreamMute,
259 AudioPolicyGetMuteTest,
260 ValuesIn(MUTE_PARAMS));
261
262 /*
263 * Is Stream Active
264 *
265 */
266 class AudioPolicyIsStreamActiveTest : public AudioPolicyTest {};
267
268 HWTEST_P(AudioPolicyIsStreamActiveTest, IsStreamActive, TestSize.Level1)
269 {
270 PolicyParam params = GetParam();
271 AudioSystemManager::AudioVolumeType volumeType
272 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
273
274 // review this code
275 EXPECT_EQ(params.active, AudioSystemManager::GetInstance()->IsStreamActive(volumeType));
276 }
277
278 INSTANTIATE_TEST_CASE_P(
279 IsStreamActive,
280 AudioPolicyIsStreamActiveTest,
281 ValuesIn(STREAM_PARAMS));
282
283 /*
284 * Set Device Active
285 *
286 */
287 class AudioPolicySetDeviceActiveTest : public AudioPolicyTest {};
288
289 HWTEST_P(AudioPolicySetDeviceActiveTest, SetDeviceActive, TestSize.Level1)
290 {
291 PolicyParam params = GetParam();
292 ActiveDeviceType deviceType = params.actDeviceType;
293 bool active = params.active;
294
295 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetDeviceActive(deviceType, active));
296 }
297
298 INSTANTIATE_TEST_CASE_P(
299 SetDeviceActive,
300 AudioPolicySetDeviceActiveTest,
301 ValuesIn(ACTIVE_DEVICE_PARAMS));
302
303 /*
304 * Is Device Active
305 *
306 */
307 class AudioPolicyIsDeviceActiveTest : public AudioPolicyTest {};
308
309 HWTEST_P(AudioPolicyIsDeviceActiveTest, IsDeviceActive, TestSize.Level1)
310 {
311 PolicyParam params = GetParam();
312 ActiveDeviceType deviceType = params.actDeviceType;
313 bool active = params.active;
314
315 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetDeviceActive(deviceType, active));
316 EXPECT_EQ(active, AudioSystemManager::GetInstance()->IsDeviceActive(deviceType));
317 }
318
319 INSTANTIATE_TEST_CASE_P(
320 IsDeviceActive,
321 AudioPolicyIsDeviceActiveTest,
322 ValuesIn(ACTIVE_DEVICE_PARAMS));
323
324 /*
325 * Set Ringer Mode
326 *
327 */
328 class AudioPolicySetRingerModeTest : public AudioPolicyTest {};
329
330 HWTEST_P(AudioPolicySetRingerModeTest, SetRingerMode, TestSize.Level1)
331 {
332 PolicyParam params = GetParam();
333 AudioRingerMode ringerMode = params.ringerMode;
334
335 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetRingerMode(ringerMode));
336 }
337
338
339 INSTANTIATE_TEST_CASE_P(
340 SetRingerMode,
341 AudioPolicySetRingerModeTest,
342 ValuesIn(RINGER_MODE_PARAMS));
343
344 /*
345 * Get Ringer Mode
346 *
347 */
348 class AudioPolicyGetRingerModeTest : public AudioPolicyTest {};
349
350 HWTEST_P(AudioPolicyGetRingerModeTest, GetRingerMode, TestSize.Level1)
351 {
352 PolicyParam params = GetParam();
353 AudioRingerMode ringerMode = params.ringerMode;
354
355 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetRingerMode(ringerMode));
356 EXPECT_EQ(ringerMode, AudioSystemManager::GetInstance()->GetRingerMode());
357 }
358
359 INSTANTIATE_TEST_CASE_P(
360 GetRingerMode,
361 AudioPolicyGetRingerModeTest,
362 ValuesIn(RINGER_MODE_PARAMS));
363
364 /*
365 * Check ringer mode callback
366 *
367 */
368 class AudioPolicySetRingerModeCallbackTest : public AudioPolicyTest {};
369
370 HWTEST_P(AudioPolicySetRingerModeCallbackTest, SetRingerModeCallback, TestSize.Level1)
371 {
372 int32_t ret = -1;
373 PolicyParam params = GetParam();
374 AudioRingerMode ringerMode = params.ringerMode;
375
376 AudioSystemManager *audioSystemMgr = AudioSystemManager::GetInstance();
377
378 shared_ptr<AudioRingerModeCallbackTest> ringerModeCB = std::make_shared<AudioRingerModeCallbackTest>();
379 ret = audioSystemMgr->SetRingerModeCallback(1, ringerModeCB);
380 EXPECT_EQ(SUCCESS, ret);
381
382 audioSystemMgr->SetRingerMode(ringerMode);
383 sleep(1);
384 EXPECT_EQ(ringerModeCB->ringerMode_, ringerMode);
385
386 ret = audioSystemMgr->UnsetRingerModeCallback(1);
387 EXPECT_EQ(SUCCESS, ret);
388 }
389
390 INSTANTIATE_TEST_CASE_P(
391 SetRingerModeCallback,
392 AudioPolicySetRingerModeCallbackTest,
393 ValuesIn(RINGER_MODE_PARAMS));
394
395 /*
396 * Set microphone mute
397 *
398 */
399 class AudioPolicySetMicrophoneMuteTest : public AudioPolicyTest {};
400
401 HWTEST_P(AudioPolicySetMicrophoneMuteTest, SetMicrophoneMute, TestSize.Level1)
402 {
403 PolicyParam params = GetParam();
404 bool mute = params.mute;
405
406 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetMicrophoneMute(mute));
407 }
408
409 INSTANTIATE_TEST_CASE_P(
410 SetMicrophoneMute,
411 AudioPolicySetMicrophoneMuteTest,
412 ValuesIn(MIC_MUTE_PARAMS));
413
414 /*
415 * Is Microphone Mute
416 *
417 */
418 class AudioPolicyGetMicrophoneMuteTest : public AudioPolicyTest {};
419
420 HWTEST_P(AudioPolicyGetMicrophoneMuteTest, IsMicrophoneMute, TestSize.Level1)
421 {
422 PolicyParam params = GetParam();
423 bool mute = params.mute;
424
425 EXPECT_EQ(MEDIA_OK, AudioSystemManager::GetInstance()->SetMicrophoneMute(mute));
426 EXPECT_EQ(mute, AudioSystemManager::GetInstance()->IsMicrophoneMute());
427 }
428
429 INSTANTIATE_TEST_CASE_P(
430 IsMicrophoneMute,
431 AudioPolicyGetMicrophoneMuteTest,
432 ValuesIn(MIC_MUTE_PARAMS));
433
434 /*
435 * Check volume range
436 *
437 */
438 class AudioPolicyVolumeRangeTest : public AudioPolicyTest {};
439
440 HWTEST_P(AudioPolicyVolumeRangeTest, GetMaxVolume, TestSize.Level1)
441 {
442 PolicyParam params = GetParam();
443 AudioSystemManager::AudioVolumeType volumeType
444 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
445 EXPECT_EQ(15, AudioSystemManager::GetInstance()->GetMaxVolume(volumeType));
446 }
447
448 HWTEST_P(AudioPolicyVolumeRangeTest, GetMinVolume, TestSize.Level1)
449 {
450 PolicyParam params = GetParam();
451 AudioSystemManager::AudioVolumeType volumeType
452 = static_cast<AudioSystemManager::AudioVolumeType>(params.streamType);
453 EXPECT_EQ(0, AudioSystemManager::GetInstance()->GetMinVolume(volumeType));
454 }
455
456 INSTANTIATE_TEST_CASE_P(
457 GetMaxVolume,
458 AudioPolicyVolumeRangeTest,
459 ValuesIn(VOLUME_RANGE_PARAMS));
460
461 INSTANTIATE_TEST_CASE_P(
462 GetMinVolume,
463 AudioPolicyVolumeRangeTest,
464 ValuesIn(VOLUME_RANGE_PARAMS));
465
466 /*
467 * Check volume range
468 *
469 */
470 class AudioPolicyAudioParameterTest : public AudioPolicyTest {};
471
472 HWTEST_P(AudioPolicyAudioParameterTest, SetAudioParameter, TestSize.Level1)
473 {
474 PolicyParam params = GetParam();
475 AudioSystemManager::GetInstance()->SetAudioParameter(params.key, params.value);
476 EXPECT_EQ(params.value, AudioSystemManager::GetInstance()->GetAudioParameter(params.key));
477 }
478
479 INSTANTIATE_TEST_CASE_P(
480 SetAudioParameter,
481 AudioPolicyAudioParameterTest,
482 ValuesIn(AUDIO_PARAMS));
483
484 HWTEST_P(AudioPolicyAudioParameterTest, GetAudioParameter, TestSize.Level1)
485 {
486 PolicyParam params = GetParam();
487 AudioSystemManager::GetInstance()->SetAudioParameter(params.key, params.value);
488 EXPECT_EQ(params.value, AudioSystemManager::GetInstance()->GetAudioParameter(params.key));
489 }
490
491 INSTANTIATE_TEST_CASE_P(
492 GetAudioParameter,
493 AudioPolicyAudioParameterTest,
494 ValuesIn(AUDIO_PARAMS));
495
496 /*
497 * Check volume range
498 *
499 */
500 class AudioPolicyGetDevicesTest : public AudioPolicyTest {};
501
502 HWTEST_P(AudioPolicyGetDevicesTest, GetDevices, TestSize.Level1)
503 {
504 PolicyParam params = GetParam();
505 DeviceFlag deviceFlag = params.deviceFlag;
506 DeviceType deviceType = params.deviceType;
507 DeviceRole deviceRole = params.deviceRole;
508 vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors
509 = AudioSystemManager::GetInstance()->GetDevices(deviceFlag);
510 sptr<AudioDeviceDescriptor> audioDeviceDescriptor = audioDeviceDescriptors[0];
511 EXPECT_EQ(deviceType, audioDeviceDescriptor->deviceType_);
512 EXPECT_EQ(deviceRole, audioDeviceDescriptor->deviceRole_);
513 }
514
515 INSTANTIATE_TEST_CASE_P(
516 GetDevices,
517 AudioPolicyGetDevicesTest,
518 ValuesIn(DEVICES_PARAMS));
519
520 /*
521 * Check set audio scene
522 *
523 */
524 class AudioPolicySetAudioSceneTest : public AudioPolicyTest {};
525
526 HWTEST_P(AudioPolicySetAudioSceneTest, SetAudioScene, TestSize.Level1)
527 {
528 PolicyParam params = GetParam();
529 AudioScene scene = params.audioScene;
530 int32_t ret = AudioSystemManager::GetInstance()->SetAudioScene(scene);
531 EXPECT_EQ(SUCCESS, ret);
532 ret = AudioSystemManager::GetInstance()->SetAudioScene(AUDIO_SCENE_DEFAULT);
533 EXPECT_EQ(SUCCESS, ret);
534 }
535
536 INSTANTIATE_TEST_CASE_P(
537 SetAudioScene,
538 AudioPolicySetAudioSceneTest,
539 ValuesIn(AUDIO_SCENE_PARAMS));
540
541 /*
542 * Check get audio scene
543 *
544 */
545 class AudioPolicyGetAudioSceneTest : public AudioPolicyTest {};
546
547 HWTEST_P(AudioPolicyGetAudioSceneTest, GetAudioScene, TestSize.Level1)
548 {
549 PolicyParam params = GetParam();
550 AudioScene scene = params.audioScene;
551 EXPECT_EQ(AudioSystemManager::GetInstance()->GetAudioScene(), AUDIO_SCENE_DEFAULT);
552
553 int32_t ret = AudioSystemManager::GetInstance()->SetAudioScene(scene);
554 EXPECT_EQ(SUCCESS, ret);
555
556 EXPECT_EQ(AudioSystemManager::GetInstance()->GetAudioScene(), scene);
557
558 ret = AudioSystemManager::GetInstance()->SetAudioScene(AUDIO_SCENE_DEFAULT);
559 EXPECT_EQ(SUCCESS, ret);
560 }
561
562 INSTANTIATE_TEST_CASE_P(
563 GetAudioScene,
564 AudioPolicyGetAudioSceneTest,
565 ValuesIn(AUDIO_SCENE_PARAMS));
566 } // namespace V1_0
567 } // namespace AudioStandard
568 } // namespace OHOS
569