1 /*
2 * Copyright (c) 2022-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 <gtest/gtest.h>
17 #include <securec.h>
18
19 #include "bus_center_event.h"
20 #include "bus_center_manager.h"
21 #include "lnn_local_net_ledger.h"
22 #include "lnn_net_builder.h"
23 #include "lnn_net_builder_process.h"
24 #include "message_handler.h"
25 #include "softbus_common.h"
26 #include "softbus_error_code.h"
27
28 constexpr char NETWORKID[] = "ABCDEFG";
29 constexpr char OLD_NETWORKID[] = "ABCDEFG";
30 constexpr char MASTER_UDID[] = "0123456";
31 constexpr uint16_t CONN_FSM_ID = 1;
32 constexpr int32_t MASTER_WEIGHT = 1;
33 constexpr uint32_t TYPE_LEN = 1;
34 constexpr uint32_t TYPE_LENTH = 7;
35 constexpr char IP[IP_STR_MAX_LEN] = "127.0.0.1";
36 constexpr uint16_t PORT = 1000;
37 constexpr char PEERUID[MAX_ACCOUNT_HASH_LEN] = "021315ASD";
38 constexpr uint8_t MSG[] = "123456BNHFCF";
39 constexpr int64_t AUTH_ID = 10;
40 constexpr uint32_t REQUEST_ID = 10;
41 constexpr uint16_t CHANNEL_ID = 2050;
42
43 #define SOFTBUS_SUB_SYSTEM 203
44 #define SOFTBUS_AUTH_MODULE 3
45 #define HICHAIN_ERROR_KEY_NOEXIST (-((SOFTBUS_SUB_SYSTEM << 21) | (SOFTBUS_AUTH_MODULE << 16) | 0x0101))
46
47 namespace OHOS {
48 using namespace testing::ext;
49
50 class LNNNetBuilderTest : public testing::Test {
51 public:
52 static void SetUpTestCase();
53 static void TearDownTestCase();
54 void SetUp();
55 void TearDown();
56 };
57
SetUpTestCase()58 void LNNNetBuilderTest::SetUpTestCase()
59 {
60 LooperInit();
61 }
62
TearDownTestCase()63 void LNNNetBuilderTest::TearDownTestCase()
64 {
65 LooperDeinit();
66 }
67
SetUp()68 void LNNNetBuilderTest::SetUp()
69 {
70 LnnInitBusCenterEvent();
71 }
72
TearDown()73 void LNNNetBuilderTest::TearDown()
74 {
75 LnnDeinitNetBuilder();
76 LnnDeinitBusCenterEvent();
77 }
78
OnLnnServerJoinExtCb(const ConnectionAddr * addr,int32_t returnRet)79 static void OnLnnServerJoinExtCb(const ConnectionAddr *addr, int32_t returnRet)
80 {
81 (void)addr;
82 return;
83 }
84
85 /*
86 * @tc.name: LNN_NOTIFY_DISCOVERY_DEVICE_TEST_001
87 * @tc.desc: test LnnNotifyDiscoveryDevice
88 * @tc.type: FUNC
89 * @tc.require: I5PRUD
90 */
91 HWTEST_F(LNNNetBuilderTest, LNN_NOTIFY_DISCOVERY_DEVICE_TEST_001, TestSize.Level0)
92 {
93 ConnectionAddr target = { .type = CONNECTION_ADDR_WLAN, .info.ip.port = PORT };
94 LnnDfxDeviceInfoReport infoReport;
95 (void)memset_s(&infoReport, sizeof(LnnDfxDeviceInfoReport), 0, sizeof(LnnDfxDeviceInfoReport));
96 memcpy_s(target.peerUid, MAX_ACCOUNT_HASH_LEN, PEERUID, strlen(PEERUID));
97 memcpy_s(target.info.ip.ip, IP_STR_MAX_LEN, IP, strlen(IP));
98 int32_t ret = LnnNotifyDiscoveryDevice(&target, &infoReport, false);
99 EXPECT_TRUE(ret != SOFTBUS_OK);
100 ret = LnnInitNetBuilder();
101 EXPECT_TRUE(ret == SOFTBUS_OK);
102 ret = LnnNotifyDiscoveryDevice(nullptr, &infoReport, false);
103 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
104 }
105
106 /*
107 * @tc.name: LNN_REQUEST_LEAVE_BY_ADDRTYPE_TEST_001
108 * @tc.desc: test LnnRequestLeaveByAddrType
109 * @tc.type: FUNC
110 * @tc.require: I5PRUD
111 */
112 HWTEST_F(LNNNetBuilderTest, LNN_REQUEST_LEAVE_BY_ADDRTYPE_TEST_001, TestSize.Level0)
113 {
114 const bool type[CONNECTION_ADDR_MAX] = { true, true, true, true, true };
115 int32_t ret = LnnRequestLeaveByAddrType(type, CONNECTION_ADDR_MAX);
116 EXPECT_TRUE(ret != SOFTBUS_OK);
117 ret = LnnInitNetBuilder();
118 EXPECT_TRUE(ret == SOFTBUS_OK);
119 ret = LnnRequestLeaveByAddrType(nullptr, TYPE_LENTH);
120 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
121 ret = LnnRequestLeaveByAddrType(type, TYPE_LEN);
122 EXPECT_TRUE(ret != SOFTBUS_OK);
123 ret = LnnRequestLeaveByAddrType(type, TYPE_LENTH);
124 EXPECT_TRUE(ret == SOFTBUS_OK);
125 }
126
127 /*
128 * @tc.name: LNN_REQUEST_LEAVE_SPECIFIC_TEST_001
129 * @tc.desc: test LnnRequestLeaveSpecific
130 * @tc.type: FUNC
131 * @tc.require: I5PRUD
132 */
133 HWTEST_F(LNNNetBuilderTest, LNN_REQUEST_LEAVE_SPECIFIC_TEST_001, TestSize.Level0)
134 {
135 char *networkId = nullptr;
136 int32_t ret = LnnRequestLeaveSpecific(networkId, CONNECTION_ADDR_WLAN);
137 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
138 ret = LnnRequestLeaveSpecific(NETWORKID, CONNECTION_ADDR_WLAN);
139 EXPECT_TRUE(ret == SOFTBUS_NO_INIT);
140 ret = LnnInitNetBuilder();
141 EXPECT_TRUE(ret == SOFTBUS_OK);
142 ret = LnnRequestLeaveSpecific(NETWORKID, CONNECTION_ADDR_WLAN);
143 EXPECT_TRUE(ret == SOFTBUS_OK);
144 }
145
146 /*
147 * @tc.name: LNN_REQUEST_LEAVE_INVALID_CONN_TEST_001
148 * @tc.desc: test LnnRequestLeaveInvalidConn
149 * @tc.type: FUNC
150 * @tc.require: I5PRUD
151 */
152 HWTEST_F(LNNNetBuilderTest, LNN_REQUEST_LEAVE_INVALID_CONN_TEST_001, TestSize.Level0)
153 {
154 int32_t ret = LnnRequestLeaveInvalidConn(OLD_NETWORKID, CONNECTION_ADDR_WLAN, NETWORKID);
155 EXPECT_TRUE(ret != SOFTBUS_OK);
156 ret = LnnInitNetBuilder();
157 EXPECT_TRUE(ret == SOFTBUS_OK);
158 ret = LnnRequestLeaveInvalidConn(OLD_NETWORKID, CONNECTION_ADDR_WLAN, NETWORKID);
159 EXPECT_TRUE(ret == SOFTBUS_OK);
160 }
161
162 /*
163 * @tc.name: LNN_REQUEST_CLEAN_CONN_FSM_TEST_001
164 * @tc.desc: test LnnRequestCleanConnFsm
165 * @tc.type: FUNC
166 * @tc.require: I5PRUD
167 */
168 HWTEST_F(LNNNetBuilderTest, LNN_REQUEST_CLEAN_CONN_FSM_TEST_001, TestSize.Level0)
169 {
170 int32_t ret = LnnRequestCleanConnFsm(CONN_FSM_ID);
171 EXPECT_TRUE(ret != SOFTBUS_OK);
172 ret = LnnInitNetBuilder();
173 EXPECT_TRUE(ret == SOFTBUS_OK);
174 ret = LnnRequestCleanConnFsm(CONN_FSM_ID);
175 EXPECT_TRUE(ret == SOFTBUS_OK);
176 }
177
178 /*
179 * @tc.name: LNN_NOTIFY_NODE_STATE_CHANGED_TEST_001
180 * @tc.desc: test LnnNotifyNodeStateChanged
181 * @tc.type: FUNC
182 * @tc.require: I5PRUD
183 */
184 HWTEST_F(LNNNetBuilderTest, LNN_NOTIFY_NODE_STATE_CHANGED_TEST_001, TestSize.Level0)
185 {
186 ConnectionAddr target = { .type = CONNECTION_ADDR_WLAN, .info.ip.port = PORT };
187 memcpy_s(target.peerUid, MAX_ACCOUNT_HASH_LEN, PEERUID, strlen(PEERUID));
188 memcpy_s(target.info.ip.ip, IP_STR_MAX_LEN, IP, strlen(IP));
189 int32_t ret = LnnNotifyNodeStateChanged(&target);
190 EXPECT_TRUE(ret != SOFTBUS_OK);
191 ret = LnnInitNetBuilder();
192 EXPECT_TRUE(ret == SOFTBUS_OK);
193 ret = LnnNotifyNodeStateChanged(&target);
194 EXPECT_TRUE(ret == SOFTBUS_OK);
195 }
196
197 /*
198 * @tc.name: LNN_NOTIFY_MASTER_ELECT_TEST_001
199 * @tc.desc: test LnnNotifyMasterElect
200 * @tc.type: FUNC
201 * @tc.require: I5PRUD
202 */
203 HWTEST_F(LNNNetBuilderTest, LNN_NOTIFY_MASTER_ELECT_TEST_001, TestSize.Level0)
204 {
205 int32_t ret = LnnNotifyMasterElect(NETWORKID, MASTER_UDID, MASTER_WEIGHT);
206 EXPECT_TRUE(ret != SOFTBUS_OK);
207 ret = LnnInitNetBuilder();
208 EXPECT_TRUE(ret == SOFTBUS_OK);
209 char *networkId = nullptr;
210 ret = LnnNotifyMasterElect(networkId, MASTER_UDID, MASTER_WEIGHT);
211 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
212 ret = LnnNotifyMasterElect(NETWORKID, MASTER_UDID, MASTER_WEIGHT);
213 EXPECT_TRUE(ret == SOFTBUS_OK);
214 }
215
216 /*
217 * @tc.name: LNN_UPDATE_NODE_ADDR_TEST_001
218 * @tc.desc: test LnnUpdateNodeAddr
219 * @tc.type: FUNC
220 * @tc.require: I5PRUD
221 */
222 HWTEST_F(LNNNetBuilderTest, LNN_UPDATE_NODE_ADDR_TEST_001, TestSize.Level0)
223 {
224 char *addr = nullptr;
225 int32_t ret = LnnUpdateNodeAddr(addr);
226 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
227 ret = LnnInitNetBuilder();
228 EXPECT_TRUE(ret == SOFTBUS_OK);
229 ret = LnnUpdateNodeAddr(MASTER_UDID);
230 EXPECT_TRUE(ret == SOFTBUS_LOCK_ERR);
231 ret = LnnInitLocalLedger();
232 EXPECT_TRUE(ret == SOFTBUS_OK);
233 ret = LnnUpdateNodeAddr(MASTER_UDID);
234 EXPECT_TRUE(ret == SOFTBUS_OK);
235 }
236
237 /*
238 * @tc.name: LNN_SYNC_OFFLINE_COMPLETE_TEST_001
239 * @tc.desc: test LnnSyncOfflineComplete
240 * @tc.type: FUNC
241 * @tc.require:
242 */
243 HWTEST_F(LNNNetBuilderTest, LNN_SYNC_OFFLINE_COMPLETE_TEST_001, TestSize.Level0)
244 {
245 uint32_t len = TYPE_LEN;
246 LnnSyncOfflineComplete(LNN_INFO_TYPE_CAPABILITY, NETWORKID, MSG, len);
247 int32_t ret = LnnInitNetBuilder();
248 EXPECT_TRUE(ret == SOFTBUS_OK);
249 LnnSyncOfflineComplete(LNN_INFO_TYPE_CAPABILITY, nullptr, MSG, len);
250 LnnSyncOfflineComplete(LNN_INFO_TYPE_CAPABILITY, NETWORKID, MSG, len);
251 }
252
253 /*
254 * @tc.name: LNN_SERVER_LEAVE_TEST_001
255 * @tc.desc: test LnnServerLeave
256 * @tc.type: FUNC
257 * @tc.require:
258 */
259 HWTEST_F(LNNNetBuilderTest, LNN_SERVER_LEAVE_TEST_001, TestSize.Level0)
260 {
261 int32_t ret = LnnServerLeave(NETWORKID, "pkaName");
262 EXPECT_TRUE(ret == SOFTBUS_NO_INIT);
263 ret = LnnInitNetBuilder();
264 EXPECT_TRUE(ret == SOFTBUS_OK);
265 ret = LnnServerLeave(NETWORKID, "pkaName");
266 EXPECT_TRUE(ret == SOFTBUS_OK);
267 ret = LnnServerLeave(nullptr, "pkaName");
268 EXPECT_TRUE(ret == SOFTBUS_MALLOC_ERR);
269 }
270
271 /*
272 * @tc.name: LNN_SERVER_JOIN_TEST_001
273 * @tc.desc: test LnnServerJoin
274 * @tc.type: FUNC
275 * @tc.require:
276 */
277 HWTEST_F(LNNNetBuilderTest, LNN_SERVER_JOIN_TEST_001, TestSize.Level0)
278 {
279 ConnectionAddr addr = { .type = CONNECTION_ADDR_WLAN, .info.ip.port = PORT };
280 (void)strcpy_s(addr.info.ip.ip, IP_STR_MAX_LEN, IP);
281 int32_t ret = LnnServerJoin(&addr, "pkgName", false);
282 EXPECT_TRUE(ret == SOFTBUS_NO_INIT);
283 ret = LnnInitNetBuilder();
284 EXPECT_TRUE(ret == SOFTBUS_OK);
285 ret = LnnServerJoin(&addr, "pkgName", false);
286 EXPECT_TRUE(ret == SOFTBUS_OK);
287 ret = LnnServerJoin(nullptr, "pkgName", false);
288 EXPECT_TRUE(ret == SOFTBUS_MALLOC_ERR);
289 ret = LnnServerJoin(&addr, nullptr, false);
290 EXPECT_TRUE(ret == SOFTBUS_MALLOC_ERR);
291 }
292
293 /*
294 * @tc.name: LNN_SERVER_JOIN_EXT_TEST_001
295 * @tc.desc: test LnnServerJoinExt
296 * @tc.type: FUNC
297 * @tc.require:
298 */
299 HWTEST_F(LNNNetBuilderTest, LNN_SERVER_JOIN_EXT_TEST_001, TestSize.Level0)
300 {
301 ConnectionAddr addr = { .type = CONNECTION_ADDR_SESSION, .info.session.channelId = CHANNEL_ID };
302 LnnServerJoinExtCallBack cb = { .lnnServerJoinExtCallback = OnLnnServerJoinExtCb };
303 int32_t ret = LnnServerJoinExt(&addr, &cb);
304 EXPECT_TRUE(ret == SOFTBUS_NO_INIT);
305 ret = LnnInitNetBuilder();
306 EXPECT_TRUE(ret == SOFTBUS_OK);
307 ret = LnnServerJoinExt(&addr, &cb);
308 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
309 ret = LnnServerJoinExt(nullptr, &cb);
310 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
311 ret = LnnServerJoinExt(&addr, nullptr);
312 EXPECT_TRUE(ret == SOFTBUS_INVALID_PARAM);
313 }
314
315 /*
316 * @tc.name: FIND_REQUEST_ID_BY_ADDR_TEST_001
317 * @tc.desc: test FindRequestIdByAddr
318 * @tc.type: FUNC
319 * @tc.require:
320 */
321 HWTEST_F(LNNNetBuilderTest, FIND_REQUEST_ID_BY_ADDR_TEST_001, TestSize.Level0)
322 {
323 ConnectionAddr addr = { .type = CONNECTION_ADDR_WLAN, .info.ip.port = PORT };
324 (void)strcpy_s(addr.info.ip.ip, IP_STR_MAX_LEN, IP);
325 uint32_t requestId;
326 uint32_t ret = LnnInitNetBuilder();
327 EXPECT_TRUE(ret == SOFTBUS_OK);
328 ret = FindRequestIdByAddr(nullptr, &requestId);
329 EXPECT_TRUE(ret != SOFTBUS_OK);
330 }
331
332 /*
333 * @tc.name: FIND_NODE_INFO_BY_RQUESTID_TEST_001
334 * @tc.desc: test FindNodeInfoByRquestId
335 * @tc.type: FUNC
336 * @tc.require:
337 */
338 HWTEST_F(LNNNetBuilderTest, FIND_NODE_INFO_BY_RQUESTID_TEST_001, TestSize.Level0)
339 {
340 ConnectionAddr addr = { .type = CONNECTION_ADDR_WLAN, .info.ip.port = PORT };
341 (void)strcpy_s(addr.info.ip.ip, IP_STR_MAX_LEN, IP);
342 int32_t ret = LnnInitNetBuilder();
343 EXPECT_TRUE(ret == SOFTBUS_OK);
344 NodeInfo *info = FindNodeInfoByRquestId(REQUEST_ID);
345 EXPECT_TRUE(info == nullptr);
346 }
347
348 /*
349 * @tc.name: LNN_GET_VERIFY_CALLBACK_TEST_001
350 * @tc.desc: test three verify callback
351 * @tc.type: FUNC
352 * @tc.require:
353 */
354 HWTEST_F(LNNNetBuilderTest, LNN_GET_VERIFY_CALLBACK_TEST_001, TestSize.Level0)
355 {
356 ConnectionAddr addr = { .type = CONNECTION_ADDR_WLAN, .info.ip.port = PORT };
357 (void)strcpy_s(addr.info.ip.ip, IP_STR_MAX_LEN, IP);
358 NodeInfo *info = nullptr;
359 NodeInfo info1;
360 int32_t ret = LnnInitNetBuilder();
361 EXPECT_TRUE(ret == SOFTBUS_OK);
362 AuthVerifyCallback *authVerifyCallback = LnnGetVerifyCallback();
363 AuthHandle authHandle = { .authId = AUTH_ID, .type = AUTH_LINK_TYPE_WIFI };
364 authVerifyCallback->onVerifyPassed(REQUEST_ID, authHandle, info);
365 authVerifyCallback->onVerifyPassed(REQUEST_ID, authHandle, &info1);
366 authVerifyCallback = LnnGetReAuthVerifyCallback();
367 authVerifyCallback->onVerifyPassed(REQUEST_ID, authHandle, info);
368 authVerifyCallback->onVerifyPassed(REQUEST_ID, authHandle, &info1);
369 authVerifyCallback->onVerifyFailed(REQUEST_ID, SOFTBUS_OK);
370 authVerifyCallback->onVerifyFailed(REQUEST_ID, HICHAIN_ERROR_KEY_NOEXIST);
371 }
372
373 /*
374 * @tc.name: LNN_NOTIFY_AUTH_HANDLE_LEAVELNN_TEST_001
375 * @tc.desc: lnn notify auth handle leave lnn test
376 * @tc.type: FUNC
377 * @tc.require:
378 */
379 HWTEST_F(LNNNetBuilderTest, LNN_NOTIFY_AUTH_HANDLE_LEAVELNN_TEST_001, TestSize.Level0)
380 {
381 AuthHandle authHandle = { .authId = AUTH_ID, .type = AUTH_LINK_TYPE_WIFI };
382 int32_t ret = LnnNotifyAuthHandleLeaveLNN(authHandle);
383 EXPECT_TRUE(ret != SOFTBUS_OK);
384 ret = LnnInitNetBuilder();
385 EXPECT_TRUE(ret == SOFTBUS_OK);
386 ret = LnnNotifyAuthHandleLeaveLNN(authHandle);
387 EXPECT_TRUE(ret == SOFTBUS_OK);
388 }
389 } // namespace OHOS
390