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
test_GetChildren(PKIX_PolicyNode * goodNode,PKIX_PolicyNode * equalNode,PKIX_PolicyNode * diffNode)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
test_GetParent(PKIX_PolicyNode * goodNode,PKIX_PolicyNode * equalNode,PKIX_PolicyNode * diffNode,char * expectedAscii)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
test_DuplicateHelper(PKIX_PolicyNode * object,void * plContext)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
test_GetValidPolicy(PKIX_PolicyNode * goodNode,PKIX_PolicyNode * equalNode,PKIX_PolicyNode * diffNode,char * expectedAscii)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
test_GetPolicyQualifiers(PKIX_PolicyNode * goodNode,PKIX_PolicyNode * equalNode,PKIX_PolicyNode * diffNode,char * expectedAscii)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
test_GetExpectedPolicies(PKIX_PolicyNode * goodNode,PKIX_PolicyNode * equalNode,PKIX_PolicyNode * diffNode,char * expectedAscii)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
test_IsCritical(PKIX_PolicyNode * goodNode,PKIX_PolicyNode * equalNode,PKIX_PolicyNode * diffNode)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
test_GetDepth(PKIX_PolicyNode * depth1Node,PKIX_PolicyNode * depth2Node,PKIX_PolicyNode * depth3Node)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
printUsage(void)294 printUsage(void)
295 {
296 (void)printf("\nUSAGE:\ttest_policynode <NIST_FILES_DIR> \n\n");
297 }
298
299 int
test_policynode(int argc,char * argv[])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 }
613