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 #ifndef TRANS_HISYSEVENT_MATCHER_H
17 #define TRANS_HISYSEVENT_MATCHER_H
18 
19 #include <gmock/gmock.h>
20 
21 #include "convert/trans_audit_converter.h"
22 #include "convert/trans_event_converter.h"
23 #include "hisysevent_c.h"
24 #include "softbus_event.h"
25 
MatchTransEventNameTypeExtraInt32Param(const HiSysEventParam * params,int32_t index,int32_t extraParam)26 static void MatchTransEventNameTypeExtraInt32Param(const HiSysEventParam *params, int32_t index, int32_t extraParam)
27 {
28     EXPECT_STREQ(params[index].name, TRANS_ASSIGNERS[index].name);
29     EXPECT_EQ(params[index].t, TRANS_ASSIGNERS[index].type);
30     EXPECT_EQ(params[index].v.i32, extraParam);
31 }
32 
MatchTransEventNameTypeExtraStrParam(const HiSysEventParam * params,int32_t index,const char * extraParam)33 static void MatchTransEventNameTypeExtraStrParam(const HiSysEventParam *params, int32_t index,
34     const char * extraParam)
35 {
36     EXPECT_STREQ(params[index].name, TRANS_ASSIGNERS[index].name);
37     EXPECT_EQ(params[index].t, TRANS_ASSIGNERS[index].type);
38     EXPECT_STREQ(params[index].v.s, extraParam);
39 }
40 
MatchTransEventNameTypeExtraStrParamAnony(const HiSysEventParam * params,int32_t index,const char * extraParam)41 static void MatchTransEventNameTypeExtraStrParamAnony(const HiSysEventParam *params, int32_t index,
42     const char * extraParam)
43 {
44     char *anonyStr = NULL;
45     EXPECT_STREQ(params[index].name, TRANS_ASSIGNERS[index].name);
46     EXPECT_EQ(params[index].t, TRANS_ASSIGNERS[index].type);
47 
48     Anonymize(extraParam, &anonyStr);
49     EXPECT_STREQ(params[index].v.s, AnonymizeWrapper(anonyStr));
50     AnonymizeFree(anonyStr);
51 }
52 
53 MATCHER_P2(TransValidParamArrayMatcher, inExtra, validSize, "trans valid param array match fail")
54 {
55     const auto *params = static_cast<const HiSysEventParam *>(arg);
56     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
57     auto extra = static_cast<TransEventExtra>(inExtra);
58     int32_t index = 0;
59     MatchTransEventNameTypeExtraInt32Param(params, index, extra.result);
60     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.errcode);
61     MatchTransEventNameTypeExtraStrParamAnony(params, ++index, extra.socketName);
62     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.dataType);
63     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.channelType);
64     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.laneId);
65     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.preferLinkType);
66     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.laneTransType);
67     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.channelId);
68     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.requestId);
69     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.connectionId);
70     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.linkType);
71     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.authId);
72     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.socketFd);
73     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.costTime);
74     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.channelScore);
75     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.peerChannelId);
76     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.btFlow);
77     MatchTransEventNameTypeExtraStrParamAnony(params, ++index, extra.peerNetworkId);
78     MatchTransEventNameTypeExtraStrParamAnony(params, ++index, extra.peerUdid);
79     MatchTransEventNameTypeExtraStrParam(params, ++index, extra.peerDevVer);
80     MatchTransEventNameTypeExtraStrParamAnony(params, ++index, extra.localUdid);
81     MatchTransEventNameTypeExtraStrParam(params, ++index, extra.callerPkg);
82     MatchTransEventNameTypeExtraStrParam(params, ++index, extra.calleePkg);
83     MatchTransEventNameTypeExtraStrParam(params, ++index, extra.firstTokenName);
84     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.firstTokenId);
85     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.firstTokenType);
86     MatchTransEventNameTypeExtraStrParam(params, ++index, extra.trafficStats);
87     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.osType);
88     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.deviceState);
89     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.businessId);
90     MatchTransEventNameTypeExtraInt32Param(params, ++index, extra.businessType);
91     EXPECT_EQ(++index, validSize);
92     return true;
93 }
94 
95 MATCHER_P2(TransInvalidParamArrayMatcher, inExtra, validSize, "trans invalid param array match fail")
96 {
97     const auto *params = static_cast<const HiSysEventParam *>(arg);
98     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
99     auto extra = static_cast<TransEventExtra>(inExtra);
100     int32_t index = 0;
101     MatchTransEventNameTypeExtraInt32Param(params, index, ((extra.result < 0) ? (-extra.result) : extra.result));
102     MatchTransEventNameTypeExtraInt32Param(params, ++index, ((extra.errcode < 0) ? (-extra.errcode) : extra.errcode));
103     ++index;
104     int32_t num = 25;
105     EXPECT_STREQ(params[index].name, TRANS_ASSIGNERS[num].name);
106     EXPECT_EQ(params[index].t, TRANS_ASSIGNERS[num].type);
107     EXPECT_EQ(params[index].v.i32, extra.firstTokenId);
108     EXPECT_EQ(++index, validSize);
109     return true;
110 }
111 
MatchTransAlarmNameTypeExtraInt32Param(const HiSysEventParam * params,int32_t index,int32_t extraParam)112 static void MatchTransAlarmNameTypeExtraInt32Param(const HiSysEventParam *params, int32_t index, int32_t extraParam)
113 {
114     EXPECT_STREQ(params[index].name, g_transAlarmAssigners[index].name);
115     EXPECT_EQ(params[index].t, g_transAlarmAssigners[index].type);
116     EXPECT_EQ(params[index].v.i32, extraParam);
117 }
118 
MatchTransAlarmNameTypeExtraStrParam(const HiSysEventParam * params,int32_t index,const char * extraParam)119 static void MatchTransAlarmNameTypeExtraStrParam(const HiSysEventParam *params, int32_t index, const char *extraParam)
120 {
121     EXPECT_STREQ(params[index].name, g_transAlarmAssigners[index].name);
122     EXPECT_EQ(params[index].t, g_transAlarmAssigners[index].type);
123     EXPECT_STREQ(params[index].v.s, extraParam);
124 }
125 
MatchTransAlarmNameTypeExtraStrParamAnony(const HiSysEventParam * params,int32_t index,const char * extraParam)126 static void MatchTransAlarmNameTypeExtraStrParamAnony(const HiSysEventParam *params, int32_t index,
127     const char *extraParam)
128 {
129     char *anonyStr = NULL;
130     EXPECT_STREQ(params[index].name, g_transAlarmAssigners[index].name);
131     EXPECT_EQ(params[index].t, g_transAlarmAssigners[index].type);
132 
133     Anonymize(extraParam, &anonyStr);
134     EXPECT_STREQ(params[index].v.s, AnonymizeWrapper(anonyStr));
135     AnonymizeFree(anonyStr);
136 }
137 
138 MATCHER_P2(TransAlarmValidParamArrayMatcher, inExtra, validSize, "trans alarm valid param array match fail")
139 {
140     const auto *params = static_cast<const HiSysEventParam *>(arg);
141     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
142     auto extra = static_cast<TransAlarmExtra>(inExtra);
143     int32_t index = 0;
144     MatchTransAlarmNameTypeExtraInt32Param(params, index, extra.result);
145     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.errcode);
146     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.callerPid);
147     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.linkType);
148     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.minBw);
149     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.methodId);
150     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.duration);
151     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.curFlow);
152     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.limitFlow);
153     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.limitTime);
154     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.occupyRes);
155     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.syncType);
156     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.syncData);
157     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.retryCount);
158     MatchTransAlarmNameTypeExtraInt32Param(params, ++index, extra.retryReason);
159     MatchTransAlarmNameTypeExtraStrParam(params, ++index, extra.conflictName);
160     MatchTransAlarmNameTypeExtraStrParam(params, ++index, extra.conflictedName);
161     MatchTransAlarmNameTypeExtraStrParam(params, ++index, extra.occupyedName);
162     MatchTransAlarmNameTypeExtraStrParam(params, ++index, extra.permissionName);
163     MatchTransAlarmNameTypeExtraStrParamAnony(params, ++index, extra.sessionName);
164     EXPECT_EQ(++index, validSize);
165     return true;
166 }
167 
MatchTransAuditNameTypeExtraInt32Param(const HiSysEventParam * params,int32_t index,int32_t extraParam)168 static void MatchTransAuditNameTypeExtraInt32Param(const HiSysEventParam *params, int32_t index, int32_t extraParam)
169 {
170     EXPECT_STREQ(params[index].name, g_transAuditAssigners[index].name);
171     EXPECT_EQ(params[index].t, g_transAuditAssigners[index].type);
172     EXPECT_EQ(params[index].v.i32, extraParam);
173 }
174 
MatchTransAuditNameTypeExtraStrParam(const HiSysEventParam * params,int32_t index,const char * extraParam)175 static void MatchTransAuditNameTypeExtraStrParam(const HiSysEventParam *params, int32_t index, const char *extraParam)
176 {
177     EXPECT_STREQ(params[index].name, g_transAuditAssigners[index].name);
178     EXPECT_EQ(params[index].t, g_transAuditAssigners[index].type);
179     EXPECT_STREQ(params[index].v.s, extraParam);
180 }
181 
182 MATCHER_P2(TransAuditValidParamArrayMatcher, inExtra, validSize, "trans valid param array match fail")
183 {
184     const auto *params = static_cast<const HiSysEventParam *>(arg);
185     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
186     auto extra = static_cast<TransAuditExtra>(inExtra);
187     int32_t index = 0;
188     MatchTransAuditNameTypeExtraStrParam(params, index, extra.hostPkg);
189     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.result);
190     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.errcode);
191     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.auditType);
192     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.localIp);
193     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.localPort);
194     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.localDevId);
195     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.localDevType);
196     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.localSessName);
197     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.localChannelId);
198     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.peerIp);
199     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.peerPort);
200     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.peerDevId);
201     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.peerDevType);
202     MatchTransAuditNameTypeExtraStrParam(params, ++index, extra.peerSessName);
203     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.peerChannelId);
204     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.channelType);
205     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.authId);
206     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.reqId);
207     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.linkType);
208     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.connId);
209     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.socketFd);
210     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.dataType);
211     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.dataLen);
212     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.dataSeq);
213     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.costTime);
214     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.dataTraffic);
215     MatchTransAuditNameTypeExtraInt32Param(params, ++index, extra.reqCount);
216 
217     EXPECT_EQ(++index, validSize);
218     return true;
219 }
220 #endif // TRANS_HISYSEVENT_MATCHER_H
221