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 CONN_HISYSEVENT_MATCHER_H
17 #define CONN_HISYSEVENT_MATCHER_H
18 
19 #include <gmock/gmock.h>
20 
21 #include "convert/conn_audit_converter.h"
22 #include "convert/conn_event_converter.h"
23 #include "hisysevent_c.h"
24 #include "softbus_event.h"
25 
MatchConnEventNameTypeExtraInt32Param(const HiSysEventParam * params,int32_t index,int32_t extraParam)26 static void MatchConnEventNameTypeExtraInt32Param(const HiSysEventParam *params, int32_t index, int32_t extraParam)
27 {
28     EXPECT_STREQ(params[index].name, g_connAssigners[index].name);
29     EXPECT_EQ(params[index].t, g_connAssigners[index].type);
30     EXPECT_EQ(params[index].v.i32, extraParam);
31 }
32 
MatchConnEventNameTypeExtraUint32Param(const HiSysEventParam * params,int32_t index,uint32_t extraParam)33 static void MatchConnEventNameTypeExtraUint32Param(const HiSysEventParam *params, int32_t index, uint32_t extraParam)
34 {
35     EXPECT_STREQ(params[index].name, g_connAssigners[index].name);
36     EXPECT_EQ(params[index].t, g_connAssigners[index].type);
37     EXPECT_EQ(params[index].v.ui32, extraParam);
38 }
39 
MatchConnEventNameTypeExtraUint64Param(const HiSysEventParam * params,int32_t index,uint64_t extraParam)40 static void MatchConnEventNameTypeExtraUint64Param(const HiSysEventParam *params, int32_t index, uint64_t extraParam)
41 {
42     EXPECT_STREQ(params[index].name, g_connAssigners[index].name);
43     EXPECT_EQ(params[index].t, g_connAssigners[index].type);
44     EXPECT_EQ(params[index].v.ui64, extraParam);
45 }
46 
MatchConnEventNameTypeExtraStrParam(const HiSysEventParam * params,int32_t index,const char * extraParam)47 static void MatchConnEventNameTypeExtraStrParam(const HiSysEventParam *params, int32_t index, const char * extraParam)
48 {
49     EXPECT_STREQ(params[index].name, g_connAssigners[index].name);
50     EXPECT_EQ(params[index].t, g_connAssigners[index].type);
51     EXPECT_STREQ(params[index].v.s, extraParam);
52 }
53 
MatchConnEventNameTypeExtraStrParamAnony(const HiSysEventParam * params,int32_t index,const char * extraParam)54 static void MatchConnEventNameTypeExtraStrParamAnony(const HiSysEventParam *params, int32_t index,
55     const char * extraParam)
56 {
57     char *anonyStr = NULL;
58     EXPECT_STREQ(params[index].name, g_connAssigners[index].name);
59     EXPECT_EQ(params[index].t, g_connAssigners[index].type);
60 
61     Anonymize(extraParam, &anonyStr);
62     EXPECT_STREQ(params[index].v.s, AnonymizeWrapper(anonyStr));
63     AnonymizeFree(anonyStr);
64 }
65 
66 MATCHER_P2(ConnValidParamArrayMatcher, inExtra, validSize, "conn valid param array match fail")
67 {
68     const auto *params = static_cast<const HiSysEventParam *>(arg);
69     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
70     auto extra = static_cast<ConnEventExtra>(inExtra);
71     int32_t index = 0;
72     MatchConnEventNameTypeExtraInt32Param(params, index, extra.result);
73     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.errcode);
74     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.connectionId);
75     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.requestId);
76     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.linkType);
77     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.authType);
78     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.authId);
79     MatchConnEventNameTypeExtraStrParam(params, ++index, extra.lnnType);
80     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.expectRole);
81     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.costTime);
82     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.rssi);
83     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.load);
84     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.frequency);
85     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.connProtocol);
86     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.connRole);
87     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.connRcDelta);
88     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.connRc);
89     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.supportFeature);
90     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.moduleId);
91     MatchConnEventNameTypeExtraUint32Param(params, ++index, extra.proType);
92     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.fd);
93     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.cfd);
94     MatchConnEventNameTypeExtraStrParam(params, ++index, extra.challengeCode);
95     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.peerIp);
96     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.peerBrMac);
97     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.peerBleMac);
98     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.peerWifiMac);
99     MatchConnEventNameTypeExtraStrParam(params, ++index, extra.peerPort);
100     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.peerNetworkId);
101     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.peerUdid);
102     MatchConnEventNameTypeExtraStrParam(params, ++index, extra.peerDeviceType);
103     MatchConnEventNameTypeExtraStrParamAnony(params, ++index, extra.localNetworkId);
104     MatchConnEventNameTypeExtraStrParam(params, ++index, extra.callerPkg);
105     MatchConnEventNameTypeExtraStrParam(params, ++index, extra.calleePkg);
106     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.bootLinkType);
107     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.isRenegotiate);
108     MatchConnEventNameTypeExtraInt32Param(params, ++index, extra.isReuse);
109     MatchConnEventNameTypeExtraUint64Param(params, ++index, extra.negotiateTime);
110     MatchConnEventNameTypeExtraUint64Param(params, ++index, extra.linkTime);
111     EXPECT_EQ(++index, validSize);
112     return true;
113 }
114 
115 MATCHER_P2(ConnInvalidParamArrayMatcher, inExtra, validSize, "conn invalid param array match fail")
116 {
117     const auto *params = static_cast<const HiSysEventParam *>(arg);
118     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
119     auto extra = static_cast<ConnEventExtra>(inExtra);
120     int32_t index = 0;
121     MatchConnEventNameTypeExtraInt32Param(params, index, ((extra.result < 0) ? (-extra.result) : extra.result));
122     MatchConnEventNameTypeExtraInt32Param(params, ++index, ((extra.errcode < 0) ? (-extra.errcode) : extra.errcode));
123     EXPECT_EQ(++index, validSize);
124     return true;
125 }
126 
MatchConnAuditNameTypeExtraInt32Param(const HiSysEventParam * params,int32_t index,int32_t extraParam)127 static void MatchConnAuditNameTypeExtraInt32Param(const HiSysEventParam *params, int32_t index, int32_t extraParam)
128 {
129     EXPECT_STREQ(params[index].name, g_connAuditAssigners[index].name);
130     EXPECT_EQ(params[index].t, g_connAuditAssigners[index].type);
131     EXPECT_EQ(params[index].v.i32, extraParam);
132 }
133 
MatchConnAuditNameTypeExtraStrParam(const HiSysEventParam * params,int32_t index,const char * extraParam)134 static void MatchConnAuditNameTypeExtraStrParam(const HiSysEventParam *params, int32_t index, const char *extraParam)
135 {
136     EXPECT_STREQ(params[index].name, g_connAuditAssigners[index].name);
137     EXPECT_EQ(params[index].t, g_connAuditAssigners[index].type);
138     EXPECT_STREQ(params[index].v.s, extraParam);
139 }
140 
141 MATCHER_P2(ConnAuditValidParamArrayMatcher, inExtra, validSize, "conn valid param array match fail")
142 {
143     const auto *params = static_cast<const HiSysEventParam *>(arg);
144     params += SOFTBUS_ASSIGNER_SIZE; // Skip softbus params, they are matched by SoftbusParamArrayMatcher
145     auto extra = static_cast<ConnAuditExtra>(inExtra);
146     int32_t index = 0;
147 
148     MatchConnAuditNameTypeExtraInt32Param(params, index, extra.errcode);
149     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.auditType);
150     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.connectionId);
151     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.requestId);
152     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.linkType);
153     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.expectRole);
154     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.costTime);
155     MatchConnAuditNameTypeExtraInt32Param(params, ++index, extra.connectTimes);
156     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.frequency);
157     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.challengeCode);
158     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.peerBrMac);
159     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.localBrMac);
160     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.peerBleMac);
161     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.localBleMac);
162     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.peerDeviceType);
163     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.peerUdid);
164     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.localUdid);
165     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.connPayload);
166     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.localDeviceName);
167     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.peerIp);
168     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.localIp);
169     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.callerPkg);
170     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.calleePkg);
171     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.peerPort);
172     MatchConnAuditNameTypeExtraStrParam(params, ++index, extra.localPort);
173 
174     EXPECT_EQ(++index, validSize);
175     return true;
176 }
177 #endif // CONN_HISYSEVENT_MATCHER_H
178