1 /*
2 * Copyright (c) 2025 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 <cstring>
17 #include <gtest/gtest.h>
18 #include <securec.h>
19
20 #include "accesstoken_kit.h"
21 #include "br_proxy_ext_test_mock.h"
22 #include "br_proxy.c"
23 #include "message_handler.h"
24 #include "nativetoken_kit.h"
25 #include "softbus_adapter_mem.h"
26 #include "softbus_common.h"
27 #include "softbus_conn_interface.h"
28 #include "softbus_def.h"
29 #include "softbus_error_code.h"
30 #include "token_setproc.h"
31
32 using namespace testing;
33 using namespace testing::ext;
34
35 namespace OHOS {
36 #define CHANNEL_ID 5
37 #define CHANNEL_ID_ERR 0
38 #define SESSION_ID 2
39
40 class BrProxyExtTest : public testing::Test {
41 public:
BrProxyExtTest()42 BrProxyExtTest()
43 {}
~BrProxyExtTest()44 ~BrProxyExtTest()
45 {}
46 static void SetUpTestCase(void);
47 static void TearDownTestCase(void);
SetUp()48 void SetUp() override
49 {}
TearDown()50 void TearDown() override
51 {}
52 };
53
AddPermission()54 static void AddPermission()
55 {
56 uint64_t tokenId;
57 const char *perms[1];
58 perms[0] = OHOS_PERMISSION_ACCESS_BLUETOOTH;
59 NativeTokenInfoParams infoInstance = {
60 .dcapsNum = 0,
61 .permsNum = 1,
62 .aclsNum = 0,
63 .dcaps = nullptr,
64 .perms = perms,
65 .acls = nullptr,
66 .processName = "BrExProxyTest",
67 .aplStr = "system_basic",
68 };
69 tokenId = GetAccessTokenId(&infoInstance);
70 SetSelfTokenID(tokenId);
71 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
72 }
73
SetUpTestCase(void)74 void BrProxyExtTest::SetUpTestCase(void)
75 {
76 AddPermission();
77 NiceMock<BrProxyExtInterfaceMock> brProxyExtMock;
78 EXPECT_CALL(brProxyExtMock, CreateSoftBusList).WillOnce(Return(nullptr));
79 TransClientInit();
80 }
81
TearDownTestCase(void)82 void BrProxyExtTest::TearDownTestCase(void)
83 {
84 }
85
86 BrProxyChannelInfo g_channelInfo = {
87 .peerBRMacAddr = "AA:BB:CC:AA:BB:CC",
88 .peerBRUuid = "AAAAAAAA-BBBB-CCCC-AAAA-BBBBBBBBBBBB",
89 .recvPri = 1,
90 .recvPriSet = true,
91 };
92
onChannelOpened(int32_t sessionId,int32_t channelId,int32_t result)93 static int32_t onChannelOpened(int32_t sessionId, int32_t channelId, int32_t result)
94 {
95 return SOFTBUS_OK;
96 }
97
onDataReceived(int32_t channelId,const char * data,uint32_t dataLen)98 static void onDataReceived(int32_t channelId, const char *data, uint32_t dataLen)
99 {
100 }
101
onChannelStatusChanged(int32_t channelId,int32_t state)102 static void onChannelStatusChanged(int32_t channelId, int32_t state)
103 {
104 }
105
106 static IBrProxyListener g_listener = {
107 .onChannelOpened = onChannelOpened,
108 .onDataReceived = onDataReceived,
109 .onChannelStatusChanged = onChannelStatusChanged,
110 };
111
112 /**
113 * @tc.name: BrProxyExtTest000
114 * @tc.desc: BrProxyExtTest000, use the wrong parameter.
115 * @tc.type: FUNC
116 * @tc.require:
117 */
118 HWTEST_F(BrProxyExtTest, BrProxyExtTest000, TestSize.Level1)
119 {
120 int32_t ret = ClientDeleteChannelFromList(0, nullptr, nullptr);
121 EXPECT_EQ(SOFTBUS_NO_INIT, ret);
122 ret = ClientUpdateList(nullptr, nullptr, 0);
123 EXPECT_EQ(SOFTBUS_NO_INIT, ret);
124 ret = ClientQueryList(0, nullptr, nullptr, nullptr);
125 EXPECT_EQ(SOFTBUS_NO_INIT, ret);
126 ret = ClientRecordListenerState(0, CHANNEL_STATE, true);
127 EXPECT_EQ(SOFTBUS_NO_INIT, ret);
128 ret = IsChannelValid(CHANNEL_ID_ERR);
129 EXPECT_EQ(false, ret);
130 ret = ClientTransBrProxyChannelChange(CHANNEL_ID_ERR, 0);
131 EXPECT_EQ(SOFTBUS_NO_INIT, ret);
132 ret = ClientTransBrProxyDataReceived(CHANNEL_ID_ERR, nullptr, 0);
133 EXPECT_EQ(SOFTBUS_NO_INIT, ret);
134 ret = SetListenerState(CHANNEL_ID_ERR, CHANNEL_STATE, true);
135 EXPECT_EQ(SOFTBUS_TRANS_INVALID_CHANNEL_ID, ret);
136 ret = SendBrProxyData(CHANNEL_ID_ERR, nullptr, 0);
137 EXPECT_EQ(SOFTBUS_TRANS_INVALID_CHANNEL_ID, ret);
138 ret = CloseBrProxy(CHANNEL_ID_ERR);
139 EXPECT_EQ(SOFTBUS_TRANS_INVALID_CHANNEL_ID, ret);
140 }
141
142 /**
143 * @tc.name: CheckMacFormatTest001
144 * @tc.desc: CheckMacFormatTest001, use the wrong parameter.
145 * @tc.type: FUNC
146 * @tc.require:
147 */
148 HWTEST_F(BrProxyExtTest, CheckMacFormatTest001, TestSize.Level1)
149 {
150 int32_t validChars = 0;
151 int32_t sepCount = 0;
152 char macAddr1[BR_MAC_LEN] = "H0:AA:CC:BB:AA:CC";
153 int32_t ret = CheckMacFormat(macAddr1, BR_MAC_LEN, &validChars, &sepCount);
154 EXPECT_EQ(false, ret);
155
156 char macAddr2[BR_MAC_LEN] = "FF:EE:DD:CC:BB:AA";
157 macAddr2[5] = '\0';
158 ret = CheckMacFormat(macAddr2, BR_MAC_LEN, &validChars, &sepCount);
159 EXPECT_EQ(false, ret);
160 }
161
162 /**
163 * @tc.name: IsMacValidTest001
164 * @tc.desc: IsMacValidTest001, use the wrong parameter.
165 * @tc.type: FUNC
166 * @tc.require:
167 */
168 HWTEST_F(BrProxyExtTest, IsMacValidTest001, TestSize.Level1)
169 {
170 int32_t ret = IsMacValid(nullptr);
171 EXPECT_EQ(false, ret);
172
173 char macAddr1[] = "H0:AA:CC:BB:DD:BB:AA";
174 ret = IsMacValid(macAddr1);
175 EXPECT_EQ(false, ret);
176
177 char macAddr2[BR_MAC_LEN] = "H0:FF:CC:AA:BB:CC";
178 ret = IsMacValid(macAddr2);
179 EXPECT_EQ(false, ret);
180
181 macAddr2[5] = ':';
182 ret = IsMacValid(macAddr2);
183 EXPECT_EQ(false, ret);
184 }
185
186 /**
187 * @tc.name: IsUuidValidTest001
188 * @tc.desc: IsUuidValidTest001, use the wrong parameter.
189 * @tc.type: FUNC
190 * @tc.require:
191 */
192 HWTEST_F(BrProxyExtTest, IsUuidValidTest001, TestSize.Level1)
193 {
194 char uuid1[] = "12345";
195 int32_t ret = IsUuidValid(uuid1);
196 EXPECT_EQ(false, ret);
197
198 char uuid2[] = "EEEEEEE-AAAAA-1111-BBBB-CCCCCCCCCCCC";
199 ret = IsUuidValid(uuid2);
200 EXPECT_EQ(false, ret);
201
202 char uuid3[] = "HAAAAAAA-0000-1111-2222-333333333333";
203 ret = IsUuidValid(uuid3);
204 EXPECT_EQ(false, ret);
205
206 char uuid4[] = "88888888-000000000-0000-888888888888";
207 ret = IsUuidValid(uuid4);
208 EXPECT_EQ(false, ret);
209 }
210
211 /**
212 * @tc.name: CheckOpenParmTest001
213 * @tc.desc: CheckOpenParmTest001, use the wrong parameter.
214 * @tc.type: FUNC
215 * @tc.require:
216 */
217 HWTEST_F(BrProxyExtTest, CheckOpenParmTest001, TestSize.Level1)
218 {
219 BrProxyChannelInfo info1 = {
220 .peerBRMacAddr = "F0:FA",
221 };
222 int32_t ret = CheckOpenParm(&info1, &g_listener);
223 EXPECT_EQ(SOFTBUS_TRANS_BR_PROXY_INVALID_PARAM, ret);
224
225 BrProxyChannelInfo info2 = {
226 .peerBRMacAddr = "FF:AA:CC:AA:BB:CC",
227 .peerBRUuid = "1134",
228 };
229 ret = CheckOpenParm(&info2, &g_listener);
230 EXPECT_EQ(SOFTBUS_TRANS_BR_PROXY_INVALID_PARAM, ret);
231 }
232
233 /**
234 * @tc.name: OpenBrProxyTest001
235 * @tc.desc: OpenBrProxyTest001, use the wrong parameter.
236 * @tc.type: FUNC
237 * @tc.require:
238 */
239 HWTEST_F(BrProxyExtTest, OpenBrProxyTest001, TestSize.Level1)
240 {
241 NiceMock<BrProxyExtInterfaceMock> brProxyExtMock;
242 EXPECT_CALL(brProxyExtMock, CreateSoftBusList).WillOnce(Return(nullptr));
243 int32_t ret = OpenBrProxy(0, &g_channelInfo, &g_listener);
244 EXPECT_EQ(SOFTBUS_CREATE_LIST_ERR, ret);
245 }
246
247 /**
248 * @tc.name: OpenBrProxyTest002
249 * @tc.desc: OpenBrProxyTest002, use the normal or wrong parameter.
250 * @tc.type: FUNC
251 * @tc.require:
252 */
253 HWTEST_F(BrProxyExtTest, OpenBrProxyTest002, TestSize.Level1)
254 {
255 SoftBusList *list = (SoftBusList *)SoftBusCalloc(sizeof(SoftBusList));
256 ASSERT_TRUE(list != nullptr);
257 SoftBusMutexAttr mutexAttr;
258 mutexAttr.type = SOFTBUS_MUTEX_RECURSIVE;
259 SoftBusMutexInit(&list->lock, &mutexAttr);
260 ListInit(&list->list);
261 NiceMock<BrProxyExtInterfaceMock> brProxyExtMock;
262 EXPECT_CALL(brProxyExtMock, CreateSoftBusList).WillRepeatedly(Return(list));
263 EXPECT_CALL(brProxyExtMock, ClientStubInit).WillRepeatedly(Return(SOFTBUS_OK));
264 EXPECT_CALL(brProxyExtMock, ClientRegisterBrProxyService).WillRepeatedly(Return(SOFTBUS_OK));
265 EXPECT_CALL(brProxyExtMock, ServerIpcOpenBrProxy).WillRepeatedly(Return(SOFTBUS_TRANS_SESSION_OPENING));
266 int32_t ret = OpenBrProxy(SESSION_ID, &g_channelInfo, &g_listener);
267 EXPECT_EQ(SOFTBUS_TRANS_SESSION_OPENING, ret);
268
269 ClientDeleteChannelFromList(CHANNEL_ID, g_channelInfo.peerBRMacAddr, g_channelInfo.peerBRUuid);
270 if (list != nullptr) {
271 SoftBusFree(list);
272 }
273 }
274
275 /**
276 * @tc.name: SoftbusErrConvertChannelStateTest001
277 * @tc.desc: SoftbusErrConvertChannelStateTest001, use the wrong parameter.
278 * @tc.type: FUNC
279 * @tc.require:
280 */
281 HWTEST_F(BrProxyExtTest, SoftbusErrConvertChannelStateTest001, TestSize.Level1)
282 {
283 int32_t err1 = SOFTBUS_CONN_BR_UNDERLAY_SOCKET_CLOSED;
284 int32_t err2 = 4123;
285 int32_t ret = SoftbusErrConvertChannelState(err1);
286 EXPECT_EQ(CHANNEL_WAIT_RESUME, ret);
287
288 ret = SoftbusErrConvertChannelState(err2);
289 EXPECT_EQ(CHANNEL_EXCEPTION_SOFTWARE_FAILED, ret);
290 }
291
292 /**
293 * @tc.name: IsProxyChannelEnabledTest001
294 * @tc.desc: IsProxyChannelEnabledTest001, use the wrong parameter.
295 * @tc.type: FUNC
296 * @tc.require:
297 */
298 HWTEST_F(BrProxyExtTest, IsProxyChannelEnabledTest001, TestSize.Level1)
299 {
300 NiceMock<BrProxyExtInterfaceMock> brProxyExtMock;
301 EXPECT_CALL(brProxyExtMock, ClientStubInit).WillOnce(Return(SOFTBUS_NO_INIT)).WillRepeatedly(Return(SOFTBUS_OK));
302 int32_t ret = IsProxyChannelEnabled(0);
303 EXPECT_EQ(false, ret);
304
305 EXPECT_CALL(brProxyExtMock, ClientRegisterService).WillOnce(Return(SOFTBUS_TRANS_INVALID_CHANNEL_ID));
306 ret = IsProxyChannelEnabled(0);
307 EXPECT_EQ(false, ret);
308
309 EXPECT_CALL(brProxyExtMock, ClientRegisterService).WillOnce(Return(SOFTBUS_OK));
310 EXPECT_CALL(brProxyExtMock, ServerIpcIsProxyChannelEnabled).WillOnce(Return(SOFTBUS_INVALID_PARAM));
311 ret = IsProxyChannelEnabled(0);
312 EXPECT_EQ(false, ret);
313 }
314 }