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 
16 #include "hisysevent_mock.h"
17 #include "softbus_hisysevent_matcher.h"
18 #include "trans_event.h"
19 #include "trans_hisysevent_matcher.h"
20 #include "gtest/gtest.h"
21 
22 using namespace std;
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace OHOS {
27 class TransEventTest : public testing::Test { };
28 
29 /**
30  * @tc.name: TransEventTest001
31  * @tc.desc: Test trans event form size
32  * @tc.type: FUNC
33  * @tc.require: I8HA59
34  */
35 HWTEST_F(TransEventTest, TransEventTest001, TestSize.Level0)
36 {
37     TransEventExtra extra = {
38         .result = 1,
39         .errcode = 2233,
40         .socketName = "testSocket",
41         .dataType = 0, // invalid
42     };
43     constexpr int32_t VALID_EXTRA_SIZE = 4;  //result errcode socketName firstTokenId
44 
45     HiSysEventMock mock;
46     EXPECT_CALL(mock,
47         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), _,
48             ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
49         .Times(1);
50     TRANS_EVENT(EVENT_SCENE_OPEN_CHANNEL, EVENT_STAGE_OPEN_CHANNEL_START, extra);
51 }
52 
53 /**
54  * @tc.name: TransEventTest002
55  * @tc.desc: Test all valid trans event form items
56  * @tc.type: FUNC
57  * @tc.require: I8HA59
58  */
59 HWTEST_F(TransEventTest, TransEventTest002, TestSize.Level0)
60 {
61     TransEventExtra validExtra = {
62         .result = 1,
63         .errcode = 2,
64         .socketName = "testSocketName",
65         .dataType = 3,
66         .channelType = 4,
67         .laneId = 5,
68         .preferLinkType = 6,
69         .laneTransType = 7,
70         .channelId = 8,
71         .requestId = 9,
72         .connectionId = 10,
73         .linkType = 11,
74         .authId = 12,
75         .socketFd = 13,
76         .costTime = 14,
77         .channelScore = 15,
78         .peerChannelId = 16,
79         .btFlow = 17,
80         .peerNetworkId = "a8ynvpdaihw1f6nknjd2hkfhxljxypkr6kvjsbhnhpp16974uo4fvsrpfa6t50fm",
81         .peerUdid = "a8ynvpdaihw1f6nknjd2hkfhxljxypkr6kvjsbhnhpp16974uo4fvsrpfa6t50fm",
82         .peerDevVer = "NOH-AN00 peer_device_version",
83         .localUdid = "localpdaihw1f6nknjd2hkfhxljxypkr6kvjsbhnhpp16974uo4fvsrpfa6t50fm",
84         .callerPkg = "testCallerPkg",
85         .calleePkg = "testCalleePkg",
86         .firstTokenName = "testfirstToken",
87         .firstTokenId = 0,
88         .firstTokenType = 1,
89         .trafficStats = "localpdaihw1f6nknjd2hkfhxljxypkr6kvjsbhnhpp16974uo4fvsrpfa6t50fm",
90         .osType = 10,
91         .deviceState = 1,
92         .businessId = 1,
93         .businessType = 1,
94     };
95     constexpr int32_t VALID_EXTRA_SIZE = TRANS_ASSIGNER_SIZE;
96 
97     HiSysEventMock mock;
98     EXPECT_CALL(mock,
99         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR),
100             TransValidParamArrayMatcher(validExtra, VALID_EXTRA_SIZE), ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
101         .Times(1);
102     TRANS_EVENT(EVENT_SCENE_OPEN_CHANNEL, EVENT_STAGE_OPEN_CHANNEL_END, validExtra);
103 }
104 
105 /**
106  * @tc.name: TransEventTest003
107  * @tc.desc: Test all invalid trans event form items
108  * @tc.type: FUNC
109  * @tc.require: I8HA59
110  */
111 HWTEST_F(TransEventTest, TransEventTest003, TestSize.Level0)
112 {
113     TransEventExtra invalidExtra = {
114         .result = -1,  // valid
115         .errcode = -2, // valid
116         .socketName = "",
117         .dataType = -3,
118         .channelType = -4,
119         .laneId = -5,
120         .preferLinkType = -6,
121         .laneTransType = -7,
122         .channelId = -8,
123         .requestId = -9,
124         .connectionId = -10,
125         .linkType = -11,
126         .authId = -12,
127         .socketFd = -13,
128         .costTime = -14,
129         .channelScore = -15,
130         .peerChannelId = -16,
131         .btFlow = -17,
132         .peerNetworkId = "",
133         .peerUdid = "",
134         .peerDevVer = "",
135         .localUdid = "",
136         .callerPkg = "\0",
137         .calleePkg = nullptr,
138         .firstTokenName = "",
139         .firstTokenId = 0,
140         .firstTokenType = -1,
141     };
142     constexpr int32_t VALID_EXTRA_SIZE = 3; // result, errcode and firstTokenId is valid
143 
144     HiSysEventMock mock;
145     EXPECT_CALL(mock,
146         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR),
147             TransInvalidParamArrayMatcher(invalidExtra, VALID_EXTRA_SIZE), ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
148         .Times(1);
149     TRANS_EVENT(EVENT_SCENE_CLOSE_CHANNEL_ACTIVE, EVENT_STAGE_CLOSE_CHANNEL, invalidExtra);
150 }
151 
152 /**
153  * @tc.name: TransEventTest004
154  * @tc.desc: Test empty trans event form
155  * @tc.type: FUNC
156  * @tc.require: I8HA59
157  */
158 HWTEST_F(TransEventTest, TransEventTest004, TestSize.Level0)
159 {
160     TransEventExtra emptyExtra = { 0 };
161     constexpr int32_t VALID_EXTRA_SIZE = 3; // result, errcode and firstTokenId is valid
162 
163     HiSysEventMock mock;
164     EXPECT_CALL(mock,
165         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR),
166             TransInvalidParamArrayMatcher(emptyExtra, VALID_EXTRA_SIZE), ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
167         .Times(1);
168     TRANS_EVENT(EVENT_SCENE_CLOSE_CHANNEL_PASSIVE, EVENT_STAGE_CLOSE_CHANNEL, emptyExtra);
169 }
170 
171 /**
172  * @tc.name: TransEventTest005
173  * @tc.desc: Test trans event form size
174  * @tc.type: FUNC
175  * @tc.require: I8HA59
176  */
177 HWTEST_F(TransEventTest, TransEventTest005, TestSize.Level0)
178 {
179     TransAlarmExtra extra = {
180         .conflictName = NULL,
181         .conflictedName = NULL,
182         .occupyedName = NULL,
183         .permissionName = NULL,
184         .sessionName = NULL,
185         .result = 1,
186         .errcode = 2233,
187         .minBw = 32,
188         .linkType = 0, // invalid
189     };
190     constexpr int32_t VALID_EXTRA_SIZE = 3;
191 
192     HiSysEventMock mock;
193     EXPECT_CALL(mock,
194         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(CONTROL_ALARM_EVENT_NAME),
195             Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), _, ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
196         .Times(1);
197     TRANS_ALARM(BANDWIDTH_INSUFFICIANT_ALARM, CONTROL_ALARM_TYPE, extra);
198 }
199 
200 /**
201  * @tc.name: TransEventTest006
202  * @tc.desc: Test all valid trans event form items
203  * @tc.type: FUNC
204  * @tc.require: I8HA59
205  */
206 HWTEST_F(TransEventTest, TransEventTest006, TestSize.Level0)
207 {
208     TransAlarmExtra validExtra = {
209         .result = 1,
210         .errcode = 2,
211         .callerPid = 3,
212         .linkType = 4,
213         .minBw = 5,
214         .methodId = 6,
215         .duration = 7,
216         .curFlow = 8,
217         .limitFlow = 9,
218         .limitTime = 10,
219         .occupyRes = 11,
220         .syncType = 12,
221         .syncData = 13,
222         .retryCount = 14,
223         .retryReason = 15,
224         .conflictName = "conflictName",
225         .conflictedName = "conflictedName",
226         .occupyedName = "testOccupyName",
227         .permissionName = "testPermissionName",
228         .sessionName = "testSessionName",
229     };
230     constexpr int32_t VALID_EXTRA_SIZE = TRANS_ALARM_ASSIGNER_SIZE;
231 
232     HiSysEventMock mock;
233     EXPECT_CALL(mock,
234         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(MANAGE_ALARM_EVENT_NAME),
235             Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), TransAlarmValidParamArrayMatcher(validExtra, VALID_EXTRA_SIZE),
236             ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
237         .Times(1);
238     TRANS_ALARM(BANDWIDTH_INSUFFICIANT_ALARM, MANAGE_ALARM_TYPE, validExtra);
239 }
240 
241 /**
242  * @tc.name: TransEventTest007
243  * @tc.desc: Test stats
244  * @tc.type: FUNC
245  * @tc.require: I8HA59
246  */
247 HWTEST_F(TransEventTest, TransEventTest007, TestSize.Level0)
248 {
249     TransEventExtra validExtra = {
250         .result = 1,
251         .errcode = 2,
252         .socketName = "testSocketName",
253         .dataType = 3,
254         .channelType = 4,
255         .laneId = 5,
256         .preferLinkType = 6,
257         .laneTransType = 7,
258         .channelId = 8,
259         .requestId = 9,
260         .connectionId = 10,
261         .linkType = 11,
262         .authId = 12,
263         .socketFd = 13,
264         .costTime = 14,
265         .channelScore = 15,
266         .peerChannelId = 16,
267         .btFlow = 17,
268         .firstTokenId = 0,
269     };
270     constexpr int32_t VALID_EXTRA_SIZE = 19;
271     HiSysEventMock mock;
272     EXPECT_CALL(mock,
273         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), _,
274             ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
275         .Times(1);
276     TRANS_EVENT(EVENT_SCENE_BT_FLOW, SOFTBUS_DEFAULT_STAGE, validExtra);
277 
278 
279     TransEventExtra validExtra1 = {
280         .result = 1,
281         .errcode = 2,
282         .socketName = "testSocketName",
283         .channelScore = 15,
284         .peerChannelId = 16,
285         .peerNetworkId = "testNetworkId",
286         .callerPkg = "testCallerPkg",
287         .calleePkg = "testCalleePkg",
288         .firstTokenId = 0,
289     };
290     constexpr int32_t VALID_EXTRA_SIZE1 = 9;
291     HiSysEventMock mock1;
292     EXPECT_CALL(mock1,
293         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), _,
294             ParamArraySizeMatcher(VALID_EXTRA_SIZE1)))
295         .Times(1);
296     TRANS_EVENT(EVENT_SCENE_LANE_SCORE, SOFTBUS_DEFAULT_STAGE, validExtra1);
297 
298     TransEventExtra validExtra2 = {
299         .result = 1,
300         .errcode = 2,
301         .peerChannelId = 16,
302         .peerNetworkId = "testNetworkId",
303         .callerPkg = "testCallerPkg",
304         .calleePkg = "testCalleePkg",
305         .firstTokenId = 0,
306     };
307     constexpr int32_t VALID_EXTRA_SIZE2 = 7;
308     HiSysEventMock mock2;
309     EXPECT_CALL(mock2,
310         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), _,
311             ParamArraySizeMatcher(VALID_EXTRA_SIZE2)))
312         .Times(1);
313     TRANS_EVENT(EVENT_SCENE_DETECTION, SOFTBUS_DEFAULT_STAGE, validExtra2);
314 
315     TransEventExtra validExtra3 = {
316         .result = 1,
317         .errcode = 2,
318         .peerNetworkId = "testNetworkId",
319         .callerPkg = "testCallerPkg",
320         .calleePkg = "testCalleePkg",
321         .firstTokenId = 0,
322     };
323     constexpr int32_t VALID_EXTRA_SIZE3 = 6;
324     HiSysEventMock mock3;
325     EXPECT_CALL(mock3,
326         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_EVENT_NAME), Eq(SOFTBUS_EVENT_TYPE_BEHAVIOR), _,
327             ParamArraySizeMatcher(VALID_EXTRA_SIZE3)))
328         .Times(1);
329     TRANS_EVENT(EVENT_SCENE_ACTIVATION, SOFTBUS_DEFAULT_STAGE, validExtra3);
330 }
331 
332 /**
333  * @tc.name: TransEventTest008
334  * @tc.desc: Test trans event form size
335  * @tc.type: FUNC
336  * @tc.require: I8HA59
337  */
338 HWTEST_F(TransEventTest, TransEventTest008, TestSize.Level0)
339 {
340     TransAuditExtra extra = {
341         .localIp = NULL,
342         .localPort = NULL,
343         .localDevId = NULL,
344         .localSessName = NULL,
345         .peerIp = NULL,
346         .peerPort = NULL,
347         .peerDevId = NULL,
348         .peerSessName = NULL,
349         .hostPkg = "a.b.c.transSudit",
350         .result = 2,
351         .errcode = 9527,
352         .auditType = AUDIT_EVENT_MSG_ERROR,
353     };
354     constexpr int32_t VALID_EXTRA_SIZE = 4;
355 
356     HiSysEventMock mock;
357     EXPECT_CALL(mock,
358         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_AUDIT_NAME), Eq(SOFTBUS_EVENT_TYPE_SECURITY), _,
359             ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
360         .Times(1);
361     TRANS_AUDIT(AUDIT_SCENE_OPEN_SESSION, extra);
362 }
363 
364 /**
365  * @tc.name: TransEventTest009
366  * @tc.desc: Test all valid trans event form items
367  * @tc.type: FUNC
368  * @tc.require: I8HA59
369  */
370 HWTEST_F(TransEventTest, TransEventTest009, TestSize.Level0)
371 {
372     TransAuditExtra validExtra = {
373         .hostPkg = "a.b.c.transAudit",
374         .result = 1,
375         .errcode = 9527,
376         .auditType = AUDIT_EVENT_MSG_ERROR,
377         .localIp = "*1.123",
378         .localPort = "3435",
379         .localDevId = "*A1B2C3456789",
380         .localDevType = 2,
381         .localSessName = "mySessionName",
382         .localChannelId = 1025,
383         .peerIp = "*1.124",
384         .peerPort = "3436",
385         .peerDevId = "*B1C2D345679",
386         .peerDevType = 2,
387         .peerSessName = "youSessionName",
388         .peerChannelId = 15,
389         .channelType = 16,
390         .authId = 1314520,
391         .reqId = 321,
392         .linkType = 2,
393         .connId = 302234,
394         .socketFd = 223,
395         .dataType = 3,
396         .dataLen = 256,
397         .dataSeq = 41,
398         .costTime = 500,
399         .dataTraffic = 4096,
400         .reqCount = 3,
401     };
402     constexpr int32_t VALID_EXTRA_SIZE = TRANS_AUDIT_ASSIGNER_SIZE;
403 
404     HiSysEventMock mock;
405     EXPECT_CALL(mock,
406         HiSysEvent_Write(_, _, StrEq(SOFTBUS_EVENT_DOMAIN), StrEq(TRANS_AUDIT_NAME), Eq(SOFTBUS_EVENT_TYPE_SECURITY),
407             TransAuditValidParamArrayMatcher(validExtra, VALID_EXTRA_SIZE), ParamArraySizeMatcher(VALID_EXTRA_SIZE)))
408         .Times(1);
409     TRANS_AUDIT(AUDIT_SCENE_OPEN_SESSION, validExtra);
410 }
411 } // namespace OHOS
412