test_procparams.c (15218B)
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_procparams.c 6 * 7 * Test ProcessingParams Type 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 static void *plContext = NULL; 15 16 static void 17 testDestroy(void *goodObject, void *equalObject, void *diffObject) 18 { 19 PKIX_TEST_STD_VARS(); 20 21 subTest("PKIX_ProcessingParams_Destroy"); 22 23 PKIX_TEST_DECREF_BC(goodObject); 24 PKIX_TEST_DECREF_BC(equalObject); 25 PKIX_TEST_DECREF_BC(diffObject); 26 27 cleanup: 28 29 PKIX_TEST_RETURN(); 30 } 31 32 static void 33 testGetAnchors( 34 PKIX_ProcessingParams *goodObject, 35 PKIX_ProcessingParams *equalObject) 36 { 37 38 PKIX_List *goodAnchors = NULL; 39 PKIX_List *equalAnchors = NULL; 40 41 PKIX_TEST_STD_VARS(); 42 subTest("PKIX_ProcessingParams_GetTrustAnchors"); 43 44 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTrustAnchors(goodObject, &goodAnchors, plContext)); 45 46 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTrustAnchors(equalObject, &equalAnchors, plContext)); 47 48 testEqualsHelper((PKIX_PL_Object *)goodAnchors, 49 (PKIX_PL_Object *)equalAnchors, 50 PKIX_TRUE, 51 plContext); 52 53 cleanup: 54 55 PKIX_TEST_DECREF_AC(goodAnchors); 56 PKIX_TEST_DECREF_AC(equalAnchors); 57 58 PKIX_TEST_RETURN(); 59 } 60 61 static void 62 testGetSetDate( 63 PKIX_ProcessingParams *goodObject, 64 PKIX_ProcessingParams *equalObject) 65 { 66 67 PKIX_PL_Date *setDate = NULL; 68 PKIX_PL_Date *getDate = NULL; 69 char *asciiDate = "040329134847Z"; 70 71 PKIX_TEST_STD_VARS(); 72 subTest("PKIX_ProcessingParams_Get/SetDate"); 73 74 setDate = createDate(asciiDate, plContext); 75 76 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetDate(goodObject, setDate, plContext)); 77 78 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetDate(goodObject, &getDate, plContext)); 79 80 testEqualsHelper((PKIX_PL_Object *)setDate, 81 (PKIX_PL_Object *)getDate, 82 PKIX_TRUE, 83 plContext); 84 85 /* we want to make sure that goodObject and equalObject are "equal" */ 86 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetDate(equalObject, setDate, plContext)); 87 88 cleanup: 89 90 PKIX_TEST_DECREF_AC(setDate); 91 PKIX_TEST_DECREF_AC(getDate); 92 93 PKIX_TEST_RETURN(); 94 } 95 96 static PKIX_Error * 97 userChecker1cb( 98 PKIX_CertChainChecker *checker, 99 PKIX_PL_Cert *cert, 100 PKIX_List *unresolvedCriticalExtensions, /* list of PKIX_PL_OID */ 101 void **pNBIOContext, 102 void *plContext) 103 { 104 return (NULL); 105 } 106 107 static void 108 testGetSetCertChainCheckers( 109 PKIX_ProcessingParams *goodObject, 110 PKIX_ProcessingParams *equalObject) 111 { 112 113 PKIX_CertChainChecker *checker = NULL; 114 PKIX_List *setCheckersList = NULL; 115 PKIX_List *getCheckersList = NULL; 116 PKIX_PL_Date *date = NULL; 117 char *asciiDate = "040329134847Z"; 118 119 PKIX_TEST_STD_VARS(); 120 subTest("PKIX_ProcessingParams_Get/SetCertChainCheckers"); 121 122 date = createDate(asciiDate, plContext); 123 124 PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertChainChecker_Create(userChecker1cb, 125 PKIX_FALSE, 126 PKIX_FALSE, 127 NULL, 128 (PKIX_PL_Object *)date, 129 &checker, 130 plContext)); 131 132 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setCheckersList, plContext)); 133 134 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setCheckersList, (PKIX_PL_Object *)checker, plContext)); 135 PKIX_TEST_DECREF_BC(checker); 136 137 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetCertChainCheckers(goodObject, setCheckersList, plContext)); 138 139 PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertChainChecker_Create(userChecker1cb, 140 PKIX_FALSE, 141 PKIX_FALSE, 142 NULL, 143 (PKIX_PL_Object *)date, 144 &checker, 145 plContext)); 146 147 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddCertChainChecker(goodObject, checker, plContext)); 148 149 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetCertChainCheckers(goodObject, &getCheckersList, plContext)); 150 151 cleanup: 152 153 PKIX_TEST_DECREF_AC(setCheckersList); 154 PKIX_TEST_DECREF_AC(getCheckersList); 155 PKIX_TEST_DECREF_AC(date); 156 PKIX_TEST_DECREF_BC(checker); 157 158 PKIX_TEST_RETURN(); 159 } 160 161 static PKIX_Error * 162 userChecker2cb( 163 PKIX_RevocationChecker *checker, 164 PKIX_PL_Cert *cert, 165 PKIX_UInt32 *pResult, 166 void *plContext) 167 { 168 return (NULL); 169 } 170 171 static void 172 testGetSetRevocationCheckers( 173 PKIX_ProcessingParams *goodObject, 174 PKIX_ProcessingParams *equalObject) 175 { 176 177 PKIX_RevocationChecker *checker = NULL; 178 PKIX_List *setCheckersList = NULL; 179 PKIX_List *getCheckersList = NULL; 180 PKIX_PL_Date *date = NULL; 181 char *asciiDate = "040329134847Z"; 182 183 PKIX_TEST_STD_VARS(); 184 subTest("PKIX_ProcessingParams_Get/SetRevocationCheckers"); 185 186 date = createDate(asciiDate, plContext); 187 188 PKIX_TEST_EXPECT_NO_ERROR(PKIX_RevocationChecker_Create(userChecker2cb, 189 (PKIX_PL_Object *)date, 190 &checker, 191 plContext)); 192 193 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setCheckersList, plContext)); 194 195 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setCheckersList, 196 (PKIX_PL_Object *)checker, 197 plContext)); 198 PKIX_TEST_DECREF_BC(checker); 199 200 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetRevocationCheckers(goodObject, setCheckersList, plContext)); 201 202 PKIX_TEST_EXPECT_NO_ERROR(PKIX_RevocationChecker_Create(userChecker2cb, 203 (PKIX_PL_Object *)date, 204 &checker, 205 plContext)); 206 207 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddRevocationChecker(goodObject, checker, plContext)); 208 209 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetRevocationCheckers(goodObject, &getCheckersList, plContext)); 210 211 cleanup: 212 213 PKIX_TEST_DECREF_AC(setCheckersList); 214 PKIX_TEST_DECREF_AC(getCheckersList); 215 PKIX_TEST_DECREF_AC(date); 216 PKIX_TEST_DECREF_BC(checker); 217 218 PKIX_TEST_RETURN(); 219 } 220 221 static void 222 testGetSetResourceLimits( 223 PKIX_ProcessingParams *goodObject, 224 PKIX_ProcessingParams *equalObject) 225 226 { 227 PKIX_ResourceLimits *resourceLimits1 = NULL; 228 PKIX_ResourceLimits *resourceLimits2 = NULL; 229 230 PKIX_TEST_STD_VARS(); 231 subTest("PKIX_ProcessingParams_Get/SetResourceLimits"); 232 233 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_Create(&resourceLimits1, plContext)); 234 235 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_Create(&resourceLimits2, plContext)); 236 237 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxFanout(resourceLimits1, 3, plContext)); 238 239 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxDepth(resourceLimits1, 3, plContext)); 240 241 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxTime(resourceLimits1, 2, plContext)); 242 243 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetResourceLimits(goodObject, resourceLimits1, plContext)); 244 245 PKIX_TEST_DECREF_BC(resourceLimits2); 246 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetResourceLimits(goodObject, &resourceLimits2, plContext)); 247 248 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetResourceLimits(equalObject, resourceLimits2, plContext)); 249 250 cleanup: 251 252 PKIX_TEST_DECREF_AC(resourceLimits1); 253 PKIX_TEST_DECREF_AC(resourceLimits2); 254 255 PKIX_TEST_RETURN(); 256 } 257 258 static void 259 testGetSetConstraints(PKIX_ProcessingParams *goodObject) 260 { 261 262 PKIX_CertSelector *setConstraints = NULL; 263 PKIX_CertSelector *getConstraints = NULL; 264 265 PKIX_TEST_STD_VARS(); 266 subTest("PKIX_ProcessingParams_Get/SetTargetCertConstraints"); 267 268 /* 269 * After createConstraints is implemented 270 * setConstraints = createConstraints(); 271 */ 272 273 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetTargetCertConstraints(goodObject, setConstraints, plContext)); 274 275 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTargetCertConstraints(goodObject, &getConstraints, plContext)); 276 277 testEqualsHelper((PKIX_PL_Object *)setConstraints, 278 (PKIX_PL_Object *)getConstraints, 279 PKIX_TRUE, 280 plContext); 281 282 cleanup: 283 284 PKIX_TEST_DECREF_AC(setConstraints); 285 PKIX_TEST_DECREF_AC(getConstraints); 286 287 PKIX_TEST_RETURN(); 288 } 289 290 static void 291 testGetSetInitialPolicies( 292 PKIX_ProcessingParams *goodObject, 293 char *asciiPolicyOID) 294 { 295 PKIX_PL_OID *policyOID = NULL; 296 PKIX_List *setPolicyList = NULL; 297 PKIX_List *getPolicyList = NULL; 298 299 PKIX_TEST_STD_VARS(); 300 subTest("PKIX_ProcessingParams_Get/SetInitialPolicies"); 301 302 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create(asciiPolicyOID, &policyOID, plContext)); 303 304 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setPolicyList, plContext)); 305 306 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setPolicyList, (PKIX_PL_Object *)policyOID, plContext)); 307 308 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetImmutable(setPolicyList, plContext)); 309 310 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetInitialPolicies(goodObject, setPolicyList, plContext)); 311 312 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetInitialPolicies(goodObject, &getPolicyList, plContext)); 313 314 testEqualsHelper((PKIX_PL_Object *)setPolicyList, 315 (PKIX_PL_Object *)getPolicyList, 316 PKIX_TRUE, 317 plContext); 318 319 cleanup: 320 PKIX_TEST_DECREF_AC(policyOID); 321 PKIX_TEST_DECREF_AC(setPolicyList); 322 PKIX_TEST_DECREF_AC(getPolicyList); 323 324 PKIX_TEST_RETURN(); 325 } 326 327 static void 328 testGetSetPolicyQualifiersRejected( 329 PKIX_ProcessingParams *goodObject, 330 PKIX_Boolean rejected) 331 { 332 PKIX_Boolean getRejected = PKIX_FALSE; 333 334 PKIX_TEST_STD_VARS(); 335 subTest("PKIX_ProcessingParams_Get/SetPolicyQualifiersRejected"); 336 337 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetPolicyQualifiersRejected(goodObject, rejected, plContext)); 338 339 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetPolicyQualifiersRejected(goodObject, &getRejected, plContext)); 340 341 if (rejected != getRejected) { 342 testError("GetPolicyQualifiersRejected returned unexpected value"); 343 } 344 345 cleanup: 346 347 PKIX_TEST_RETURN(); 348 } 349 350 static void 351 printUsage(char *pName) 352 { 353 printf("\nUSAGE: %s <central-data-dir>\n\n", pName); 354 } 355 356 int 357 test_procparams(int argc, char *argv[]) 358 { 359 360 PKIX_ProcessingParams *goodObject = NULL; 361 PKIX_ProcessingParams *equalObject = NULL; 362 PKIX_ProcessingParams *diffObject = NULL; 363 PKIX_UInt32 actualMinorVersion; 364 char *dataCentralDir = NULL; 365 PKIX_UInt32 j = 0; 366 367 char *oidAnyPolicy = PKIX_CERTIFICATEPOLICIES_ANYPOLICY_OID; 368 char *oidNist1Policy = "2.16.840.1.101.3.2.1.48.2"; 369 370 char *goodInput = "yassir2yassir"; 371 char *diffInput = "yassir2bcn"; 372 373 char *expectedAscii = 374 "[\n" 375 "\tTrust Anchors: \n" 376 "\t********BEGIN LIST OF TRUST ANCHORS********\n" 377 "\t\t" 378 "([\n" 379 "\tTrusted CA Name: " 380 "CN=yassir,OU=bcn,OU=east,O=sun,C=us\n" 381 "\tTrusted CA PublicKey: ANSI X9.57 DSA Signature\n" 382 "\tInitial Name Constraints:(null)\n" 383 "]\n" 384 ", [\n" 385 "\tTrusted CA Name: OU=bcn,OU=east,O=sun,C=us\n" 386 "\tTrusted CA PublicKey: ANSI X9.57 DSA Signature\n" 387 "\tInitial Name Constraints:(null)\n" 388 "]\n" 389 ")\n" 390 "\t********END LIST OF TRUST ANCHORS********\n" 391 "\tDate: \t\tMon Mar 29 08:48:47 2004\n" 392 "\tTarget Constraints: (null)\n" 393 "\tInitial Policies: (2.5.29.32.0)\n" 394 "\tQualifiers Rejected: FALSE\n" 395 "\tCert Stores: (EMPTY)\n" 396 "\tResource Limits: [\n" 397 "\tMaxTime: 2\n" 398 "\tMaxFanout: 3\n" 399 "\tMaxDepth: 3\n" 400 "]\n\n" 401 "\tCRL Checking Enabled: 0\n" 402 "]\n"; 403 404 PKIX_TEST_STD_VARS(); 405 406 startTests("ProcessingParams"); 407 408 PKIX_TEST_EXPECT_NO_ERROR( 409 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 410 411 if (argc < 2) { 412 printUsage(argv[0]); 413 return (0); 414 } 415 416 dataCentralDir = argv[j + 1]; 417 418 subTest("PKIX_ProcessingParams_Create"); 419 goodObject = createProcessingParams(dataCentralDir, 420 goodInput, 421 diffInput, 422 NULL, 423 NULL, 424 PKIX_FALSE, 425 plContext); 426 427 equalObject = createProcessingParams(dataCentralDir, 428 goodInput, 429 diffInput, 430 NULL, 431 NULL, 432 PKIX_FALSE, 433 plContext); 434 435 diffObject = createProcessingParams(dataCentralDir, 436 diffInput, 437 goodInput, 438 NULL, 439 NULL, 440 PKIX_FALSE, 441 plContext); 442 443 testGetAnchors(goodObject, equalObject); 444 testGetSetDate(goodObject, equalObject); 445 testGetSetCertChainCheckers(goodObject, equalObject); 446 testGetSetRevocationCheckers(goodObject, equalObject); 447 testGetSetResourceLimits(goodObject, equalObject); 448 449 /* 450 * XXX testGetSetConstraints(goodObject); 451 */ 452 453 testGetSetInitialPolicies(goodObject, oidAnyPolicy); 454 testGetSetInitialPolicies(equalObject, oidAnyPolicy); 455 testGetSetInitialPolicies(diffObject, oidNist1Policy); 456 testGetSetPolicyQualifiersRejected(goodObject, PKIX_FALSE); 457 testGetSetPolicyQualifiersRejected(equalObject, PKIX_FALSE); 458 testGetSetPolicyQualifiersRejected(diffObject, PKIX_TRUE); 459 460 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject, 461 equalObject, 462 diffObject, 463 NULL, /* expectedAscii, */ 464 ProcessingParams, 465 PKIX_FALSE); 466 467 testDestroy(goodObject, equalObject, diffObject); 468 469 cleanup: 470 471 PKIX_Shutdown(plContext); 472 473 PKIX_TEST_RETURN(); 474 475 endTests("ProcessingParams"); 476 477 return (0); 478 }