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 }