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