• 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 const uint32_t DEVICE_NAME_MAX_LEN = 128;
44 } // namespace
45 
46 namespace OHOS {
47 class AnonymizerTest : public testing::Test { };
48 
49 /**
50  * @tc.name: AnonymizeTest001
51  * @tc.desc: Test plainStr is null
52  * @tc.type: FUNC
53  * @tc.require: I8DW1W
54  */
55 HWTEST_F(AnonymizerTest, AnonymizeTest001, TestSize.Level0)
56 {
57     const char *plainStr = nullptr;
58     char *anonymizedStr = nullptr;
59     Anonymize(plainStr, &anonymizedStr);
60     EXPECT_STREQ("NULL", anonymizedStr);
61     AnonymizeFree(anonymizedStr);
62 }
63 
64 /**
65  * @tc.name: AnonymizeTest002
66  * @tc.desc: Test plainStr length < 2
67  * @tc.type: FUNC
68  * @tc.require: I8DW1W
69  */
70 HWTEST_F(AnonymizerTest, AnonymizeTest002, TestSize.Level0)
71 {
72     const char *plainStr = "a";
73     char *anonymizedStr = nullptr;
74     Anonymize(plainStr, &anonymizedStr);
75     EXPECT_STREQ("*", anonymizedStr);
76     AnonymizeFree(anonymizedStr);
77 }
78 
79 /**
80  * @tc.name: AnonymizeTest003
81  * @tc.desc: Test plainStr length = 2
82  * @tc.type: FUNC
83  * @tc.require: I8DW1W
84  */
85 HWTEST_F(AnonymizerTest, AnonymizeTest003, TestSize.Level0)
86 {
87     const char *plainStr = "ab";
88     char *anonymizedStr = nullptr;
89     Anonymize(plainStr, &anonymizedStr);
90     EXPECT_STREQ("*b", anonymizedStr);
91     AnonymizeFree(anonymizedStr);
92 }
93 
94 /**
95  * @tc.name: AnonymizeTest004
96  * @tc.desc: Test plainStr length > 2
97  * @tc.type: FUNC
98  * @tc.require: I8DW1W
99  */
100 HWTEST_F(AnonymizerTest, AnonymizeTest004, TestSize.Level0)
101 {
102     const char *plainStr = "abc";
103     char *anonymizedStr = nullptr;
104     Anonymize(plainStr, &anonymizedStr);
105     EXPECT_STREQ("**c", anonymizedStr);
106     AnonymizeFree(anonymizedStr);
107 }
108 
109 /**
110  * @tc.name: AnonymizeTest005
111  * @tc.desc: Test free
112  * @tc.type: FUNC
113  * @tc.require: I8DW1W
114  */
115 HWTEST_F(AnonymizerTest, AnonymizeTest005, TestSize.Level0)
116 {
117     char *anonymizedStr = nullptr;
118     AnonymizeFree(anonymizedStr);
119     EXPECT_EQ(nullptr, anonymizedStr);
120 }
121 
122 /**
123  * @tc.name: AnonymizeTest006
124  * @tc.desc: Test plainStr is empty
125  * @tc.type: FUNC
126  * @tc.require: I8DW1W
127  */
128 HWTEST_F(AnonymizerTest, AnonymizeTest006, TestSize.Level0)
129 {
130     const char *plainStr = "";
131     char *anonymizedStr = nullptr;
132     Anonymize(plainStr, &anonymizedStr);
133     EXPECT_STREQ("EMPTY", anonymizedStr);
134     AnonymizeFree(anonymizedStr);
135 }
136 
137 /**
138  * @tc.name: AnonymizeTest007
139  * @tc.desc: Test anonymize udid
140  * @tc.type: FUNC
141  * @tc.require: I8DW1W
142  */
143 HWTEST_F(AnonymizerTest, AnonymizeTest007, TestSize.Level0)
144 {
145     char *anonymizedStr = nullptr;
146     Anonymize(TEST_PLAIN_UDID, &anonymizedStr);
147     EXPECT_STREQ(TEST_ANONYMIZED_UDID, anonymizedStr);
148     AnonymizeFree(anonymizedStr);
149 
150     Anonymize(TEST_PLAIN_UDID_CAPS, &anonymizedStr);
151     EXPECT_STREQ(TEST_ANONYMIZED_UDID_CAPS, anonymizedStr);
152     AnonymizeFree(anonymizedStr);
153 }
154 
155 /**
156  * @tc.name: AnonymizeTest008
157  * @tc.desc: Test anonymize mac
158  * @tc.type: FUNC
159  * @tc.require: I8DW1W
160  */
161 HWTEST_F(AnonymizerTest, AnonymizeTest008, TestSize.Level0)
162 {
163     char *anonymizedStr = nullptr;
164     Anonymize(TEST_PLAIN_MAC, &anonymizedStr);
165     EXPECT_STREQ(TEST_ANONYMIZED_MAC, anonymizedStr);
166     AnonymizeFree(anonymizedStr);
167 
168     Anonymize(TEST_PLAIN_MAC_CAPS, &anonymizedStr);
169     EXPECT_STREQ(TEST_ANONYMIZED_MAC_CAPS, anonymizedStr);
170     AnonymizeFree(anonymizedStr);
171 
172     Anonymize(TEST_PLAIN_MAC_COLON, &anonymizedStr);
173     EXPECT_STREQ(TEST_ANONYMIZED_MAC_COLON, anonymizedStr);
174     AnonymizeFree(anonymizedStr);
175 
176     Anonymize(TEST_PLAIN_MAC_CAPS_COLON, &anonymizedStr);
177     EXPECT_STREQ(TEST_ANONYMIZED_MAC_CAPS_COLON, anonymizedStr);
178     AnonymizeFree(anonymizedStr);
179 }
180 
181 /**
182  * @tc.name: AnonymizeTest009
183  * @tc.desc: Test anonymize ip
184  * @tc.type: FUNC
185  * @tc.require: I8DW1W
186  */
187 HWTEST_F(AnonymizerTest, AnonymizeTest009, TestSize.Level0)
188 {
189     char *anonymizedStr = nullptr;
190     Anonymize(TEST_PLAIN_IP_ONE, &anonymizedStr);
191     EXPECT_STREQ(TEST_ANONYMIZED_IP_ONE, anonymizedStr);
192     AnonymizeFree(anonymizedStr);
193 
194     Anonymize(TEST_PLAIN_IP_TWO, &anonymizedStr);
195     EXPECT_STREQ(TEST_ANONYMIZED_IP_TWO, anonymizedStr);
196     AnonymizeFree(anonymizedStr);
197 
198     Anonymize(TEST_PLAIN_IP_THREE, &anonymizedStr);
199     EXPECT_STREQ(TEST_ANONYMIZED_IP_THREE, anonymizedStr);
200     AnonymizeFree(anonymizedStr);
201 }
202 
203 /**
204  * @tc.name: AnonymizeTest010
205  * @tc.desc: Should return "NULL" when anonymizedStr is nullptr
206  * @tc.type: FUNC
207  * @tc.require: I8DW1W
208  */
209 HWTEST_F(AnonymizerTest, AnonymizeTest010, TestSize.Level0)
210 {
211     const char *anonymizedStr = nullptr;
212 
213     const char *ret = AnonymizeWrapper(anonymizedStr);
214     EXPECT_STREQ(ret, "NULL");
215 }
216 
217 /**
218  * @tc.name: AnonymizeTest011
219  * @tc.desc: Should return anonymizedStr when anonymizedStr is not nullptr
220  * @tc.type: FUNC
221  * @tc.require: I8DW1W
222  */
223 HWTEST_F(AnonymizerTest, AnonymizeTest011, TestSize.Level0)
224 {
225     const char *anonymizedStr = TEST_ANONYMIZED_UDID;
226 
227     const char *ret = AnonymizeWrapper(anonymizedStr);
228     EXPECT_STREQ(ret, anonymizedStr);
229 }
230 
231 /**
232  * @tc.name: AnonymizeTest012
233  * @tc.desc: Test anonymize device name
234  * @tc.type: FUNC
235  * @tc.require:
236  */
237 HWTEST_F(AnonymizerTest, AnonymizeTest012, TestSize.Level0)
238 {
239     char *anonymizedStr = nullptr;
240 
241     Anonymize("1234", &anonymizedStr);
242     EXPECT_STREQ("1**4", anonymizedStr);
243     AnonymizeFree(anonymizedStr);
244 
245     Anonymize("一二三四", &anonymizedStr);
246     EXPECT_STREQ("一**四", anonymizedStr);
247     AnonymizeFree(anonymizedStr);
248 
249     Anonymize("12345678", &anonymizedStr);
250     EXPECT_STREQ("12****78", anonymizedStr);
251     AnonymizeFree(anonymizedStr);
252 
253     Anonymize("一二三四五六七八", &anonymizedStr);
254     EXPECT_STREQ("一二****七八", anonymizedStr);
255     AnonymizeFree(anonymizedStr);
256 
257     Anonymize("12三四", &anonymizedStr);
258     EXPECT_STREQ("1**四", anonymizedStr);
259     AnonymizeFree(anonymizedStr);
260 
261     Anonymize("一二34", &anonymizedStr);
262     EXPECT_STREQ("一**4", anonymizedStr);
263     AnonymizeFree(anonymizedStr);
264 
265     Anonymize("1二3四", &anonymizedStr);
266     EXPECT_STREQ("1**四", anonymizedStr);
267     AnonymizeFree(anonymizedStr);
268 
269     Anonymize("一2三4", &anonymizedStr);
270     EXPECT_STREQ("一**4", anonymizedStr);
271     AnonymizeFree(anonymizedStr);
272 }
273 
274 /**
275  * @tc.name: AnonymizeTest013
276  * @tc.desc: Test anonymize device name
277  * @tc.type: FUNC
278  * @tc.require:
279  */
280 HWTEST_F(AnonymizerTest, AnonymizeTest013, TestSize.Level0)
281 {
282     char *anonymizedStr = nullptr;
283 
284     Anonymize("1", &anonymizedStr);
285     EXPECT_STREQ("*", anonymizedStr);
286     AnonymizeFree(anonymizedStr);
287 
288     Anonymize("12", &anonymizedStr);
289     EXPECT_STREQ("*2", anonymizedStr);
290     AnonymizeFree(anonymizedStr);
291 
292     Anonymize("123", &anonymizedStr);
293     EXPECT_STREQ("**3", anonymizedStr);
294     AnonymizeFree(anonymizedStr);
295 
296     Anonymize("1234", &anonymizedStr);
297     EXPECT_STREQ("1**4", anonymizedStr);
298     AnonymizeFree(anonymizedStr);
299 
300     Anonymize("12345", &anonymizedStr);
301     EXPECT_STREQ("1***5", anonymizedStr);
302     AnonymizeFree(anonymizedStr);
303 
304     Anonymize("123456", &anonymizedStr);
305     EXPECT_STREQ("1***56", anonymizedStr);
306     AnonymizeFree(anonymizedStr);
307 
308     Anonymize("1234567", &anonymizedStr);
309     EXPECT_STREQ("1****67", anonymizedStr);
310     AnonymizeFree(anonymizedStr);
311 
312     Anonymize("12345678", &anonymizedStr);
313     EXPECT_STREQ("12****78", anonymizedStr);
314     AnonymizeFree(anonymizedStr);
315 
316     Anonymize("123456789", &anonymizedStr);
317     EXPECT_STREQ("12*****89", anonymizedStr);
318     AnonymizeFree(anonymizedStr);
319 
320     Anonymize("1234567890", &anonymizedStr);
321     EXPECT_STREQ("12*****890", anonymizedStr);
322     AnonymizeFree(anonymizedStr);
323 }
324 
325 /**
326  * @tc.name: AnonymizeTest014
327  * @tc.desc: Test anonymize invalid utf-8 str
328  * @tc.type: FUNC
329  * @tc.require:
330  */
331 HWTEST_F(AnonymizerTest, AnonymizeTest014, TestSize.Level0)
332 {
333     char *anonymizedStr = nullptr;
334     const char *invalidUTF8Str = "invalid \xC0";
335 
336     Anonymize(invalidUTF8Str, &anonymizedStr);
337     EXPECT_STREQ(invalidUTF8Str, anonymizedStr);
338     AnonymizeFree(anonymizedStr);
339 }
340 
341 /**
342  * @tc.name: AnonymizeDeviceNameTest001
343  * @tc.desc: Test anonymize device name
344  * @tc.type: FUNC
345  * @tc.require:
346  */
347 HWTEST_F(AnonymizerTest, AnonymizeDeviceNameTest001, TestSize.Level0)
348 {
349     const char *plainStr = nullptr;
350     EXPECT_NO_FATAL_FAILURE(Anonymize(plainStr, nullptr));
351 
352     char *anonymizedStr = nullptr;
353     AnonymizeDeviceName(plainStr, &anonymizedStr);
354     EXPECT_STREQ("NULL", anonymizedStr);
355     AnonymizeFree(anonymizedStr);
356 
357     char emptyStr[DEVICE_NAME_MAX_LEN] = {0};
358     AnonymizeDeviceName(emptyStr, &anonymizedStr);
359     EXPECT_STREQ("EMPTY", anonymizedStr);
360     AnonymizeFree(anonymizedStr);
361 }
362 
363 /**
364  * @tc.name: AnonymizeDeviceNameTest002
365  * @tc.desc: Test anonymize nick device name
366  * @tc.type: FUNC
367  * @tc.require:
368  */
369 HWTEST_F(AnonymizerTest, AnonymizeDeviceNameTest002, TestSize.Level0)
370 {
371     char *anonymizedStr = nullptr;
372 
373     AnonymizeDeviceName("张的Mxxe 00 Pxx", &anonymizedStr);
374     EXPECT_STREQ("张*********Pxx", anonymizedStr);
375     AnonymizeFree(anonymizedStr);
376 
377     AnonymizeDeviceName("张三-Mxxe 00 Pxx", &anonymizedStr);
378     EXPECT_STREQ("张**********Pxx", anonymizedStr);
379     AnonymizeFree(anonymizedStr);
380 
381     AnonymizeDeviceName("张三的Mxxe 00 Pxx+", &anonymizedStr);
382     EXPECT_STREQ("张***********xx+", anonymizedStr);
383     AnonymizeFree(anonymizedStr);
384 
385     AnonymizeDeviceName("abcdefghijklmnopqrst的Mxxe 00 Pxx+", &anonymizedStr);
386     EXPECT_STREQ("a*****************************xx+", anonymizedStr);
387     AnonymizeFree(anonymizedStr);
388 
389     AnonymizeDeviceName("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈的Mxxe 00 Pxx+", &anonymizedStr);
390     EXPECT_STREQ("哈*****************************xx+", anonymizedStr);
391     AnonymizeFree(anonymizedStr);
392 
393     AnonymizeDeviceName("zhang-san-sanaaaaaaa-Mxxe 00 Pxx+", &anonymizedStr);
394     EXPECT_STREQ("z*****************************xx+", anonymizedStr);
395     AnonymizeFree(anonymizedStr);
396 
397     AnonymizeDeviceName("张的三的四的一二三四-1234-5678-Mxxe 00 Pxx+", &anonymizedStr);
398     EXPECT_STREQ("张*****************************xx+", anonymizedStr);
399     AnonymizeFree(anonymizedStr);
400 }
401 
402 /**
403  * @tc.name: AnonymizeDeviceNameTest003
404  * @tc.desc: Test anonymize user defined device name
405  * @tc.type: FUNC
406  * @tc.require:
407  */
408 HWTEST_F(AnonymizerTest, AnonymizeDeviceNameTest003, TestSize.Level0)
409 {
410     char *anonymizedStr = nullptr;
411 
412     AnonymizeDeviceName("a", &anonymizedStr);
413     EXPECT_STREQ("*", anonymizedStr);
414     AnonymizeFree(anonymizedStr);
415 
416     AnonymizeDeviceName("ab", &anonymizedStr);
417     EXPECT_STREQ("*b", anonymizedStr);
418     AnonymizeFree(anonymizedStr);
419 
420     AnonymizeDeviceName("张三1", &anonymizedStr);
421     EXPECT_STREQ("**1", anonymizedStr);
422     AnonymizeFree(anonymizedStr);
423 
424     AnonymizeDeviceName("张三李四", &anonymizedStr);
425     EXPECT_STREQ("张**四", anonymizedStr);
426     AnonymizeFree(anonymizedStr);
427 
428     AnonymizeDeviceName("张三w李四王", &anonymizedStr);
429     EXPECT_STREQ("张***四王", anonymizedStr);
430     AnonymizeFree(anonymizedStr);
431 
432     AnonymizeDeviceName("张三w李12四", &anonymizedStr);
433     EXPECT_STREQ("张****2四", anonymizedStr);
434     AnonymizeFree(anonymizedStr);
435 
436     AnonymizeDeviceName("张三w李123四", &anonymizedStr);
437     EXPECT_STREQ("张****23四", anonymizedStr);
438     AnonymizeFree(anonymizedStr);
439 
440     AnonymizeDeviceName("zhagnsan李si", &anonymizedStr);
441     EXPECT_STREQ("z*******李si", anonymizedStr);
442     AnonymizeFree(anonymizedStr);
443 
444     AnonymizeDeviceName("aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb"
445         "aaaaaaaaaaaaaaaaaaaa", &anonymizedStr);
446     EXPECT_STREQ("a**************************************************************************************"
447         "**********aaa", anonymizedStr);
448     AnonymizeFree(anonymizedStr);
449 
450     AnonymizeDeviceName("一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三1", &anonymizedStr);
451     EXPECT_STREQ("一******************************二三1", anonymizedStr);
452     AnonymizeFree(anonymizedStr);
453 }
454 } // namespace OHOS
455