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 #include <gtest/gtest.h>
16 #include <servmgr_hdi.h>
17 #include <osal_mem.h>
18 #include "v1_0/ihostapd_interface.h"
19 #include "hostapd_callback_impl.h"
20 #include <securec.h>
21 
22 #define IFNAME "wlan0"
23 
24 #define HDF_LOG_TAG service_manager_test
25 using namespace testing::ext;
26 
27 namespace HdiHostapdDirectTest {
28 const char *g_hdiServiceNameHostapd = "hostapd_interface_service";
29 
30 class HdfHostapdHostDirectTest : public testing::Test {
31 public:
32     static void SetUpTestCase();
33     static void TearDownTestCase();
34     void SetUp();
35     void TearDown();
36 };
37 
38 static struct IHostapdInterface *g_hostapdObj = nullptr;
39 struct IHostapdCallback *g_hostapdCallbackObj = nullptr;
SetUpTestCase()40 void HdfHostapdHostDirectTest::SetUpTestCase()
41 {
42     g_hostapdObj = IHostapdInterfaceGetInstance(g_hdiServiceNameHostapd, true);
43     g_hostapdCallbackObj = HostapdCallbackServiceGet();
44     ASSERT_TRUE(g_hostapdObj != nullptr);
45     ASSERT_TRUE(g_hostapdCallbackObj != nullptr);
46     printf("hostapd_interface_service start successful.");
47 }
48 
TearDownTestCase()49 void HdfHostapdHostDirectTest::TearDownTestCase()
50 {
51     IHostapdInterfaceReleaseInstance(g_hdiServiceNameHostapd, g_hostapdObj, true);
52     HostapdCallbackServiceRelease(g_hostapdCallbackObj);
53     printf("hostapd_interface_service stop successful.");
54 }
55 
SetUp()56 void HdfHostapdHostDirectTest::SetUp()
57 {
58 }
59 
TearDown()60 void HdfHostapdHostDirectTest::TearDown()
61 {
62 }
63 
64 /**
65  * @tc.name: EnableApTest_001
66  * @tc.desc: Hostapd enable ap feature function test
67  * @tc.type: FUNC
68  * @tc.require:
69  */
70 HWTEST_F(HdfHostapdHostDirectTest, EnableApTest_001, TestSize.Level1)
71 {
72     int32_t rc = g_hostapdObj->EnableAp(g_hostapdObj, IFNAME, 1);
73     ASSERT_EQ(rc, HDF_FAILURE);
74     rc = g_hostapdObj->EnableAp(g_hostapdObj, nullptr, 1);
75     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
76 }
77 
78 /**
79  * @tc.name: DisableApTest_002
80  * @tc.desc: Hostapd disable ap feature function test
81  * @tc.type: FUNC
82  * @tc.require:
83  */
84 HWTEST_F(HdfHostapdHostDirectTest, DisableApTest_002, TestSize.Level1)
85 {
86     int32_t rc = g_hostapdObj->DisableAp(g_hostapdObj, IFNAME, 1);
87     ASSERT_EQ(rc, HDF_FAILURE);
88     rc = g_hostapdObj->DisableAp(g_hostapdObj, nullptr, 1);
89     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
90 }
91 
92 /**
93  * @tc.name: SetApPasswdTest_003
94  * @tc.desc: Hostapd hdi set ap passwd feature function test
95  * @tc.type: FUNC
96  * @tc.require:
97  */
98 HWTEST_F(HdfHostapdHostDirectTest, SetApPasswdTest_003, TestSize.Level1)
99 {
100     int32_t rc = g_hostapdObj->SetApPasswd(g_hostapdObj, IFNAME, "123123123", 1);
101     ASSERT_EQ(rc, HDF_FAILURE);
102     rc = g_hostapdObj->SetApPasswd(g_hostapdObj, nullptr, "123123123", 1);
103     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
104     rc = g_hostapdObj->SetApPasswd(g_hostapdObj, IFNAME, nullptr, 1);
105     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
106 }
107 
108 /**
109  * @tc.name: SetApNameTest_004
110  * @tc.desc: Hostapd hdi set ap name feature function test
111  * @tc.type: FUNC
112  * @tc.require:
113  */
114 HWTEST_F(HdfHostapdHostDirectTest, SetApNameTest_004, TestSize.Level1)
115 {
116     int32_t rc = g_hostapdObj->SetApName(g_hostapdObj, IFNAME, "SFG001", 1);
117     ASSERT_EQ(rc, HDF_FAILURE);
118     rc = g_hostapdObj->SetApName(g_hostapdObj, nullptr, "SFG001", 1);
119     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
120     rc = g_hostapdObj->SetApName(g_hostapdObj, IFNAME, nullptr, 1);
121     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
122 }
123 
124 /**
125  * @tc.name: SetApWpaValueTest_005
126  * @tc.desc: Hostapd hdi set ap WpaValue feature function test
127  * @tc.type: FUNC
128  * @tc.require:
129  */
130 HWTEST_F(HdfHostapdHostDirectTest, SetApWpaValueTest_005, TestSize.Level1)
131 {
132 }
133 
134 /**
135  * @tc.name: SetApBandTest_006
136  * @tc.desc: Hostapd hdi set ap band feature function test
137  * @tc.type: FUNC
138  * @tc.require:
139  */
140 HWTEST_F(HdfHostapdHostDirectTest, SetApBandTest_006, TestSize.Level1)
141 {
142     int32_t rc = g_hostapdObj->SetApBand(g_hostapdObj, IFNAME, 6, 1);
143     ASSERT_EQ(rc, HDF_FAILURE);
144     rc = g_hostapdObj->SetApBand(g_hostapdObj, nullptr, 1, 1);
145     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
146 }
147 
148 /**
149  * @tc.name: SetAp80211nTest_007
150  * @tc.desc: Hostapd hdi set ap 80211n feature function test
151  * @tc.type: FUNC
152  * @tc.require:
153  */
154 HWTEST_F(HdfHostapdHostDirectTest, SetAp80211nTest_007, TestSize.Level1)
155 {
156     int32_t rc = g_hostapdObj->SetAp80211n(g_hostapdObj, IFNAME, 1, 1);
157     ASSERT_EQ(rc, HDF_FAILURE);
158     rc = g_hostapdObj->SetAp80211n(g_hostapdObj, nullptr, 1, 1);
159     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
160 }
161 
162 /**
163  * @tc.name: SetApWmmTest_008
164  * @tc.desc: Hostapd hdi set ap Wmm feature function test
165  * @tc.type: FUNC
166  * @tc.require:
167  */
168 HWTEST_F(HdfHostapdHostDirectTest, SetApWmmTest_008, TestSize.Level1)
169 {
170     int32_t rc = g_hostapdObj->SetApWmm(g_hostapdObj, IFNAME, 1, 1);
171     ASSERT_EQ(rc, HDF_FAILURE);
172     rc = g_hostapdObj->SetApWmm(g_hostapdObj, nullptr, 1, 1);
173     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
174 }
175 
176 /**
177  * @tc.name: SetApChannelTest_009
178  * @tc.desc: Hostapd hdi set ap channel feature function test
179  * @tc.type: FUNC
180  * @tc.require:
181  */
182 HWTEST_F(HdfHostapdHostDirectTest, SetApChannelTest_009, TestSize.Level1)
183 {
184     int32_t rc = g_hostapdObj->SetApChannel(g_hostapdObj, IFNAME, 6, 1);
185     ASSERT_EQ(rc, HDF_FAILURE);
186     rc = g_hostapdObj->SetApChannel(g_hostapdObj, nullptr, 6, 1);
187     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
188 }
189 
190 /**
191  * @tc.name: SetApMaxConnTest_010
192  * @tc.desc: Hostapd hdi set ap MaxConn feature function test
193  * @tc.type: FUNC
194  * @tc.require:
195  */
196 HWTEST_F(HdfHostapdHostDirectTest, SetApMaxConnTest_010, TestSize.Level1)
197 {
198     int32_t rc = g_hostapdObj->SetApMaxConn(g_hostapdObj, IFNAME, 3, 1);
199     ASSERT_EQ(rc, HDF_FAILURE);
200     rc = g_hostapdObj->SetApMaxConn(g_hostapdObj, nullptr, 3, 1);
201     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
202 }
203 
204 /**
205  * @tc.name: SetMacFilterTest_011
206  * @tc.desc: Hostapd hdi set mac filter feature function test
207  * @tc.type: FUNC
208  * @tc.require:
209  */
210 HWTEST_F(HdfHostapdHostDirectTest, SetMacFilterTest_011, TestSize.Level1)
211 {
212     int32_t rc = g_hostapdObj->SetMacFilter(g_hostapdObj, IFNAME, "34:3a:20:32:fb:31", 1);
213     ASSERT_EQ(rc, HDF_FAILURE);
214     rc = g_hostapdObj->SetMacFilter(g_hostapdObj, nullptr, "34:3a:20:32:fb:31", 2);
215     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
216     rc = g_hostapdObj->SetMacFilter(g_hostapdObj, IFNAME, nullptr, 1);
217     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
218 }
219 
220 /**
221  * @tc.name: DelMacFilterTest_012
222  * @tc.desc: Hostapd hdi del mac filter feature function test
223  * @tc.type: FUNC
224  * @tc.require:
225  */
226 HWTEST_F(HdfHostapdHostDirectTest, DelMacFilterTest_012, TestSize.Level1)
227 {
228     int32_t rc = g_hostapdObj->DelMacFilter(g_hostapdObj, IFNAME, "34:3a:20:32:fb:31", 1);
229     ASSERT_EQ(rc, HDF_FAILURE);
230     rc = g_hostapdObj->DelMacFilter(g_hostapdObj, nullptr, "34:3a:20:32:fb:31", 1);
231     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
232     rc = g_hostapdObj->DelMacFilter(g_hostapdObj, IFNAME, nullptr, 1);
233     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
234 }
235 
236 /**
237  * @tc.name: GetStaInfosTest_013
238  * @tc.desc: Hostapd hdi get sta infos feature function test
239  * @tc.type: FUNC
240  * @tc.require:
241  */
242 HWTEST_F(HdfHostapdHostDirectTest, GetStaInfosTest_013, TestSize.Level1)
243 {
244     char *buf = (char *)calloc(4096 * 10, sizeof(char));
245     const uint32_t bufLen = 4096*10;
246     const int32_t size = 1024;
247     int32_t rc = g_hostapdObj->GetStaInfos(g_hostapdObj, IFNAME, buf, bufLen, size, 1);
248     ASSERT_EQ(rc, HDF_FAILURE);
249     rc = g_hostapdObj->GetStaInfos(g_hostapdObj, nullptr, buf, bufLen, size, 1);
250     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
251     rc = g_hostapdObj->GetStaInfos(g_hostapdObj, IFNAME, nullptr, bufLen, size, 1);
252     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
253 }
254 
255 /**
256  * @tc.name: DisassociateStaTest_014
257  * @tc.desc: Hostapd hdi disassociate sta feature function test
258  * @tc.type: FUNC
259  * @tc.require:
260  */
261 HWTEST_F(HdfHostapdHostDirectTest, DisassociateStaTest_014, TestSize.Level1)
262 {
263     int32_t rc = g_hostapdObj->DisassociateSta(g_hostapdObj, IFNAME, "34:3a:20:32:fb:31", 1);
264     ASSERT_EQ(rc, HDF_FAILURE);
265     rc = g_hostapdObj->DisassociateSta(g_hostapdObj, nullptr, "34:3a:20:32:fb:31", 1);
266     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
267     rc = g_hostapdObj->DisassociateSta(g_hostapdObj, IFNAME, nullptr, 1);
268     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
269 }
270 
271 /**
272  * @tc.name: HostApdShellCmdTest_015
273  * @tc.desc: Wifi hdi HostApdShellCmd function test
274  * @tc.type: FUNC
275  * @tc.require:
276  */
277 HWTEST_F(HdfHostapdHostDirectTest, HostApdShellCmdTest_015, TestSize.Level1)
278 {
279     int32_t rc = g_hostapdObj->HostApdShellCmd(g_hostapdObj, IFNAME, "");
280     ASSERT_EQ(rc, HDF_FAILURE);
281     rc = g_hostapdObj->HostApdShellCmd(g_hostapdObj, nullptr, "");
282     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
283     rc = g_hostapdObj->HostApdShellCmd(g_hostapdObj, IFNAME, nullptr);
284     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
285 }
286 
287 /**
288  * @tc.name: StartApTest_016
289  * @tc.desc: Wifi hdi StartAp function test
290  * @tc.type: FUNC
291  * @tc.require:
292  */
293 HWTEST_F(HdfHostapdHostDirectTest, StartApTest_016, TestSize.Level1)
294 {
295     int32_t rc = g_hostapdObj->StartAp(g_hostapdObj);
296     ASSERT_EQ(rc, HDF_FAILURE);
297 }
298 
299 /**
300  * @tc.name: StartApWithCmdTest_017
301  * @tc.desc: Wifi hdi StartApWithCmd function test
302  * @tc.type: FUNC
303  * @tc.require:
304  */
305 HWTEST_F(HdfHostapdHostDirectTest, StartApWithCmdTest_017, TestSize.Level1)
306 {
307     int32_t rc = g_hostapdObj->StartApWithCmd(g_hostapdObj, IFNAME, 1);
308     ASSERT_EQ(rc, HDF_FAILURE);
309     rc = g_hostapdObj->StartApWithCmd(g_hostapdObj, nullptr, 1);
310     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
311 }
312 
313 /**
314  * @tc.name: StopApTest_018
315  * @tc.desc: Wifi hdi StopAp function test
316  * @tc.type: FUNC
317  * @tc.require:
318  */
319 HWTEST_F(HdfHostapdHostDirectTest, StopApTest_018, TestSize.Level1)
320 {
321     int32_t rc = g_hostapdObj->StopAp(g_hostapdObj);
322     ASSERT_EQ(rc, HDF_FAILURE);
323 }
324 
325 /**
326  * @tc.name: ReloadApConfigInfoTest_019
327  * @tc.desc: Wifi hdi ReloadApConfigInfo function test
328  * @tc.type: FUNC
329  * @tc.require:
330  */
331 HWTEST_F(HdfHostapdHostDirectTest, ReloadApConfigInfoTest_019, TestSize.Level1)
332 {
333     int32_t rc = g_hostapdObj->ReloadApConfigInfo(g_hostapdObj, IFNAME, 1);
334     ASSERT_EQ(rc, HDF_FAILURE);
335     rc = g_hostapdObj->ReloadApConfigInfo(g_hostapdObj, nullptr, 1);
336     ASSERT_EQ(rc, HDF_ERR_INVALID_PARAM);
337 }
338 };
339