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 <climits>
17 #include <gtest/gtest.h>
18
19 #include "hdf_dlist.h"
20 #include "osal_mem.h"
21 #include "v4_0/iaudio_manager.h"
22
23 using namespace std;
24 using namespace testing::ext;
25 namespace {
26 static const uint32_t g_audioAdapterNumMax = 5;
27 struct IAudioManager *g_manager = nullptr;
28
29 class HdfAudioUtManagerTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp();
34 void TearDown();
35 void AudioAdapterDescriptorFree(struct AudioAdapterDescriptor *dataBlock, bool freeSelf);
36 void ReleaseAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen);
37 };
38
AudioAdapterDescriptorFree(struct AudioAdapterDescriptor * dataBlock,bool freeSelf)39 void HdfAudioUtManagerTest::AudioAdapterDescriptorFree(struct AudioAdapterDescriptor *dataBlock, bool freeSelf)
40 {
41 if (dataBlock == nullptr) {
42 return;
43 }
44
45 if (dataBlock->adapterName != nullptr) {
46 OsalMemFree(dataBlock->adapterName);
47 dataBlock->adapterName = nullptr;
48 }
49
50 if (dataBlock->ports != nullptr) {
51 OsalMemFree(dataBlock->ports);
52 }
53
54 if (freeSelf) {
55 OsalMemFree(dataBlock);
56 }
57 }
58
ReleaseAdapterDescs(struct AudioAdapterDescriptor ** descs,uint32_t descsLen)59 void HdfAudioUtManagerTest::ReleaseAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen)
60 {
61 if ((descsLen > 0) && (descs != nullptr) && ((*descs) != nullptr)) {
62 for (uint32_t i = 0; i < descsLen; i++) {
63 AudioAdapterDescriptorFree(&(*descs)[i], false);
64 }
65 OsalMemFree(*descs);
66 *descs = nullptr;
67 }
68 }
69
SetUp()70 void HdfAudioUtManagerTest::SetUp()
71 {
72 }
73
TearDown()74 void HdfAudioUtManagerTest::TearDown()
75 {
76 }
77
SetUpTestCase()78 void HdfAudioUtManagerTest::SetUpTestCase()
79 {
80 g_manager = IAudioManagerGet(false);
81 ASSERT_NE(g_manager, nullptr);
82 }
83
TearDownTestCase()84 void HdfAudioUtManagerTest::TearDownTestCase()
85 {
86 IAudioManagerRelease(g_manager, false);
87 }
88
89 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetVersionNull001, TestSize.Level1)
90 {
91 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->GetVersion(nullptr, nullptr, nullptr));
92 }
93
94 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetVersionNull002, TestSize.Level1)
95 {
96 uint32_t version;
97 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->GetVersion(nullptr, &version, &version));
98 }
99
100 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetVersionNull003, TestSize.Level1)
101 {
102 uint32_t version;
103 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->GetVersion(g_manager, nullptr, &version));
104 }
105
106 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetVersionNull004, TestSize.Level1)
107 {
108 uint32_t version;
109 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->GetVersion(g_manager, &version, nullptr));
110 }
111
112 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetVersionIsValid001, TestSize.Level1)
113 {
114 uint32_t majorVer;
115 uint32_t minorVer;
116 ASSERT_EQ(HDF_SUCCESS, g_manager->GetVersion(g_manager, &majorVer, &minorVer));
117 EXPECT_EQ(IAUDIO_MANAGER_MAJOR_VERSION, majorVer);
118 EXPECT_EQ(IAUDIO_MANAGER_MINOR_VERSION, minorVer);
119 }
120
121 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersNull001, TestSize.Level1)
122 {
123 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->GetAllAdapters(nullptr, nullptr, nullptr));
124 }
125
126 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersNull002, TestSize.Level1)
127 {
128 uint32_t size = 0;
129 struct AudioAdapterDescriptor descs;
130 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->GetAllAdapters(nullptr, &descs, &size));
131 }
132
133 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersNull003, TestSize.Level1)
134 {
135 uint32_t size = 0;
136 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->GetAllAdapters(g_manager, nullptr, &size));
137 }
138
139 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersParaInvalid001, TestSize.Level1)
140 {
141 uint32_t size = 0;
142 struct AudioAdapterDescriptor descs;
143 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->GetAllAdapters(g_manager, &descs, &size));
144 }
145
146 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersParaInvalid002, TestSize.Level1)
147 {
148 uint32_t size = UINT_MAX;
149 struct AudioAdapterDescriptor descs;
150 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->GetAllAdapters(g_manager, &descs, &size));
151 }
152
153 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersSizeIsValid_001, TestSize.Level1)
154 {
155 uint32_t size = g_audioAdapterNumMax;
156 struct AudioAdapterDescriptor *descs = (struct AudioAdapterDescriptor *)OsalMemCalloc(
157 sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
158 ASSERT_NE(nullptr, descs);
159 ASSERT_EQ(HDF_SUCCESS, g_manager->GetAllAdapters(g_manager, descs, &size));
160 EXPECT_GE(g_audioAdapterNumMax, size);
161 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
162 }
163
164 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerGetAllAdaptersDescsIsValid_001, TestSize.Level1)
165 {
166 uint32_t size = g_audioAdapterNumMax;
167 struct AudioAdapterDescriptor *descs = (struct AudioAdapterDescriptor *)OsalMemCalloc(
168 sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
169 ASSERT_NE(nullptr, descs);
170
171 ASSERT_EQ(HDF_SUCCESS, g_manager->GetAllAdapters(g_manager, descs, &size));
172 EXPECT_GE(g_audioAdapterNumMax, size);
173
174 for (uint32_t i = 0; i < size; i++) {
175 EXPECT_NE(nullptr, descs[i].adapterName);
176 }
177
178 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
179 }
180
181 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerLoadAdapterNull_001, TestSize.Level1)
182 {
183 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->LoadAdapter(nullptr, nullptr, nullptr));
184 }
185
186 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerLoadAdapterNull_002, TestSize.Level1)
187 {
188 struct AudioAdapterDescriptor descs;
189 struct IAudioAdapter *adapter = nullptr;
190 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->LoadAdapter(nullptr, &descs, &adapter));
191 }
192
193 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerLoadAdapterNull_003, TestSize.Level1)
194 {
195 struct IAudioAdapter *adapter = nullptr;
196 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->LoadAdapter(g_manager, nullptr, &adapter));
197 }
198
199 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerLoadAdapterNull_004, TestSize.Level1)
200 {
201 struct AudioAdapterDescriptor descs;
202 EXPECT_EQ(HDF_ERR_INVALID_PARAM, g_manager->LoadAdapter(g_manager, &descs, nullptr));
203 }
204
205 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerLoadAdapterSuccess_001, TestSize.Level1)
206 {
207 uint32_t size = g_audioAdapterNumMax;
208 struct IAudioAdapter *adapter = nullptr;
209
210 struct AudioAdapterDescriptor *descs = (struct AudioAdapterDescriptor *)OsalMemCalloc(
211 sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
212 ASSERT_NE(nullptr, descs);
213 ASSERT_EQ(HDF_SUCCESS, g_manager->GetAllAdapters(g_manager, descs, &size));
214 if (size > g_audioAdapterNumMax) {
215 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
216 ASSERT_GE(g_audioAdapterNumMax, size);
217 }
218
219 ASSERT_EQ(HDF_SUCCESS, g_manager->LoadAdapter(g_manager, &descs[0], &adapter));
220 EXPECT_TRUE(adapter != nullptr);
221 EXPECT_EQ(HDF_SUCCESS, g_manager->UnloadAdapter(g_manager, descs[0].adapterName));
222 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
223 }
224
225 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerLoadAdapterSuccess_002, TestSize.Level1)
226 {
227 uint32_t size = g_audioAdapterNumMax;
228 struct IAudioAdapter *firstAdapter = nullptr;
229 struct IAudioAdapter *secondAdapter = nullptr;
230
231 struct AudioAdapterDescriptor *descs = (struct AudioAdapterDescriptor *)OsalMemCalloc(
232 sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
233 ASSERT_NE(nullptr, descs);
234 EXPECT_EQ(HDF_SUCCESS, g_manager->GetAllAdapters(g_manager, descs, &size));
235
236 if (size > g_audioAdapterNumMax) {
237 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
238 ASSERT_GE(g_audioAdapterNumMax, size);
239 }
240
241 EXPECT_EQ(HDF_SUCCESS, g_manager->LoadAdapter(g_manager, &descs[0], &firstAdapter));
242 EXPECT_TRUE(firstAdapter != nullptr);
243 EXPECT_EQ(HDF_SUCCESS, g_manager->LoadAdapter(g_manager, &descs[0], &secondAdapter));
244 EXPECT_TRUE(secondAdapter != nullptr);
245 EXPECT_EQ(HDF_SUCCESS, g_manager->UnloadAdapter(g_manager, descs[0].adapterName));
246 EXPECT_EQ(HDF_SUCCESS, g_manager->UnloadAdapter(g_manager, descs[0].adapterName));
247
248 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
249 }
250
251 HWTEST_F(HdfAudioUtManagerTest, HdfAudioManagerReleaseAudioManagerObjectNull_001, TestSize.Level1)
252 {
253 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, g_manager->ReleaseAudioManagerObject(nullptr));
254 }
255 }