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