• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 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 <string>
18 
19 #include "anonymizer.h"
20 
21 using namespace std;
22 using namespace testing::ext;
23 
24 namespace {
25 const char *TEST_PLAIN_UDID = "a8ynvpdaihw1f6nknjd2hkfhxljxypkr6kvjsbhnhpp16974uo4fvsrpfa6t50fm";
26 const char *TEST_ANONYMIZED_UDID = "a8ynv**t50fm";
27 const char *TEST_PLAIN_UDID_CAPS = "A8YNVPDAIHW1F6NKNJD2HKFHXLJXYPKR6KVJSBHNHPP16974UO4FVSRPFA6T50FM";
28 const char *TEST_ANONYMIZED_UDID_CAPS = "A8YNV**T50FM";
29 const char *TEST_PLAIN_MAC = "dd-15-bc-b9-f2-04";
30 const char *TEST_ANONYMIZED_MAC = "dd-15-bc-**-**-04";
31 const char *TEST_PLAIN_MAC_COLON = "dd:15:bc:b9:f2:04";
32 const char *TEST_ANONYMIZED_MAC_COLON = "dd:15:bc:**:**:04";
33 const char *TEST_PLAIN_MAC_CAPS = "91-1E-DD-EF-76-48";
34 const char *TEST_ANONYMIZED_MAC_CAPS = "91-1E-DD-**-**-48";
35 const char *TEST_PLAIN_MAC_CAPS_COLON = "91:1E:DD:EF:76:48";
36 const char *TEST_ANONYMIZED_MAC_CAPS_COLON = "91:1E:DD:**:**:48";
37 const char *TEST_PLAIN_IP_ONE = "10.11.12.1";
38 const char *TEST_ANONYMIZED_IP_ONE = "10.11.12.*";
39 const char *TEST_PLAIN_IP_TWO = "10.11.12.13";
40 const char *TEST_ANONYMIZED_IP_TWO = "10.11.12.**";
41 const char *TEST_PLAIN_IP_THREE = "10.11.12.133";
42 const char *TEST_ANONYMIZED_IP_THREE = "10.11.12.***";
43 } // namespace
44 
45 namespace OHOS {
46 class AnonymizerTest : public testing::Test { };
47 
48 /**
49  * @tc.name: AnonymizeTest001
50  * @tc.desc: Test plainStr is null
51  * @tc.type: FUNC
52  * @tc.require: I8DW1W
53  */
54 HWTEST_F(AnonymizerTest, AnonymizeTest001, TestSize.Level0)
55 {
56     const char *plainStr = nullptr;
57     char *anonymizedStr = nullptr;
58     Anonymize(plainStr, &anonymizedStr);
59     EXPECT_STREQ("NULL", anonymizedStr);
60     AnonymizeFree(anonymizedStr);
61 }
62 
63 /**
64  * @tc.name: AnonymizeTest002
65  * @tc.desc: Test plainStr length < 2
66  * @tc.type: FUNC
67  * @tc.require: I8DW1W
68  */
69 HWTEST_F(AnonymizerTest, AnonymizeTest002, TestSize.Level0)
70 {
71     const char *plainStr = "a";
72     char *anonymizedStr = nullptr;
73     Anonymize(plainStr, &anonymizedStr);
74     EXPECT_STREQ("*", anonymizedStr);
75     AnonymizeFree(anonymizedStr);
76 }
77 
78 /**
79  * @tc.name: AnonymizeTest003
80  * @tc.desc: Test plainStr length = 2
81  * @tc.type: FUNC
82  * @tc.require: I8DW1W
83  */
84 HWTEST_F(AnonymizerTest, AnonymizeTest003, TestSize.Level0)
85 {
86     const char *plainStr = "ab";
87     char *anonymizedStr = nullptr;
88     Anonymize(plainStr, &anonymizedStr);
89     EXPECT_STREQ("*b", anonymizedStr);
90     AnonymizeFree(anonymizedStr);
91 }
92 
93 /**
94  * @tc.name: AnonymizeTest004
95  * @tc.desc: Test plainStr length > 2
96  * @tc.type: FUNC
97  * @tc.require: I8DW1W
98  */
99 HWTEST_F(AnonymizerTest, AnonymizeTest004, TestSize.Level0)
100 {
101     const char *plainStr = "abc";
102     char *anonymizedStr = nullptr;
103     Anonymize(plainStr, &anonymizedStr);
104     EXPECT_STREQ("**c", anonymizedStr);
105     AnonymizeFree(anonymizedStr);
106 }
107 
108 /**
109  * @tc.name: AnonymizeTest005
110  * @tc.desc: Test free
111  * @tc.type: FUNC
112  * @tc.require: I8DW1W
113  */
114 HWTEST_F(AnonymizerTest, AnonymizeTest005, TestSize.Level0)
115 {
116     char *anonymizedStr = nullptr;
117     AnonymizeFree(anonymizedStr);
118     EXPECT_EQ(nullptr, anonymizedStr);
119 }
120 
121 /**
122  * @tc.name: AnonymizeTest006
123  * @tc.desc: Test plainStr is empty
124  * @tc.type: FUNC
125  * @tc.require: I8DW1W
126  */
127 HWTEST_F(AnonymizerTest, AnonymizeTest006, TestSize.Level0)
128 {
129     const char *plainStr = "";
130     char *anonymizedStr = nullptr;
131     Anonymize(plainStr, &anonymizedStr);
132     EXPECT_STREQ("EMPTY", anonymizedStr);
133     AnonymizeFree(anonymizedStr);
134 }
135 
136 /**
137  * @tc.name: AnonymizeTest007
138  * @tc.desc: Test anonymize udid
139  * @tc.type: FUNC
140  * @tc.require: I8DW1W
141  */
142 HWTEST_F(AnonymizerTest, AnonymizeTest007, TestSize.Level0)
143 {
144     char *anonymizedStr = nullptr;
145     Anonymize(TEST_PLAIN_UDID, &anonymizedStr);
146     EXPECT_STREQ(TEST_ANONYMIZED_UDID, anonymizedStr);
147     AnonymizeFree(anonymizedStr);
148 
149     Anonymize(TEST_PLAIN_UDID_CAPS, &anonymizedStr);
150     EXPECT_STREQ(TEST_ANONYMIZED_UDID_CAPS, anonymizedStr);
151     AnonymizeFree(anonymizedStr);
152 }
153 
154 /**
155  * @tc.name: AnonymizeTest008
156  * @tc.desc: Test anonymize mac
157  * @tc.type: FUNC
158  * @tc.require: I8DW1W
159  */
160 HWTEST_F(AnonymizerTest, AnonymizeTest008, TestSize.Level0)
161 {
162     char *anonymizedStr = nullptr;
163     Anonymize(TEST_PLAIN_MAC, &anonymizedStr);
164     EXPECT_STREQ(TEST_ANONYMIZED_MAC, anonymizedStr);
165     AnonymizeFree(anonymizedStr);
166 
167     Anonymize(TEST_PLAIN_MAC_CAPS, &anonymizedStr);
168     EXPECT_STREQ(TEST_ANONYMIZED_MAC_CAPS, anonymizedStr);
169     AnonymizeFree(anonymizedStr);
170 
171     Anonymize(TEST_PLAIN_MAC_COLON, &anonymizedStr);
172     EXPECT_STREQ(TEST_ANONYMIZED_MAC_COLON, anonymizedStr);
173     AnonymizeFree(anonymizedStr);
174 
175     Anonymize(TEST_PLAIN_MAC_CAPS_COLON, &anonymizedStr);
176     EXPECT_STREQ(TEST_ANONYMIZED_MAC_CAPS_COLON, anonymizedStr);
177     AnonymizeFree(anonymizedStr);
178 }
179 
180 /**
181  * @tc.name: AnonymizeTest009
182  * @tc.desc: Test anonymize ip
183  * @tc.type: FUNC
184  * @tc.require: I8DW1W
185  */
186 HWTEST_F(AnonymizerTest, AnonymizeTest009, TestSize.Level0)
187 {
188     char *anonymizedStr = nullptr;
189     Anonymize(TEST_PLAIN_IP_ONE, &anonymizedStr);
190     EXPECT_STREQ(TEST_ANONYMIZED_IP_ONE, anonymizedStr);
191     AnonymizeFree(anonymizedStr);
192 
193     Anonymize(TEST_PLAIN_IP_TWO, &anonymizedStr);
194     EXPECT_STREQ(TEST_ANONYMIZED_IP_TWO, anonymizedStr);
195     AnonymizeFree(anonymizedStr);
196 
197     Anonymize(TEST_PLAIN_IP_THREE, &anonymizedStr);
198     EXPECT_STREQ(TEST_ANONYMIZED_IP_THREE, anonymizedStr);
199     AnonymizeFree(anonymizedStr);
200 }
201 
202 /**
203  * @tc.name: AnonymizeTest010
204  * @tc.desc: Should return "NULL" when anonymizedStr is nullptr
205  * @tc.type: FUNC
206  * @tc.require: I8DW1W
207  */
208 HWTEST_F(AnonymizerTest, AnonymizeTest010, TestSize.Level0)
209 {
210     const char *anonymizedStr = nullptr;
211 
212     const char *ret = AnonymizeWrapper(anonymizedStr);
213     EXPECT_STREQ(ret, "NULL");
214 }
215 
216 /**
217  * @tc.name: AnonymizeTest011
218  * @tc.desc: Should return anonymizedStr when anonymizedStr is not nullptr
219  * @tc.type: FUNC
220  * @tc.require: I8DW1W
221  */
222 HWTEST_F(AnonymizerTest, AnonymizeTest011, TestSize.Level0)
223 {
224     const char *anonymizedStr = TEST_ANONYMIZED_UDID;
225 
226     const char *ret = AnonymizeWrapper(anonymizedStr);
227     EXPECT_STREQ(ret, anonymizedStr);
228 }
229 
230 /**
231  * @tc.name: AnonymizeTest012
232  * @tc.desc: Test anonymize device name
233  * @tc.type: FUNC
234  * @tc.require:
235  */
236 HWTEST_F(AnonymizerTest, AnonymizeTest012, TestSize.Level0)
237 {
238     char *anonymizedStr = nullptr;
239 
240     Anonymize("1234", &anonymizedStr);
241     EXPECT_STREQ("1**4", anonymizedStr);
242     AnonymizeFree(anonymizedStr);
243 
244     Anonymize("一二三四", &anonymizedStr);
245     EXPECT_STREQ("一**四", anonymizedStr);
246     AnonymizeFree(anonymizedStr);
247 
248     Anonymize("12345678", &anonymizedStr);
249     EXPECT_STREQ("12****78", anonymizedStr);
250     AnonymizeFree(anonymizedStr);
251 
252     Anonymize("一二三四五六七八", &anonymizedStr);
253     EXPECT_STREQ("一二****七八", anonymizedStr);
254     AnonymizeFree(anonymizedStr);
255 
256     Anonymize("12三四", &anonymizedStr);
257     EXPECT_STREQ("1**四", anonymizedStr);
258     AnonymizeFree(anonymizedStr);
259 
260     Anonymize("一二34", &anonymizedStr);
261     EXPECT_STREQ("一**4", anonymizedStr);
262     AnonymizeFree(anonymizedStr);
263 
264     Anonymize("1二3四", &anonymizedStr);
265     EXPECT_STREQ("1**四", anonymizedStr);
266     AnonymizeFree(anonymizedStr);
267 
268     Anonymize("一2三4", &anonymizedStr);
269     EXPECT_STREQ("一**4", anonymizedStr);
270     AnonymizeFree(anonymizedStr);
271 }
272 
273 /**
274  * @tc.name: AnonymizeTest013
275  * @tc.desc: Test anonymize device name
276  * @tc.type: FUNC
277  * @tc.require:
278  */
279 HWTEST_F(AnonymizerTest, AnonymizeTest013, TestSize.Level0)
280 {
281     char *anonymizedStr = nullptr;
282 
283     Anonymize("1", &anonymizedStr);
284     EXPECT_STREQ("*", anonymizedStr);
285     AnonymizeFree(anonymizedStr);
286 
287     Anonymize("12", &anonymizedStr);
288     EXPECT_STREQ("*2", anonymizedStr);
289     AnonymizeFree(anonymizedStr);
290 
291     Anonymize("123", &anonymizedStr);
292     EXPECT_STREQ("**3", anonymizedStr);
293     AnonymizeFree(anonymizedStr);
294 
295     Anonymize("1234", &anonymizedStr);
296     EXPECT_STREQ("1**4", anonymizedStr);
297     AnonymizeFree(anonymizedStr);
298 
299     Anonymize("12345", &anonymizedStr);
300     EXPECT_STREQ("1***5", anonymizedStr);
301     AnonymizeFree(anonymizedStr);
302 
303     Anonymize("123456", &anonymizedStr);
304     EXPECT_STREQ("1***56", anonymizedStr);
305     AnonymizeFree(anonymizedStr);
306 
307     Anonymize("1234567", &anonymizedStr);
308     EXPECT_STREQ("1****67", anonymizedStr);
309     AnonymizeFree(anonymizedStr);
310 
311     Anonymize("12345678", &anonymizedStr);
312     EXPECT_STREQ("12****78", anonymizedStr);
313     AnonymizeFree(anonymizedStr);
314 
315     Anonymize("123456789", &anonymizedStr);
316     EXPECT_STREQ("12*****89", anonymizedStr);
317     AnonymizeFree(anonymizedStr);
318 
319     Anonymize("1234567890", &anonymizedStr);
320     EXPECT_STREQ("12*****890", anonymizedStr);
321     AnonymizeFree(anonymizedStr);
322 }
323 
324 /**
325  * @tc.name: AnonymizeTest014
326  * @tc.desc: Test anonymize invalid utf-8 str
327  * @tc.type: FUNC
328  * @tc.require:
329  */
330 HWTEST_F(AnonymizerTest, AnonymizeTest014, TestSize.Level0)
331 {
332     char *anonymizedStr = nullptr;
333     const char *invalidUTF8Str = "invalid \xC0";
334 
335     Anonymize(invalidUTF8Str, &anonymizedStr);
336     EXPECT_STREQ(invalidUTF8Str, anonymizedStr);
337     AnonymizeFree(anonymizedStr);
338 }
339 } // namespace OHOS
340