test_policynode.c (24118B)
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_policynode.c 6 * 7 * Test PolicyNode Type 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 static void *plContext = NULL; 15 16 static void 17 test_GetChildren( 18 PKIX_PolicyNode *goodNode, 19 PKIX_PolicyNode *equalNode, 20 PKIX_PolicyNode *diffNode) 21 { 22 23 /* 24 * Caution: be careful where you insert this test. PKIX_PolicyNode_GetChildren 25 * is required by the API to return an immutable List, and it does it by setting 26 * the List immutable. We don't make a copy because the assumption is that 27 * certificate and policy processing have been completed before the user gets at 28 * the public API. So subsequent tests of functions that modify the policy tree, 29 * such as Prune, will fail if called after the execution of this test. 30 */ 31 32 PKIX_Boolean isImmutable = PKIX_FALSE; 33 PKIX_List *goodList = NULL; 34 PKIX_List *equalList = NULL; 35 PKIX_List *diffList = NULL; 36 37 PKIX_TEST_STD_VARS(); 38 39 subTest("PKIX_PolicyNode_GetChildren"); 40 41 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetChildren(goodNode, &goodList, plContext)); 42 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetChildren(equalNode, &equalList, plContext)); 43 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetChildren(diffNode, &diffList, plContext)); 44 45 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodList, equalList, diffList, NULL, List, NULL); 46 47 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsImmutable(goodList, &isImmutable, plContext)); 48 49 if (isImmutable != PKIX_TRUE) { 50 testError("PKIX_PolicyNode_GetChildren returned a mutable List"); 51 } 52 53 cleanup: 54 PKIX_TEST_DECREF_AC(goodList); 55 PKIX_TEST_DECREF_AC(equalList); 56 PKIX_TEST_DECREF_AC(diffList); 57 58 PKIX_TEST_RETURN(); 59 } 60 61 static void 62 test_GetParent( 63 PKIX_PolicyNode *goodNode, 64 PKIX_PolicyNode *equalNode, 65 PKIX_PolicyNode *diffNode, 66 char *expectedAscii) 67 { 68 PKIX_PolicyNode *goodParent = NULL; 69 PKIX_PolicyNode *equalParent = NULL; 70 PKIX_PolicyNode *diffParent = NULL; 71 72 PKIX_TEST_STD_VARS(); 73 74 subTest("PKIX_PolicyNode_GetParent"); 75 76 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetParent(goodNode, &goodParent, plContext)); 77 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetParent(equalNode, &equalParent, plContext)); 78 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetParent(diffNode, &diffParent, plContext)); 79 80 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodParent, 81 equalParent, 82 diffParent, 83 expectedAscii, 84 CertPolicyNode, 85 NULL); 86 87 cleanup: 88 PKIX_TEST_DECREF_AC(goodParent); 89 PKIX_TEST_DECREF_AC(equalParent); 90 PKIX_TEST_DECREF_AC(diffParent); 91 92 PKIX_TEST_RETURN(); 93 } 94 95 /* 96 * This test is the same as testDuplicateHelper, except that it 97 * produces a more useful "Actual value" and "Expected value" 98 * in the case of an unexpected mismatch. 99 */ 100 static void 101 test_DuplicateHelper(PKIX_PolicyNode *object, void *plContext) 102 { 103 PKIX_PolicyNode *newObject = NULL; 104 PKIX_Boolean cmpResult; 105 PKIX_PL_String *original = NULL; 106 PKIX_PL_String *copy = NULL; 107 108 PKIX_TEST_STD_VARS(); 109 110 subTest("testing pkix_PolicyNode_Duplicate"); 111 112 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Duplicate((PKIX_PL_Object *)object, 113 (PKIX_PL_Object **)&newObject, 114 plContext)); 115 116 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals((PKIX_PL_Object *)object, 117 (PKIX_PL_Object *)newObject, 118 &cmpResult, 119 plContext)); 120 121 if (!cmpResult) { 122 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)object, &original, plContext)); 123 testError("unexpected mismatch"); 124 (void)printf("original value:\t%s\n", original->escAsciiString); 125 126 if (newObject) { 127 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)newObject, ©, plContext)); 128 (void)printf("copy value:\t%s\n", copy->escAsciiString); 129 } else { 130 (void)printf("copy value:\t(NULL)\n"); 131 } 132 } 133 134 cleanup: 135 136 PKIX_TEST_DECREF_AC(newObject); 137 PKIX_TEST_DECREF_AC(original); 138 PKIX_TEST_DECREF_AC(copy); 139 140 PKIX_TEST_RETURN(); 141 } 142 143 static void 144 test_GetValidPolicy( 145 PKIX_PolicyNode *goodNode, 146 PKIX_PolicyNode *equalNode, 147 PKIX_PolicyNode *diffNode, 148 char *expectedAscii) 149 { 150 PKIX_PL_OID *goodPolicy = NULL; 151 PKIX_PL_OID *equalPolicy = NULL; 152 PKIX_PL_OID *diffPolicy = NULL; 153 154 PKIX_TEST_STD_VARS(); 155 156 subTest("PKIX_PolicyNode_GetValidPolicy"); 157 158 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetValidPolicy(goodNode, &goodPolicy, plContext)); 159 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetValidPolicy(equalNode, &equalPolicy, plContext)); 160 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetValidPolicy(diffNode, &diffPolicy, plContext)); 161 162 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodPolicy, equalPolicy, diffPolicy, expectedAscii, OID, NULL); 163 164 cleanup: 165 PKIX_TEST_DECREF_AC(goodPolicy); 166 PKIX_TEST_DECREF_AC(equalPolicy); 167 PKIX_TEST_DECREF_AC(diffPolicy); 168 169 PKIX_TEST_RETURN(); 170 } 171 172 static void 173 test_GetPolicyQualifiers( 174 PKIX_PolicyNode *goodNode, 175 PKIX_PolicyNode *equalNode, 176 PKIX_PolicyNode *diffNode, 177 char *expectedAscii) 178 { 179 PKIX_Boolean isImmutable = PKIX_FALSE; 180 PKIX_List *goodList = NULL; 181 PKIX_List *equalList = NULL; 182 PKIX_List *diffList = NULL; 183 184 PKIX_TEST_STD_VARS(); 185 186 subTest("PKIX_PolicyNode_GetPolicyQualifiers"); 187 188 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetPolicyQualifiers(goodNode, &goodList, plContext)); 189 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetPolicyQualifiers(equalNode, &equalList, plContext)); 190 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetPolicyQualifiers(diffNode, &diffList, plContext)); 191 192 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodList, equalList, diffList, expectedAscii, List, plContext); 193 194 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsImmutable(goodList, &isImmutable, plContext)); 195 196 if (isImmutable != PKIX_TRUE) { 197 testError("PKIX_PolicyNode_GetPolicyQualifiers returned a mutable List"); 198 } 199 cleanup: 200 PKIX_TEST_DECREF_AC(goodList); 201 PKIX_TEST_DECREF_AC(equalList); 202 PKIX_TEST_DECREF_AC(diffList); 203 204 PKIX_TEST_RETURN(); 205 } 206 207 static void 208 test_GetExpectedPolicies( 209 PKIX_PolicyNode *goodNode, 210 PKIX_PolicyNode *equalNode, 211 PKIX_PolicyNode *diffNode, 212 char *expectedAscii) 213 { 214 PKIX_Boolean isImmutable = PKIX_FALSE; 215 PKIX_List *goodList = NULL; 216 PKIX_List *equalList = NULL; 217 PKIX_List *diffList = NULL; 218 219 PKIX_TEST_STD_VARS(); 220 221 subTest("PKIX_PolicyNode_GetExpectedPolicies"); 222 223 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetExpectedPolicies(goodNode, &goodList, plContext)); 224 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetExpectedPolicies(equalNode, &equalList, plContext)); 225 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetExpectedPolicies(diffNode, &diffList, plContext)); 226 227 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodList, equalList, diffList, expectedAscii, List, plContext); 228 229 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsImmutable(goodList, &isImmutable, plContext)); 230 231 if (isImmutable != PKIX_TRUE) { 232 testError("PKIX_PolicyNode_GetExpectedPolicies returned a mutable List"); 233 } 234 cleanup: 235 PKIX_TEST_DECREF_AC(goodList); 236 PKIX_TEST_DECREF_AC(equalList); 237 PKIX_TEST_DECREF_AC(diffList); 238 239 PKIX_TEST_RETURN(); 240 } 241 242 static void 243 test_IsCritical( 244 PKIX_PolicyNode *goodNode, 245 PKIX_PolicyNode *equalNode, 246 PKIX_PolicyNode *diffNode) 247 { 248 PKIX_Boolean goodBool = PKIX_FALSE; 249 PKIX_Boolean equalBool = PKIX_FALSE; 250 PKIX_Boolean diffBool = PKIX_FALSE; 251 PKIX_TEST_STD_VARS(); 252 253 subTest("PKIX_PolicyNode_IsCritical"); 254 255 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_IsCritical(goodNode, &goodBool, plContext)); 256 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_IsCritical(equalNode, &equalBool, plContext)); 257 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_IsCritical(diffNode, &diffBool, plContext)); 258 259 if ((!goodBool) || (!equalBool) || (diffBool)) { 260 testError("IsCritical returned unexpected value"); 261 } 262 cleanup: 263 264 PKIX_TEST_RETURN(); 265 } 266 267 static void 268 test_GetDepth( 269 PKIX_PolicyNode *depth1Node, 270 PKIX_PolicyNode *depth2Node, 271 PKIX_PolicyNode *depth3Node) 272 { 273 PKIX_UInt32 depth1 = 0; 274 PKIX_UInt32 depth2 = 0; 275 PKIX_UInt32 depth3 = 0; 276 PKIX_TEST_STD_VARS(); 277 278 subTest("PKIX_PolicyNode_GetDepth"); 279 280 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetDepth(depth1Node, &depth1, plContext)); 281 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetDepth(depth2Node, &depth2, plContext)); 282 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetDepth(depth3Node, &depth3, plContext)); 283 284 if ((depth1 != 1) || (depth2 != 2) || (depth3 != 3)) { 285 testError("GetDepth returned unexpected value"); 286 } 287 288 cleanup: 289 290 PKIX_TEST_RETURN(); 291 } 292 293 static void 294 printUsage(void) 295 { 296 (void)printf("\nUSAGE:\ttest_policynode <NIST_FILES_DIR> \n\n"); 297 } 298 299 int 300 test_policynode(int argc, char *argv[]) 301 { 302 303 /* 304 * Create a tree with parent = anyPolicy, 305 * child1 with Nist1+Nist2, child2 with Nist1. 306 * Give each child another child, with policies Nist2 307 * and Nist1, respectively. Pruning with a depth of two 308 * should have no effect. Give one of the children 309 * another child. Then pruning with a depth of three 310 * should reduce the tree to a single strand, as child1 311 * and child3 are removed. 312 * 313 * parent (anyPolicy) 314 * / \ 315 * child1(Nist1+Nist2) child2(Nist1) 316 * | | 317 * child3(Nist2) child4(Nist1) 318 * | 319 * child5(Nist1) 320 * 321 */ 322 char *asciiAnyPolicy = "2.5.29.32.0"; 323 PKIX_PL_Cert *cert = NULL; 324 PKIX_PL_CertPolicyInfo *nist1Policy = NULL; 325 PKIX_PL_CertPolicyInfo *nist2Policy = NULL; 326 PKIX_List *policyQualifierList = NULL; 327 PKIX_PL_OID *oidAnyPolicy = NULL; 328 PKIX_PL_OID *oidNist1Policy = NULL; 329 PKIX_PL_OID *oidNist2Policy = NULL; 330 PKIX_List *expectedAnyList = NULL; 331 PKIX_List *expectedNist1List = NULL; 332 PKIX_List *expectedNist2List = NULL; 333 PKIX_List *expectedNist1Nist2List = NULL; 334 PKIX_List *emptyList = NULL; 335 PKIX_PolicyNode *parentNode = NULL; 336 PKIX_PolicyNode *childNode1 = NULL; 337 PKIX_PolicyNode *childNode2 = NULL; 338 PKIX_PolicyNode *childNode3 = NULL; 339 PKIX_PolicyNode *childNode4 = NULL; 340 PKIX_PolicyNode *childNode5 = NULL; 341 PKIX_PL_String *parentString = NULL; 342 PKIX_Boolean pDelete = PKIX_FALSE; 343 char *expectedParentAscii = 344 "{2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30 5C " 345 "1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 65" 346 " 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D 2" 347 "0 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 69 " 348 "73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 66" 349 " 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20 6" 350 "F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1[(1.3" 351 ".6.1.5.5.7.2.2:[30 5C 1A 5A 71 31 3A 20 20 54 68 69 7" 352 "3 20 69 73 20 74 68 65 20 75 73 65 72 20 6E 6F 74 69 " 353 "63 65 20 66 72 6F 6D 20 71 75 61 6C 69 66 69 65 72 20" 354 " 31 2E 20 20 54 68 69 73 20 63 65 72 74 69 66 69 63 6" 355 "1 74 65 20 69 73 20 66 6F 72 20 74 65 73 74 20 70 75 " 356 "72 70 6F 73 65 73 20 6F 6E 6C 79])], 2.16.840.1.101.3" 357 ".2.1.48.2[(1.3.6.1.5.5.7.2.2:[30 5A 1A 58 71 32 3A 20" 358 " 20 54 68 69 73 20 69 73 20 74 68 65 20 75 73 65 72 2" 359 "0 6E 6F 74 69 63 65 20 66 72 6F 6D 20 71 75 61 6C 69 " 360 "66 69 65 72 20 32 2E 20 20 54 68 69 73 20 75 73 65 72" 361 " 20 6E 6F 74 69 63 65 20 73 68 6F 75 6C 64 20 6E 6F 7" 362 "4 20 62 65 20 64 69 73 70 6C 61 79 65 64])]),1}\n" 363 ". {2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30 5" 364 "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 " 365 "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D" 366 " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6" 367 "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 " 368 "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20" 369 " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.2),2}"; 370 char *expectedValidAscii = 371 "2.16.840.1.101.3.2.1.48.2"; 372 char *expectedQualifiersAscii = 373 /* "(1.3.6.1.5.5.7.2.2)"; */ 374 "(1.3.6.1.5.5.7.2.2:[30 5C 1A 5A 71 31 3A 20 20 54 68 " 375 "69 73 20 69 73 20 74 68 65 20 75 73 65 72 20 6E 6F 74" 376 " 69 63 65 20 66 72 6F 6D 20 71 75 61 6C 69 66 69 65 7" 377 "2 20 31 2E 20 20 54 68 69 73 20 63 65 72 74 69 66 69 " 378 "63 61 74 65 20 69 73 20 66 6F 72 20 74 65 73 74 20 70" 379 " 75 72 70 6F 73 65 73 20 6F 6E 6C 79])"; 380 char *expectedPoliciesAscii = 381 "(2.16.840.1.101.3.2.1.48.1)"; 382 char *expectedTree = 383 "{2.5.29.32.0,{},Critical,(2.5.29.32.0),0}\n" 384 ". {2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30 5" 385 "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 " 386 "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D" 387 " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6" 388 "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 " 389 "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20" 390 " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1[(1" 391 ".3.6.1.5.5.7.2.2:[30 5C 1A 5A 71 31 3A 20 20 54 68 69" 392 " 73 20 69 73 20 74 68 65 20 75 73 65 72 20 6E 6F 74 6" 393 "9 63 65 20 66 72 6F 6D 20 71 75 61 6C 69 66 69 65 72 " 394 "20 31 2E 20 20 54 68 69 73 20 63 65 72 74 69 66 69 63" 395 " 61 74 65 20 69 73 20 66 6F 72 20 74 65 73 74 20 70 7" 396 "5 72 70 6F 73 65 73 20 6F 6E 6C 79])], 2.16.840.1.101" 397 ".3.2.1.48.2[(1.3.6.1.5.5.7.2.2:[30 5A 1A 58 71 32 3A " 398 "20 20 54 68 69 73 20 69 73 20 74 68 65 20 75 73 65 72" 399 " 20 6E 6F 74 69 63 65 20 66 72 6F 6D 20 71 75 61 6C 6" 400 "9 66 69 65 72 20 32 2E 20 20 54 68 69 73 20 75 73 65 " 401 "72 20 6E 6F 74 69 63 65 20 73 68 6F 75 6C 64 20 6E 6F" 402 " 74 20 62 65 20 64 69 73 70 6C 61 79 65 64])]" 403 "),1}\n" 404 ". . {2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30" 405 " 5C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 6" 406 "8 65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F " 407 "6D 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68" 408 " 69 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 2" 409 "0 66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 " 410 "20 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.2)" 411 ",2}\n" 412 ". {2.16.840.1.101.3.2.1.48.1,(1.3.6.1.5.5.7.2.2:[30 5" 413 "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 " 414 "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D" 415 " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6" 416 "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 " 417 "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20" 418 " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1),1}\n" 419 ". . {2.16.840.1.101.3.2.1.48.1,(EMPTY),Not Critical," 420 "(2.16.840.1.101.3.2.1.48.1),2}\n" 421 ". . . {2.16.840.1.101.3.2.1.48.1,{},Critical,(2.16.84" 422 "0.1.101.3.2.1.48.1),3}"; 423 char *expectedPrunedTree = 424 "{2.5.29.32.0,{},Critical,(2.5.29.32.0),0}\n" 425 ". {2.16.840.1.101.3.2.1.48.1,(1.3.6.1.5.5.7.2.2:[30 5" 426 "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 " 427 "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D" 428 " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6" 429 "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 " 430 "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20" 431 " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1),1}\n" 432 ". . {2.16.840.1.101.3.2.1.48.1,(EMPTY),Not Critical," 433 "(2.16.840.1.101.3.2.1.48.1),2}\n" 434 ". . . {2.16.840.1.101.3.2.1.48.1,{},Critical,(2.16.84" 435 "0.1.101.3.2.1.48.1),3}"; 436 437 PKIX_UInt32 actualMinorVersion; 438 PKIX_UInt32 j = 0; 439 char *dirName = NULL; 440 441 PKIX_TEST_STD_VARS(); 442 443 if (argc < 2) { 444 printUsage(); 445 return (0); 446 } 447 448 startTests("PolicyNode"); 449 450 PKIX_TEST_EXPECT_NO_ERROR( 451 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 452 453 dirName = argv[j + 1]; 454 455 subTest("Creating OID objects"); 456 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create(asciiAnyPolicy, &oidAnyPolicy, plContext)); 457 458 /* Read certificates to get real policies, qualifiers */ 459 460 cert = createCert(dirName, "UserNoticeQualifierTest16EE.crt", plContext); 461 462 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Cert_GetPolicyInformation(cert, &expectedNist1Nist2List, plContext)); 463 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(expectedNist1Nist2List, 464 0, 465 (PKIX_PL_Object **)&nist1Policy, 466 plContext)); 467 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(expectedNist1Nist2List, 468 1, 469 (PKIX_PL_Object **)&nist2Policy, 470 plContext)); 471 472 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CertPolicyInfo_GetPolQualifiers(nist1Policy, &policyQualifierList, plContext)); 473 474 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CertPolicyInfo_GetPolicyId(nist1Policy, &oidNist1Policy, plContext)); 475 476 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CertPolicyInfo_GetPolicyId(nist2Policy, &oidNist2Policy, plContext)); 477 478 subTest("Creating expectedPolicy List objects"); 479 480 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&expectedAnyList, plContext)); 481 482 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&expectedNist1List, plContext)); 483 484 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&expectedNist2List, plContext)); 485 486 subTest("Populating expectedPolicy List objects"); 487 488 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(expectedAnyList, (PKIX_PL_Object *)oidAnyPolicy, plContext)); 489 490 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(expectedNist1List, 491 (PKIX_PL_Object *)oidNist1Policy, 492 plContext)); 493 494 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(expectedNist2List, 495 (PKIX_PL_Object *)oidNist2Policy, 496 plContext)); 497 498 subTest("Creating PolicyNode objects"); 499 500 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&emptyList, plContext)); 501 502 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create(oidAnyPolicy, 503 NULL, 504 PKIX_TRUE, 505 expectedAnyList, 506 &parentNode, 507 plContext)); 508 509 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create(oidNist2Policy, 510 policyQualifierList, 511 PKIX_TRUE, 512 expectedNist1Nist2List, 513 &childNode1, 514 plContext)); 515 516 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create(oidNist1Policy, 517 policyQualifierList, 518 PKIX_TRUE, 519 expectedNist1List, 520 &childNode2, 521 plContext)); 522 523 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create(oidNist2Policy, 524 policyQualifierList, 525 PKIX_TRUE, 526 expectedNist2List, 527 &childNode3, 528 plContext)); 529 530 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create(oidNist1Policy, 531 emptyList, 532 PKIX_FALSE, 533 expectedNist1List, 534 &childNode4, 535 plContext)); 536 537 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create(oidNist1Policy, 538 NULL, 539 PKIX_TRUE, 540 expectedNist1List, 541 &childNode5, 542 plContext)); 543 544 subTest("Creating the PolicyNode tree"); 545 546 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent(parentNode, childNode1, plContext)); 547 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent(parentNode, childNode2, plContext)); 548 549 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent(childNode1, childNode3, plContext)); 550 551 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent(childNode2, childNode4, plContext)); 552 553 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent(childNode4, childNode5, plContext)); 554 555 subTest("Displaying PolicyNode objects"); 556 557 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)parentNode, &parentString, plContext)); 558 (void)printf("parentNode is\n\t%s\n", parentString->escAsciiString); 559 560 testToStringHelper((PKIX_PL_Object *)parentNode, expectedTree, plContext); 561 562 test_DuplicateHelper(parentNode, plContext); 563 564 test_GetParent(childNode3, childNode3, childNode4, expectedParentAscii); 565 test_GetValidPolicy(childNode1, childNode3, parentNode, expectedValidAscii); 566 test_GetPolicyQualifiers(childNode1, childNode3, childNode4, expectedQualifiersAscii); 567 test_GetExpectedPolicies(childNode2, childNode4, childNode3, expectedPoliciesAscii); 568 test_IsCritical(childNode1, childNode2, childNode4); 569 test_GetDepth(childNode2, childNode4, childNode5); 570 571 subTest("pkix_PolicyNode_Prune"); 572 573 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Prune(parentNode, 2, &pDelete, plContext)); 574 575 testToStringHelper((PKIX_PL_Object *)parentNode, expectedTree, plContext); 576 577 PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Prune(parentNode, 3, &pDelete, plContext)); 578 579 testToStringHelper((PKIX_PL_Object *)parentNode, expectedPrunedTree, plContext); 580 581 test_GetChildren(parentNode, parentNode, childNode2); 582 583 cleanup: 584 585 PKIX_TEST_DECREF_AC(cert); 586 PKIX_TEST_DECREF_AC(nist1Policy); 587 PKIX_TEST_DECREF_AC(nist2Policy); 588 PKIX_TEST_DECREF_AC(policyQualifierList); 589 PKIX_TEST_DECREF_AC(oidAnyPolicy); 590 PKIX_TEST_DECREF_AC(oidNist1Policy); 591 PKIX_TEST_DECREF_AC(oidNist2Policy); 592 PKIX_TEST_DECREF_AC(expectedAnyList); 593 PKIX_TEST_DECREF_AC(expectedNist1List); 594 PKIX_TEST_DECREF_AC(expectedNist2List); 595 PKIX_TEST_DECREF_AC(expectedNist1Nist2List); 596 PKIX_TEST_DECREF_AC(emptyList); 597 PKIX_TEST_DECREF_AC(parentNode); 598 PKIX_TEST_DECREF_AC(childNode1); 599 PKIX_TEST_DECREF_AC(childNode2); 600 PKIX_TEST_DECREF_AC(childNode3); 601 PKIX_TEST_DECREF_AC(childNode4); 602 PKIX_TEST_DECREF_AC(childNode5); 603 PKIX_TEST_DECREF_AC(parentString); 604 605 PKIX_Shutdown(plContext); 606 607 PKIX_TEST_RETURN(); 608 609 endTests("PolicyNode"); 610 611 return (0); 612 }