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