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 <gtest/gtest.h>
17 #include "iservice_registry.h"
18 #include "system_ability_definition.h"
19
20 #include "audio_service_log.h"
21 #include "audio_errors.h"
22 #include "audio_system_manager.h"
23
24 #include "audio_manager_proxy.h"
25 #include "audio_manager_listener_stub.h"
26 #include "audio_process_proxy.h"
27 #include "audio_process_in_client.h"
28
29 using namespace testing::ext;
30
31 namespace OHOS {
32 namespace AudioStandard {
33 std::unique_ptr<AudioManagerProxy> audioManagerProxy;
34 std::shared_ptr<AudioProcessInClient> processClient_;
35 const int32_t TEST_RET_NUM = 0;
36 const int32_t RENDERER_FLAGS = 0;
37 constexpr int32_t ERROR_62980101 = -62980101;
38
39 class AudioServiceUnitTest : public testing::Test {
40 public:
41 static void SetUpTestCase(void);
42 static void TearDownTestCase(void);
43 void SetUp();
44 void TearDown();
45 };
46
47 class AudioParameterCallbackTest : public AudioParameterCallback {
OnAudioParameterChange(const std::string networkId,const AudioParamKey key,const std::string & condition,const std::string & value)48 virtual void OnAudioParameterChange(const std::string networkId, const AudioParamKey key,
49 const std::string& condition, const std::string& value) {}
50 };
51
SetUpTestCase(void)52 void AudioServiceUnitTest::SetUpTestCase(void)
53 {
54 // input testsuit setup step,setup invoked before all testcases
55 }
56
TearDownTestCase(void)57 void AudioServiceUnitTest::TearDownTestCase(void)
58 {
59 // input testsuit teardown step,teardown invoked after all testcases
60 }
61
SetUp(void)62 void AudioServiceUnitTest::SetUp(void)
63 {
64 // input testcase setup step,setup invoked before each testcases
65 }
66
TearDown(void)67 void AudioServiceUnitTest::TearDown(void)
68 {
69 // input testcase teardown step,teardown invoked after each testcases
70 }
71
72 /**
73 * @tc.name : Test AudioProcessProxy API
74 * @tc.type : FUNC
75 * @tc.number: AudioProcessProxy_001
76 * @tc.desc : Test AudioProcessProxy interface.
77 */
78 HWTEST(AudioServiceUnitTest, AudioProcessProxy_001, TestSize.Level1)
79 {
80 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
81 EXPECT_NE(nullptr, samgr);
82 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_DISTRIBUTED_SERVICE_ID);
83 EXPECT_NE(nullptr, object);
84 std::unique_ptr<AudioProcessProxy> audioProcessProxy = std::make_unique<AudioProcessProxy>(object);
85
86 int32_t ret = -1;
87 std::shared_ptr<OHAudioBuffer> buffer;
88 uint32_t spanSizeInFrame = 1000;
89 uint32_t totalSizeInFrame = spanSizeInFrame - 1;
90 uint32_t byteSizePerFrame = 1000;
91 buffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
92
93 ret=audioProcessProxy->ResolveBuffer(buffer);
94 EXPECT_LT(ret, TEST_RET_NUM);
95
96 ret = audioProcessProxy->Start();
97 EXPECT_LT(ret, TEST_RET_NUM);
98
99 bool isFlush = true;
100 ret = audioProcessProxy->Pause(isFlush);
101 EXPECT_LT(ret, TEST_RET_NUM);
102
103 ret = audioProcessProxy->Resume();
104 EXPECT_LT(ret, TEST_RET_NUM);
105
106 ret = audioProcessProxy->Stop();
107 EXPECT_LT(ret, TEST_RET_NUM);
108
109 ret = audioProcessProxy->RequestHandleInfo();
110 EXPECT_EQ(ret, SUCCESS);
111
112 ret = audioProcessProxy->Release();
113 EXPECT_LT(ret, TEST_RET_NUM);
114 }
115
116 /**
117 * @tc.name : Test AudioManagerProxy API
118 * @tc.type : FUNC
119 * @tc.number: AudioManagerProxy_001
120 * @tc.desc : Test AudioManagerProxy interface.
121 */
122 HWTEST(AudioServiceUnitTest, AudioManagerProxy_001, TestSize.Level1)
123 {
124 int32_t ret = -1;
125
126 auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
127 EXPECT_NE(nullptr, samgr);
128 sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_DISTRIBUTED_SERVICE_ID);
129 EXPECT_NE(nullptr, object);
130
131 audioManagerProxy = std::make_unique<AudioManagerProxy>(object);
132
133 bool isMute = true;
134 ret = audioManagerProxy->SetMicrophoneMute(isMute);
135 EXPECT_EQ(ret, SUCCESS);
136
137 ret = audioManagerProxy->RegiestPolicyProvider(object);
138 EXPECT_EQ(SUCCESS, ret);
139
140 bool state = false;
141 ret = audioManagerProxy->SetCaptureSilentState(state);
142 EXPECT_TRUE(ERROR_62980101 == ret || SUCCESS == ret);
143
144 bool result = audioManagerProxy->CreatePlaybackCapturerManager();
145 EXPECT_EQ(result, true);
146
147 int32_t deviceType = 1;
148 std::string sinkName = "test";
149 audioManagerProxy->SetOutputDeviceSink(deviceType, sinkName);
150 }
151
152 /**
153 * @tc.name : Test AudioManagerProxy API
154 * @tc.type : FUNC
155 * @tc.number: AudioManagerProxy_002
156 * @tc.desc : Test AudioManagerProxy interface.
157 */
158 HWTEST(AudioServiceUnitTest, AudioManagerProxy_002, TestSize.Level1)
159 {
160 int32_t ret = -1;
161
162 float volume = 0.1;
163 ret = audioManagerProxy->SetVoiceVolume(volume);
164
165 const std::string networkId = "LocalDevice";
166 const AudioParamKey key = AudioParamKey::VOLUME;
167 AudioVolumeType volumeType =AudioVolumeType::STREAM_MEDIA;
168 int32_t groupId = 0;
169 std::string condition = "EVENT_TYPE=1;VOLUME_GROUP_ID=" + std::to_string(groupId) + ";AUDIO_VOLUME_TYPE="
170 + std::to_string(volumeType) + ";";
171 std::string value = std::to_string(volume);
172 audioManagerProxy->SetAudioParameter(networkId, key, condition, value);
173 const std::string retStr = audioManagerProxy->GetAudioParameter(networkId, key, condition);
174 EXPECT_NE(retStr, value);
175
176 bool connected = true;
177 audioManagerProxy->NotifyDeviceInfo(networkId, connected);
178 ret = audioManagerProxy->CheckRemoteDeviceState(networkId, DeviceRole::OUTPUT_DEVICE, true);
179 EXPECT_LT(ret, TEST_RET_NUM);
180 }
181
182 /**
183 * @tc.name : Test AudioManagerProxy API
184 * @tc.type : FUNC
185 * @tc.number: AudioManagerProxy_004
186 * @tc.desc : Test AudioManagerProxy interface.
187 */
188 HWTEST(AudioServiceUnitTest, AudioManagerProxy_004, TestSize.Level1)
189 {
190 std::vector<Library> libraries;
191 Library library = {};
192 library.name = "testname";
193 library.path ="test.so";
194 libraries.push_back(library);
195
196 std::vector<Effect> effects;
197 Effect effect = {};
198 effect.name = "test";
199 effect.libraryName = "test";
200 effects.push_back(effect);
201
202 std::vector<Effect> successEffects;
203 bool ret = audioManagerProxy->LoadAudioEffectLibraries(libraries, effects, successEffects);
204 EXPECT_EQ(ret, false);
205 }
206
207 /**
208 * @tc.name : Test AudioManagerListenerStub API
209 * @tc.type : FUNC
210 * @tc.number: AudioManagerListenerStub_001
211 * @tc.desc : Test AudioManagerListenerStub interface.
212 */
213 HWTEST(AudioServiceUnitTest, AudioManagerListenerStub_001, TestSize.Level1)
214 {
215 std::unique_ptr<AudioManagerListenerStub> audioManagerListenerStub = std::make_unique<AudioManagerListenerStub>();
216
217 const std::weak_ptr<AudioParameterCallback> callback = std::make_shared<AudioParameterCallbackTest>();
218 audioManagerListenerStub->SetParameterCallback(callback);
219 float volume = 0.1;
220 const std::string networkId = "LocalDevice";
221 const AudioParamKey key = AudioParamKey::VOLUME;
222 AudioVolumeType volumeType =AudioVolumeType::STREAM_MEDIA;
223 int32_t groupId = 0;
224 std::string condition = "EVENT_TYPE=1;VOLUME_GROUP_ID=" + std::to_string(groupId) + ";AUDIO_VOLUME_TYPE="
225 + std::to_string(volumeType) + ";";
226 std::string value = std::to_string(volume);
227 audioManagerListenerStub->OnAudioParameterChange(networkId, key, condition, value);
228 EXPECT_NE(value, "");
229 }
230
231
232 /**
233 * @tc.name : Test AudioProcessInClientInner API
234 * @tc.type : FUNC
235 * @tc.number: AudioProcessInClientInner_001
236 * @tc.desc : Test AudioProcessInClientInner interface using unsupported parameters.
237 */
238 HWTEST(AudioServiceUnitTest, AudioProcessInClientInner_001, TestSize.Level1)
239 {
240 AudioProcessConfig config;
241 config.appInfo.appPid = getpid();
242 config.appInfo.appUid = getuid();
243
244 config.audioMode = AUDIO_MODE_PLAYBACK;
245
246 config.rendererInfo.contentType = CONTENT_TYPE_MUSIC;
247 config.rendererInfo.streamUsage = STREAM_USAGE_MEDIA;
248 config.rendererInfo.rendererFlags = RENDERER_FLAGS;
249
250 config.streamInfo.channels = STEREO;
251 config.streamInfo.encoding = ENCODING_PCM;
252 config.streamInfo.format = SAMPLE_S16LE;
253 config.streamInfo.samplingRate = SAMPLE_RATE_64000;
254
255 processClient_ = AudioProcessInClient::Create(config);
256 EXPECT_EQ(processClient_, nullptr);
257 }
258
259 /**
260 * @tc.name : Test AudioDeviceDescriptor API
261 * @tc.type : FUNC
262 * @tc.number: AudioDeviceDescriptor_001
263 * @tc.desc : Test AudioDeviceDescriptor interface.
264 */
265 HWTEST(AudioServiceUnitTest, AudioDeviceDescriptor_001, TestSize.Level1)
266 {
267 DeviceType type = DeviceType::DEVICE_TYPE_SPEAKER;
268 DeviceRole role = DeviceRole::OUTPUT_DEVICE;
269 int32_t interruptGroupId = 1;
270 int32_t volumeGroupId = 1;
271 std::string networkId = "LocalDevice";
272 std::unique_ptr<AudioDeviceDescriptor> audioDeviceDescriptor =
273 std::make_unique<AudioDeviceDescriptor>(type, role, interruptGroupId, volumeGroupId, networkId);
274 EXPECT_NE(audioDeviceDescriptor, nullptr);
275
276 AudioDeviceDescriptor deviceDescriptor;
277 deviceDescriptor.deviceType_ = type;
278 deviceDescriptor.deviceRole_ = role;
279 audioDeviceDescriptor = std::make_unique<AudioDeviceDescriptor>(deviceDescriptor);
280 EXPECT_NE(audioDeviceDescriptor, nullptr);
281
282 std::string deviceName = "";
283 std::string macAddress = "";
284 audioDeviceDescriptor->SetDeviceInfo(deviceName, macAddress);
285
286 DeviceStreamInfo audioStreamInfo = {
287 SAMPLE_RATE_48000,
288 ENCODING_PCM,
289 SAMPLE_S16LE,
290 STEREO
291 };
292 int32_t channelMask = 1;
293 audioDeviceDescriptor->SetDeviceCapability(audioStreamInfo, channelMask);
294
295 DeviceStreamInfo streamInfo = audioDeviceDescriptor->audioStreamInfo_;
296 EXPECT_EQ(streamInfo.channels, audioStreamInfo.channels);
297 EXPECT_EQ(streamInfo.encoding, audioStreamInfo.encoding);
298 EXPECT_EQ(streamInfo.format, audioStreamInfo.format);
299 EXPECT_EQ(streamInfo.samplingRate, audioStreamInfo.samplingRate);
300 }
301 } // namespace AudioStandard
302 } // namespace OHOS