1 /*
2 * Copyright (c) 2023-2024 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 HdfAudioUtManagerTestAdditional : 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 HdfAudioUtManagerTestAdditional::AudioAdapterDescriptorFree(struct AudioAdapterDescriptor *dataBlock,
40 bool freeSelf)
41 {
42 if (dataBlock == nullptr) {
43 return;
44 }
45
46 if (dataBlock->adapterName != nullptr) {
47 OsalMemFree(dataBlock->adapterName);
48 dataBlock->adapterName = nullptr;
49 }
50
51 if (dataBlock->ports != nullptr) {
52 OsalMemFree(dataBlock->ports);
53 }
54
55 if (freeSelf) {
56 OsalMemFree(dataBlock);
57 }
58 }
59
ReleaseAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen)60 void HdfAudioUtManagerTestAdditional::ReleaseAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen)
61 {
62 if ((descsLen > 0) && (descs != nullptr) && ((*descs) != nullptr)) {
63 for (uint32_t i = 0; i < descsLen; i++) {
64 AudioAdapterDescriptorFree(&(*descs)[i], false);
65 }
66 OsalMemFree(*descs);
67 *descs = nullptr;
68 }
69 }
70
SetUp()71 void HdfAudioUtManagerTestAdditional::SetUp() {}
72
TearDown()73 void HdfAudioUtManagerTestAdditional::TearDown() {}
74
SetUpTestCase()75 void HdfAudioUtManagerTestAdditional::SetUpTestCase()
76 {
77 g_manager = IAudioManagerGet(false);
78 ASSERT_NE(g_manager, nullptr);
79 }
80
TearDownTestCase()81 void HdfAudioUtManagerTestAdditional::TearDownTestCase() { IAudioManagerRelease(g_manager, false); }
82
83 /**
84 * @tc.number : SUB_Driver_Audio_GetAllAdapters_0800
85 * @tc.name : testGetAllAdapters001
86 * @tc.desc : Reliability of function(GetAllAdapters)
87 */
HWTEST_F(HdfAudioUtManagerTestAdditional, testGetAllAdapters001, Function | MediumTest | Level1)88 HWTEST_F(HdfAudioUtManagerTestAdditional, testGetAllAdapters001, Function | MediumTest | Level1)
89 {
90 uint32_t size = g_audioAdapterNumMax;
91 struct AudioAdapterDescriptor *descs =
92 (struct AudioAdapterDescriptor *)OsalMemCalloc(sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
93 int i = 0;
94 int32_t ret = 0;
95 for (i = 0; i < 1000; i++) {
96 ret |= g_manager->GetAllAdapters(g_manager, descs, &size);
97 }
98 EXPECT_EQ(0, ret);
99 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
100 }
101 /**
102 * @tc.number : SUB_Driver_Audio_LoadAdapter_0700
103 * @tc.name : testLoadAdapter001
104 * @tc.desc : Reliability of function(LoadAdapter)
105 */
HWTEST_F(HdfAudioUtManagerTestAdditional, testLoadAdapter001, Function | MediumTest | Level1)106 HWTEST_F(HdfAudioUtManagerTestAdditional, testLoadAdapter001, Function | MediumTest | Level1)
107 {
108 uint32_t size = g_audioAdapterNumMax;
109 struct IAudioAdapter *adapter = nullptr;
110
111 struct AudioAdapterDescriptor *descs =
112 (struct AudioAdapterDescriptor *)OsalMemCalloc(sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
113 int i = 0;
114 int32_t ret = 0;
115 ASSERT_EQ(HDF_SUCCESS, g_manager->GetAllAdapters(g_manager, descs, &size));
116 if (size > g_audioAdapterNumMax) {
117 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
118 ASSERT_GE(g_audioAdapterNumMax, size);
119 }
120 for (i = 0; i < 1000; i++) {
121 ret |= g_manager->LoadAdapter(g_manager, descs, &adapter);
122 g_manager->UnloadAdapter(g_manager, descs[0].adapterName);
123 }
124 EXPECT_EQ(HDF_SUCCESS, ret);
125 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
126 }
127 /**
128 * @tc.number : SUB_Driver_Audio_UnloadAdapter_0300
129 * @tc.name : testUnloadAdapter001
130 * @tc.desc : Reliability of function(UnloadAdapter)
131 */
HWTEST_F(HdfAudioUtManagerTestAdditional, testUnloadAdapter001, Function | MediumTest | Level1)132 HWTEST_F(HdfAudioUtManagerTestAdditional, testUnloadAdapter001, Function | MediumTest | Level1)
133 {
134 uint32_t size = g_audioAdapterNumMax;
135 struct IAudioAdapter *adapter = nullptr;
136
137 struct AudioAdapterDescriptor *descs =
138 (struct AudioAdapterDescriptor *)OsalMemCalloc(sizeof(struct AudioAdapterDescriptor) * (g_audioAdapterNumMax));
139 int i = 0;
140 int32_t ret = 0;
141 ASSERT_EQ(HDF_SUCCESS, g_manager->GetAllAdapters(g_manager, descs, &size));
142 if (size > g_audioAdapterNumMax) {
143 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
144 ASSERT_GE(g_audioAdapterNumMax, size);
145 }
146 for (i = 0; i < 1000; i++) {
147 g_manager->LoadAdapter(g_manager, descs, &adapter);
148 ret |= g_manager->UnloadAdapter(g_manager, descs[0].adapterName);
149 }
150 EXPECT_EQ(HDF_SUCCESS, ret);
151 ReleaseAdapterDescs(&descs, g_audioAdapterNumMax);
152 }
153 /**
154 * @tc.number : SUB_Driver_Audio_ReleaseAudioManagerObject_0200
155 * @tc.name : testReleaseAudioManagerObject001
156 * @tc.desc : Reliability of function(ReleaseAudioManagerObject)
157 */
HWTEST_F(HdfAudioUtManagerTestAdditional, testReleaseAudioManagerObject001, Function | MediumTest | Level2)158 HWTEST_F(HdfAudioUtManagerTestAdditional, testReleaseAudioManagerObject001, Function | MediumTest | Level2)
159 {
160 int i = 0;
161 int32_t ret = 0;
162 for (i = 0; i < 1000; i++) {
163 ret |= g_manager->ReleaseAudioManagerObject(nullptr);
164 }
165 EXPECT_EQ(HDF_ERR_INVALID_OBJECT, ret);
166 }
167 } // namespace