test_comcrlselparams.c (13849B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 /* 5 * test_comcrlselparams.c 6 * 7 * Test ComCRLSelParams Type 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 static void *plContext = NULL; 15 16 static void 17 testIssuer(PKIX_ComCRLSelParams *goodObject) 18 { 19 PKIX_PL_String *issuer1String = NULL; 20 PKIX_PL_String *issuer2String = NULL; 21 PKIX_PL_String *issuer3String = NULL; 22 PKIX_PL_X500Name *issuerName1 = NULL; 23 PKIX_PL_X500Name *issuerName2 = NULL; 24 PKIX_PL_X500Name *issuerName3 = NULL; 25 PKIX_List *setIssuerList = NULL; 26 PKIX_List *getIssuerList = NULL; 27 PKIX_PL_String *issuerListString = NULL; 28 char *name1 = "CN=yassir,OU=bcn,OU=east,O=sun,C=us"; 29 char *name2 = "CN=richard,OU=bcn,OU=east,O=sun,C=us"; 30 char *name3 = "CN=hanfei,OU=bcn,OU=east,O=sun,C=us"; 31 PKIX_Int32 length; 32 PKIX_Boolean result = PKIX_FALSE; 33 char *expectedAscii = 34 "(CN=yassir,OU=bcn,OU=east,O=sun," 35 "C=us, CN=richard,OU=bcn,OU=east,O=sun,C=us, " 36 "CN=hanfei,OU=bcn,OU=east,O=sun,C=us)"; 37 38 PKIX_TEST_STD_VARS(); 39 40 subTest("PKIX_ComCRLSelParams Create Issuers"); 41 42 length = PL_strlen(name1); 43 44 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_UTF8, 45 name1, 46 length, 47 &issuer1String, 48 plContext)); 49 50 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Create(issuer1String, 51 &issuerName1, 52 plContext)); 53 54 length = PL_strlen(name2); 55 56 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_UTF8, 57 name2, 58 length, 59 &issuer2String, 60 plContext)); 61 62 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Create(issuer2String, 63 &issuerName2, 64 plContext)); 65 66 length = PL_strlen(name3); 67 68 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_UTF8, 69 name3, 70 length, 71 &issuer3String, 72 plContext)); 73 74 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Create(issuer3String, 75 &issuerName3, 76 plContext)); 77 78 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setIssuerList, plContext)); 79 80 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setIssuerList, 81 (PKIX_PL_Object *)issuerName1, 82 plContext)); 83 84 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setIssuerList, 85 (PKIX_PL_Object *)issuerName2, 86 plContext)); 87 88 subTest("PKIX_ComCRLSelParams_AddIssuerName"); 89 90 /* Test adding an issuer to an empty list */ 91 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_AddIssuerName(goodObject, issuerName3, plContext)); 92 93 subTest("PKIX_ComCRLSelParams_GetIssuerNames"); 94 95 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetIssuerNames(goodObject, &getIssuerList, plContext)); 96 97 /* DECREF for GetIssuerNames */ 98 PKIX_TEST_DECREF_BC(getIssuerList); 99 /* DECREF for AddIssuerName so next SetIssuerName start clean */ 100 PKIX_TEST_DECREF_BC(getIssuerList); 101 102 /* Test setting issuer names on the list */ 103 subTest("PKIX_ComCRLSelParams_SetIssuerNames"); 104 105 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_SetIssuerNames(goodObject, setIssuerList, plContext)); 106 107 subTest("PKIX_ComCRLSelParams_GetIssuerNames"); 108 109 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetIssuerNames(goodObject, &getIssuerList, plContext)); 110 111 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)setIssuerList, 112 (PKIX_PL_Object *)getIssuerList, 113 &result, 114 plContext)); 115 116 if (result != PKIX_TRUE) { 117 pkixTestErrorMsg = "unexpected Issuers mismatch"; 118 } 119 120 /* Test adding an issuer to existing list */ 121 subTest("PKIX_ComCRLSelParams_AddIssuerName"); 122 123 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_AddIssuerName(goodObject, issuerName3, plContext)); 124 125 subTest("PKIX_ComCRLSelParams_GetIssuerNames"); 126 PKIX_TEST_DECREF_BC(getIssuerList); 127 128 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetIssuerNames(goodObject, &getIssuerList, plContext)); 129 130 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)getIssuerList, 131 &issuerListString, 132 plContext)); 133 134 testToStringHelper((PKIX_PL_Object *)getIssuerList, 135 expectedAscii, plContext); 136 137 cleanup: 138 139 PKIX_TEST_DECREF_AC(issuer1String); 140 PKIX_TEST_DECREF_AC(issuer2String); 141 PKIX_TEST_DECREF_AC(issuer3String); 142 PKIX_TEST_DECREF_AC(issuerListString); 143 PKIX_TEST_DECREF_AC(issuerName1); 144 PKIX_TEST_DECREF_AC(issuerName2); 145 PKIX_TEST_DECREF_AC(issuerName3); 146 PKIX_TEST_DECREF_AC(setIssuerList); 147 PKIX_TEST_DECREF_AC(getIssuerList); 148 149 PKIX_TEST_RETURN(); 150 } 151 152 static void 153 testCertificateChecking( 154 char *dataCentralDir, 155 char *goodInput, 156 PKIX_ComCRLSelParams *goodObject) 157 { 158 PKIX_PL_Cert *setCert = NULL; 159 PKIX_PL_Cert *getCert = NULL; 160 PKIX_Boolean result = PKIX_FALSE; 161 162 PKIX_TEST_STD_VARS(); 163 164 subTest("Test CertificateChecking Cert Create"); 165 setCert = createCert(dataCentralDir, goodInput, plContext); 166 if (setCert == NULL) { 167 pkixTestErrorMsg = "create certificate failed"; 168 goto cleanup; 169 } 170 171 subTest("PKIX_ComCRLSelParams_SetCertificateChecking"); 172 173 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_SetCertificateChecking(goodObject, setCert, plContext)); 174 175 subTest("PKIX_ComCRLSelParams_GetCertificateChecking"); 176 177 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetCertificateChecking(goodObject, &getCert, plContext)); 178 179 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)setCert, 180 (PKIX_PL_Object *)getCert, 181 &result, plContext)); 182 183 if (result != PKIX_TRUE) { 184 pkixTestErrorMsg = "unexpected Cert mismatch"; 185 } 186 187 cleanup: 188 189 PKIX_TEST_DECREF_AC(setCert); 190 PKIX_TEST_DECREF_AC(getCert); 191 192 PKIX_TEST_RETURN(); 193 } 194 195 static void 196 testDateAndTime(PKIX_ComCRLSelParams *goodObject) 197 { 198 199 PKIX_PL_Date *setDate = NULL; 200 PKIX_PL_Date *getDate = NULL; 201 char *asciiDate = "040329134847Z"; 202 PKIX_Boolean result = PKIX_FALSE; 203 204 PKIX_TEST_STD_VARS(); 205 206 subTest("PKIX_ComCRLSelParams_Date Create"); 207 setDate = createDate(asciiDate, plContext); 208 209 subTest("PKIX_ComCRLSelParams_SetDateAndTime"); 210 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_SetDateAndTime(goodObject, setDate, plContext)); 211 212 subTest("PKIX_ComCRLSelParams_GetDateAndTime"); 213 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetDateAndTime(goodObject, &getDate, plContext)); 214 215 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)setDate, 216 (PKIX_PL_Object *)getDate, 217 &result, plContext)); 218 219 if (result != PKIX_TRUE) { 220 pkixTestErrorMsg = "unexpected DateAndTime mismatch"; 221 } 222 223 cleanup: 224 225 PKIX_TEST_DECREF_AC(setDate); 226 PKIX_TEST_DECREF_AC(getDate); 227 228 PKIX_TEST_RETURN(); 229 } 230 231 static void 232 testMaxMinCRLNumbers(PKIX_ComCRLSelParams *goodObject) 233 { 234 PKIX_PL_BigInt *setMaxCrlNumber = NULL; 235 PKIX_PL_BigInt *getMaxCrlNumber = NULL; 236 PKIX_PL_BigInt *setMinCrlNumber = NULL; 237 PKIX_PL_BigInt *getMinCrlNumber = NULL; 238 char *asciiCrlNumber1 = "01"; 239 char *asciiCrlNumber99999 = "0909090909"; 240 PKIX_PL_String *crlNumber1String = NULL; 241 PKIX_PL_String *crlNumber99999String = NULL; 242 243 PKIX_Boolean result = PKIX_FALSE; 244 245 PKIX_TEST_STD_VARS(); 246 247 subTest("PKIX_ComCRLSelParams_SetMinCRLNumber"); 248 249 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, 250 asciiCrlNumber1, 251 PL_strlen(asciiCrlNumber1), 252 &crlNumber1String, 253 NULL)); 254 255 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create(crlNumber1String, &setMinCrlNumber, NULL)); 256 257 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_SetMinCRLNumber(goodObject, setMinCrlNumber, NULL)); 258 259 subTest("PKIX_ComCRLSelParams_GetMinCRLNumber"); 260 261 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetMinCRLNumber(goodObject, &getMinCrlNumber, NULL)); 262 263 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)setMinCrlNumber, 264 (PKIX_PL_Object *)getMinCrlNumber, 265 &result, NULL)); 266 267 if (result != PKIX_TRUE) { 268 pkixTestErrorMsg = "unexpected Minimum CRL Number mismatch"; 269 } 270 271 subTest("PKIX_ComCRLSelParams_SetMaxCRLNumber"); 272 273 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, 274 asciiCrlNumber99999, 275 PL_strlen(asciiCrlNumber99999), 276 &crlNumber99999String, 277 NULL)); 278 279 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create(crlNumber99999String, &setMaxCrlNumber, NULL)); 280 281 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_SetMaxCRLNumber(goodObject, setMaxCrlNumber, NULL)); 282 283 subTest("PKIX_ComCRLSelParams_GetMaxCRLNumber"); 284 285 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_GetMaxCRLNumber(goodObject, &getMaxCrlNumber, NULL)); 286 287 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)setMaxCrlNumber, 288 (PKIX_PL_Object *)getMaxCrlNumber, 289 &result, NULL)); 290 291 if (result != PKIX_TRUE) { 292 pkixTestErrorMsg = "unexpected Maximum CRL Number mismatch"; 293 } 294 295 cleanup: 296 297 PKIX_TEST_DECREF_AC(setMaxCrlNumber); 298 PKIX_TEST_DECREF_AC(getMaxCrlNumber); 299 PKIX_TEST_DECREF_AC(setMinCrlNumber); 300 PKIX_TEST_DECREF_AC(getMinCrlNumber); 301 PKIX_TEST_DECREF_AC(crlNumber1String); 302 PKIX_TEST_DECREF_AC(crlNumber99999String); 303 304 PKIX_TEST_RETURN(); 305 } 306 307 static void 308 testDuplicate(PKIX_ComCRLSelParams *goodObject) 309 { 310 311 PKIX_ComCRLSelParams *dupObject = NULL; 312 PKIX_Boolean result = PKIX_FALSE; 313 314 PKIX_TEST_STD_VARS(); 315 316 subTest("PKIX_ComCRLSelParams_Duplicate"); 317 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Duplicate((PKIX_PL_Object *)goodObject, 318 (PKIX_PL_Object **)&dupObject, 319 plContext)); 320 321 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)goodObject, 322 (PKIX_PL_Object *)dupObject, 323 &result, plContext)); 324 325 if (result != PKIX_TRUE) { 326 pkixTestErrorMsg = 327 "unexpected Duplicate ComCRLSelParams mismatch"; 328 } 329 330 cleanup: 331 332 PKIX_TEST_DECREF_AC(dupObject); 333 PKIX_TEST_RETURN(); 334 } 335 336 static void 337 printUsage(char *pName) 338 { 339 printf("\nUSAGE: %s <central-data-dir>\n\n", pName); 340 } 341 342 /* Functional tests for ComCRLSelParams public functions */ 343 344 int 345 test_comcrlselparams(int argc, char *argv[]) 346 { 347 348 char *dataCentralDir = NULL; 349 char *goodInput = "yassir2yassir"; 350 PKIX_ComCRLSelParams *goodObject = NULL; 351 PKIX_ComCRLSelParams *diffObject = NULL; 352 PKIX_UInt32 actualMinorVersion; 353 PKIX_UInt32 j = 0; 354 355 PKIX_TEST_STD_VARS(); 356 357 startTests("ComCRLSelParams"); 358 359 PKIX_TEST_EXPECT_NO_ERROR( 360 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 361 362 if (argc < 2) { 363 printUsage(argv[0]); 364 return (0); 365 } 366 367 dataCentralDir = argv[j + 1]; 368 369 subTest("PKIX_ComCRLSelParams_Create"); 370 371 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_Create(&goodObject, 372 plContext)); 373 374 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ComCRLSelParams_Create(&diffObject, 375 plContext)); 376 377 testIssuer(goodObject); 378 379 testCertificateChecking(dataCentralDir, goodInput, goodObject); 380 381 testDateAndTime(goodObject); 382 383 testMaxMinCRLNumbers(goodObject); 384 385 testDuplicate(goodObject); 386 387 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject, 388 goodObject, 389 diffObject, 390 NULL, 391 ComCRLSelParams, 392 PKIX_TRUE); 393 394 cleanup: 395 396 PKIX_TEST_DECREF_AC(goodObject); 397 PKIX_TEST_DECREF_AC(diffObject); 398 399 PKIX_Shutdown(plContext); 400 401 PKIX_TEST_RETURN(); 402 403 endTests("ComCRLSelParams"); 404 405 return (0); 406 }