Blame nss/cmd/libpkix/pkix/results/test_policynode.c

Packit 40b132
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit 40b132
/*
Packit 40b132
 * test_policynode.c
Packit 40b132
 *
Packit 40b132
 * Test PolicyNode Type
Packit 40b132
 *
Packit 40b132
 */
Packit 40b132
Packit 40b132
#include "testutil.h"
Packit 40b132
#include "testutil_nss.h"
Packit 40b132
Packit 40b132
static void *plContext =  NULL;
Packit 40b132
Packit 40b132
static void
Packit 40b132
test_GetChildren(
Packit 40b132
        PKIX_PolicyNode *goodNode,
Packit 40b132
        PKIX_PolicyNode *equalNode,
Packit 40b132
        PKIX_PolicyNode *diffNode)
Packit 40b132
{
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * Caution: be careful where you insert this test. PKIX_PolicyNode_GetChildren
Packit 40b132
 * is required by the API to return an immutable List, and it does it by setting
Packit 40b132
 * the List immutable. We don't make a copy because the assumption is that
Packit 40b132
 * certificate and policy processing have been completed before the user gets at
Packit 40b132
 * the public API. So subsequent tests of functions that modify the policy tree,
Packit 40b132
 * such as Prune, will fail if called after the execution of this test.
Packit 40b132
 */
Packit 40b132
Packit 40b132
        PKIX_Boolean isImmutable = PKIX_FALSE;
Packit 40b132
        PKIX_List *goodList = NULL;
Packit 40b132
        PKIX_List *equalList = NULL;
Packit 40b132
        PKIX_List *diffList = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_GetChildren");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetChildren
Packit 40b132
                (goodNode, &goodList, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetChildren
Packit 40b132
                (equalNode, &equalList, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetChildren
Packit 40b132
                (diffNode, &diffList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodList, equalList, diffList, NULL, List, NULL);
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsImmutable
Packit 40b132
                (goodList, &isImmutable, plContext));
Packit 40b132
Packit 40b132
        if (isImmutable != PKIX_TRUE) {
Packit 40b132
            testError("PKIX_PolicyNode_GetChildren returned a mutable List");
Packit 40b132
        }
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
        PKIX_TEST_DECREF_AC(goodList);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalList);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffList);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
test_GetParent(
Packit 40b132
        PKIX_PolicyNode *goodNode,
Packit 40b132
        PKIX_PolicyNode *equalNode,
Packit 40b132
        PKIX_PolicyNode *diffNode,
Packit 40b132
        char *expectedAscii)
Packit 40b132
{
Packit 40b132
        PKIX_PolicyNode *goodParent = NULL;
Packit 40b132
        PKIX_PolicyNode *equalParent = NULL;
Packit 40b132
        PKIX_PolicyNode *diffParent = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_GetParent");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetParent
Packit 40b132
                (goodNode, &goodParent, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetParent
Packit 40b132
                (equalNode, &equalParent, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetParent
Packit 40b132
                (diffNode, &diffParent, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodParent,
Packit 40b132
                equalParent,
Packit 40b132
                diffParent,
Packit 40b132
                expectedAscii,
Packit 40b132
                CertPolicyNode,
Packit 40b132
                NULL);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
        PKIX_TEST_DECREF_AC(goodParent);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalParent);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffParent);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * This test is the same as testDuplicateHelper, except that it
Packit 40b132
 * produces a more useful "Actual value" and "Expected value"
Packit 40b132
 * in the case of an unexpected mismatch.
Packit 40b132
 */
Packit 40b132
static void
Packit 40b132
test_DuplicateHelper(PKIX_PolicyNode *object, void *plContext)
Packit 40b132
{
Packit 40b132
        PKIX_PolicyNode *newObject = NULL;
Packit 40b132
        PKIX_Boolean cmpResult;
Packit 40b132
        PKIX_PL_String *original = NULL;
Packit 40b132
        PKIX_PL_String *copy = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("testing pkix_PolicyNode_Duplicate");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Duplicate
Packit 40b132
                ((PKIX_PL_Object *)object,
Packit 40b132
                (PKIX_PL_Object **)&newObject,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Equals
Packit 40b132
                ((PKIX_PL_Object *)object,
Packit 40b132
                (PKIX_PL_Object *)newObject,
Packit 40b132
                &cmpResult,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        if (!cmpResult){
Packit 40b132
                PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString
Packit 40b132
                        ((PKIX_PL_Object*)object, &original, plContext));
Packit 40b132
                testError("unexpected mismatch");
Packit 40b132
                (void) printf
Packit 40b132
                        ("original value:\t%s\n", original->escAsciiString);
Packit 40b132
Packit 40b132
                if (newObject) {
Packit 40b132
                        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString
Packit 40b132
                                ((PKIX_PL_Object*)newObject, &copy, plContext));
Packit 40b132
                        (void) printf
Packit 40b132
                                ("copy value:\t%s\n", copy->escAsciiString);
Packit 40b132
                } else {
Packit 40b132
                        (void) printf("copy value:\t(NULL)\n");
Packit 40b132
                }
Packit 40b132
        }
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(newObject);
Packit 40b132
        PKIX_TEST_DECREF_AC(original);
Packit 40b132
        PKIX_TEST_DECREF_AC(copy);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
test_GetValidPolicy(
Packit 40b132
        PKIX_PolicyNode *goodNode,
Packit 40b132
        PKIX_PolicyNode *equalNode,
Packit 40b132
        PKIX_PolicyNode *diffNode,
Packit 40b132
        char *expectedAscii)
Packit 40b132
{
Packit 40b132
        PKIX_PL_OID *goodPolicy = NULL;
Packit 40b132
        PKIX_PL_OID *equalPolicy = NULL;
Packit 40b132
        PKIX_PL_OID *diffPolicy = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_GetValidPolicy");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetValidPolicy
Packit 40b132
                (goodNode, &goodPolicy, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetValidPolicy
Packit 40b132
                (equalNode, &equalPolicy, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetValidPolicy
Packit 40b132
                (diffNode, &diffPolicy, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodPolicy, equalPolicy, diffPolicy, expectedAscii, OID, NULL);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
        PKIX_TEST_DECREF_AC(goodPolicy);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalPolicy);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffPolicy);
Packit 40b132
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void test_GetPolicyQualifiers(
Packit 40b132
        PKIX_PolicyNode *goodNode,
Packit 40b132
        PKIX_PolicyNode *equalNode,
Packit 40b132
        PKIX_PolicyNode *diffNode,
Packit 40b132
        char *expectedAscii)
Packit 40b132
{
Packit 40b132
        PKIX_Boolean isImmutable = PKIX_FALSE;
Packit 40b132
        PKIX_List *goodList = NULL;
Packit 40b132
        PKIX_List *equalList = NULL;
Packit 40b132
        PKIX_List *diffList = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_GetPolicyQualifiers");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetPolicyQualifiers
Packit 40b132
                (goodNode, &goodList, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetPolicyQualifiers
Packit 40b132
                (equalNode, &equalList, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetPolicyQualifiers
Packit 40b132
                (diffNode, &diffList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodList, equalList, diffList, expectedAscii, List, plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsImmutable
Packit 40b132
                (goodList, &isImmutable, plContext));
Packit 40b132
Packit 40b132
        if (isImmutable != PKIX_TRUE) {
Packit 40b132
            testError
Packit 40b132
                ("PKIX_PolicyNode_GetPolicyQualifiers returned a mutable List");
Packit 40b132
        }
Packit 40b132
cleanup:
Packit 40b132
        PKIX_TEST_DECREF_AC(goodList);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalList);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffList);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void test_GetExpectedPolicies(
Packit 40b132
        PKIX_PolicyNode *goodNode,
Packit 40b132
        PKIX_PolicyNode *equalNode,
Packit 40b132
        PKIX_PolicyNode *diffNode,
Packit 40b132
        char *expectedAscii)
Packit 40b132
{
Packit 40b132
        PKIX_Boolean isImmutable = PKIX_FALSE;
Packit 40b132
        PKIX_List *goodList = NULL;
Packit 40b132
        PKIX_List *equalList = NULL;
Packit 40b132
        PKIX_List *diffList = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_GetExpectedPolicies");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetExpectedPolicies
Packit 40b132
                (goodNode, &goodList, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetExpectedPolicies
Packit 40b132
                (equalNode, &equalList, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetExpectedPolicies
Packit 40b132
                (diffNode, &diffList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodList, equalList, diffList, expectedAscii, List, plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsImmutable
Packit 40b132
                (goodList, &isImmutable, plContext));
Packit 40b132
Packit 40b132
        if (isImmutable != PKIX_TRUE) {
Packit 40b132
            testError
Packit 40b132
                ("PKIX_PolicyNode_GetExpectedPolicies returned a mutable List");
Packit 40b132
        }
Packit 40b132
cleanup:
Packit 40b132
        PKIX_TEST_DECREF_AC(goodList);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalList);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffList);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void test_IsCritical(
Packit 40b132
        PKIX_PolicyNode *goodNode,
Packit 40b132
        PKIX_PolicyNode *equalNode,
Packit 40b132
        PKIX_PolicyNode *diffNode)
Packit 40b132
{
Packit 40b132
        PKIX_Boolean goodBool = PKIX_FALSE;
Packit 40b132
        PKIX_Boolean equalBool = PKIX_FALSE;
Packit 40b132
        PKIX_Boolean diffBool = PKIX_FALSE;
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_IsCritical");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_IsCritical
Packit 40b132
                (goodNode, &goodBool, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_IsCritical
Packit 40b132
                (equalNode, &equalBool, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_IsCritical
Packit 40b132
                (diffNode, &diffBool, plContext));
Packit 40b132
Packit 40b132
        if ((!goodBool) || (!equalBool) || (diffBool)) {
Packit 40b132
                testError("IsCritical returned unexpected value");
Packit 40b132
        }
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void test_GetDepth(
Packit 40b132
        PKIX_PolicyNode *depth1Node,
Packit 40b132
        PKIX_PolicyNode *depth2Node,
Packit 40b132
        PKIX_PolicyNode *depth3Node)
Packit 40b132
{
Packit 40b132
        PKIX_UInt32 depth1 = 0;
Packit 40b132
        PKIX_UInt32 depth2 = 0;
Packit 40b132
        PKIX_UInt32 depth3 = 0;
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PolicyNode_GetDepth");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetDepth
Packit 40b132
                (depth1Node, &depth1, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetDepth
Packit 40b132
                (depth2Node, &depth2, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PolicyNode_GetDepth
Packit 40b132
                (depth3Node, &depth3, plContext));
Packit 40b132
Packit 40b132
        if ((depth1 != 1) || (depth2 != 2) || (depth3 != 3)) {
Packit 40b132
                testError("GetDepth returned unexpected value");
Packit 40b132
        }
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static
Packit 40b132
void printUsage(void) {
Packit 40b132
        (void) printf("\nUSAGE:\ttest_policynode <NIST_FILES_DIR> \n\n");
Packit 40b132
}
Packit 40b132
Packit 40b132
int test_policynode(int argc, char *argv[]) {
Packit 40b132
Packit 40b132
        /*
Packit 40b132
         * Create a tree with parent = anyPolicy,
Packit 40b132
         * child1 with Nist1+Nist2, child2 with Nist1.
Packit 40b132
         * Give each child another child, with policies Nist2
Packit 40b132
         * and Nist1, respectively. Pruning with a depth of two
Packit 40b132
         * should have no effect. Give one of the children
Packit 40b132
         * another child. Then pruning with a depth of three
Packit 40b132
         * should reduce the tree to a single strand, as child1
Packit 40b132
         * and child3 are removed.
Packit 40b132
         *
Packit 40b132
         *              parent (anyPolicy)
Packit 40b132
         *          /                   \
Packit 40b132
         *      child1(Nist1+Nist2)     child2(Nist1)
Packit 40b132
         *          |                       |
Packit 40b132
         *      child3(Nist2)           child4(Nist1)
Packit 40b132
         *                                  |
Packit 40b132
         *                              child5(Nist1)
Packit 40b132
         *
Packit 40b132
         */
Packit 40b132
        char *asciiAnyPolicy = "2.5.29.32.0";
Packit 40b132
        PKIX_PL_Cert *cert = NULL;
Packit 40b132
        PKIX_PL_CertPolicyInfo *nist1Policy = NULL;
Packit 40b132
        PKIX_PL_CertPolicyInfo *nist2Policy = NULL;
Packit 40b132
        PKIX_List *policyQualifierList = NULL;
Packit 40b132
        PKIX_PL_OID *oidAnyPolicy = NULL;
Packit 40b132
        PKIX_PL_OID *oidNist1Policy = NULL;
Packit 40b132
        PKIX_PL_OID *oidNist2Policy = NULL;
Packit 40b132
        PKIX_List *expectedAnyList = NULL;
Packit 40b132
        PKIX_List *expectedNist1List = NULL;
Packit 40b132
        PKIX_List *expectedNist2List = NULL;
Packit 40b132
        PKIX_List *expectedNist1Nist2List = NULL;
Packit 40b132
        PKIX_List *emptyList = NULL;
Packit 40b132
        PKIX_PolicyNode *parentNode = NULL;
Packit 40b132
        PKIX_PolicyNode *childNode1 = NULL;
Packit 40b132
        PKIX_PolicyNode *childNode2 = NULL;
Packit 40b132
        PKIX_PolicyNode *childNode3 = NULL;
Packit 40b132
        PKIX_PolicyNode *childNode4 = NULL;
Packit 40b132
        PKIX_PolicyNode *childNode5 = NULL;
Packit 40b132
        PKIX_PL_String *parentString = NULL;
Packit 40b132
        PKIX_Boolean pDelete = PKIX_FALSE;
Packit 40b132
        char *expectedParentAscii =
Packit 40b132
                "{2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30 5C "
Packit 40b132
                "1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 65"
Packit 40b132
                " 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D 2"
Packit 40b132
                "0 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 69 "
Packit 40b132
                "73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 66"
Packit 40b132
                " 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20 6"
Packit 40b132
                "F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1[(1.3"
Packit 40b132
                ".6.1.5.5.7.2.2:[30 5C 1A 5A 71 31 3A 20 20 54 68 69 7"
Packit 40b132
                "3 20 69 73 20 74 68 65 20 75 73 65 72 20 6E 6F 74 69 "
Packit 40b132
                "63 65 20 66 72 6F 6D 20 71 75 61 6C 69 66 69 65 72 20"
Packit 40b132
                " 31 2E 20 20 54 68 69 73 20 63 65 72 74 69 66 69 63 6"
Packit 40b132
                "1 74 65 20 69 73 20 66 6F 72 20 74 65 73 74 20 70 75 "
Packit 40b132
                "72 70 6F 73 65 73 20 6F 6E 6C 79])], 2.16.840.1.101.3"
Packit 40b132
                ".2.1.48.2[(1.3.6.1.5.5.7.2.2:[30 5A 1A 58 71 32 3A 20"
Packit 40b132
                " 20 54 68 69 73 20 69 73 20 74 68 65 20 75 73 65 72 2"
Packit 40b132
                "0 6E 6F 74 69 63 65 20 66 72 6F 6D 20 71 75 61 6C 69 "
Packit 40b132
                "66 69 65 72 20 32 2E 20 20 54 68 69 73 20 75 73 65 72"
Packit 40b132
                " 20 6E 6F 74 69 63 65 20 73 68 6F 75 6C 64 20 6E 6F 7"
Packit 40b132
                "4 20 62 65 20 64 69 73 70 6C 61 79 65 64])]),1}\n"
Packit 40b132
                ". {2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30 5"
Packit 40b132
                "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 "
Packit 40b132
                "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D"
Packit 40b132
                " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6"
Packit 40b132
                "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 "
Packit 40b132
                "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20"
Packit 40b132
                " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.2),2}";
Packit 40b132
        char *expectedValidAscii =
Packit 40b132
                "2.16.840.1.101.3.2.1.48.2";
Packit 40b132
        char *expectedQualifiersAscii =
Packit 40b132
                /* "(1.3.6.1.5.5.7.2.2)"; */
Packit 40b132
                "(1.3.6.1.5.5.7.2.2:[30 5C 1A 5A 71 31 3A 20 20 54 68 "
Packit 40b132
                "69 73 20 69 73 20 74 68 65 20 75 73 65 72 20 6E 6F 74"
Packit 40b132
                " 69 63 65 20 66 72 6F 6D 20 71 75 61 6C 69 66 69 65 7"
Packit 40b132
                "2 20 31 2E 20 20 54 68 69 73 20 63 65 72 74 69 66 69 "
Packit 40b132
                "63 61 74 65 20 69 73 20 66 6F 72 20 74 65 73 74 20 70"
Packit 40b132
                " 75 72 70 6F 73 65 73 20 6F 6E 6C 79])";
Packit 40b132
        char *expectedPoliciesAscii =
Packit 40b132
                "(2.16.840.1.101.3.2.1.48.1)";
Packit 40b132
        char *expectedTree =
Packit 40b132
                "{2.5.29.32.0,{},Critical,(2.5.29.32.0),0}\n"
Packit 40b132
                ". {2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30 5"
Packit 40b132
                "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 "
Packit 40b132
                "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D"
Packit 40b132
                " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6"
Packit 40b132
                "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 "
Packit 40b132
                "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20"
Packit 40b132
                " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1[(1"
Packit 40b132
                ".3.6.1.5.5.7.2.2:[30 5C 1A 5A 71 31 3A 20 20 54 68 69"
Packit 40b132
                " 73 20 69 73 20 74 68 65 20 75 73 65 72 20 6E 6F 74 6"
Packit 40b132
                "9 63 65 20 66 72 6F 6D 20 71 75 61 6C 69 66 69 65 72 "
Packit 40b132
                "20 31 2E 20 20 54 68 69 73 20 63 65 72 74 69 66 69 63"
Packit 40b132
                " 61 74 65 20 69 73 20 66 6F 72 20 74 65 73 74 20 70 7"
Packit 40b132
                "5 72 70 6F 73 65 73 20 6F 6E 6C 79])], 2.16.840.1.101"
Packit 40b132
                ".3.2.1.48.2[(1.3.6.1.5.5.7.2.2:[30 5A 1A 58 71 32 3A "
Packit 40b132
                "20 20 54 68 69 73 20 69 73 20 74 68 65 20 75 73 65 72"
Packit 40b132
                " 20 6E 6F 74 69 63 65 20 66 72 6F 6D 20 71 75 61 6C 6"
Packit 40b132
                "9 66 69 65 72 20 32 2E 20 20 54 68 69 73 20 75 73 65 "
Packit 40b132
                "72 20 6E 6F 74 69 63 65 20 73 68 6F 75 6C 64 20 6E 6F"
Packit 40b132
                " 74 20 62 65 20 64 69 73 70 6C 61 79 65 64])]"
Packit 40b132
                "),1}\n"
Packit 40b132
                ". . {2.16.840.1.101.3.2.1.48.2,(1.3.6.1.5.5.7.2.2:[30"
Packit 40b132
                " 5C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 6"
Packit 40b132
                "8 65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F "
Packit 40b132
                "6D 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68"
Packit 40b132
                " 69 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 2"
Packit 40b132
                "0 66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 "
Packit 40b132
                "20 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.2)"
Packit 40b132
                ",2}\n"
Packit 40b132
                ". {2.16.840.1.101.3.2.1.48.1,(1.3.6.1.5.5.7.2.2:[30 5"
Packit 40b132
                "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 "
Packit 40b132
                "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D"
Packit 40b132
                " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6"
Packit 40b132
                "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 "
Packit 40b132
                "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20"
Packit 40b132
                " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1),1}\n"
Packit 40b132
                ". . {2.16.840.1.101.3.2.1.48.1,(EMPTY),Not Critical,"
Packit 40b132
                "(2.16.840.1.101.3.2.1.48.1),2}\n"
Packit 40b132
                ". . . {2.16.840.1.101.3.2.1.48.1,{},Critical,(2.16.84"
Packit 40b132
                "0.1.101.3.2.1.48.1),3}";
Packit 40b132
        char *expectedPrunedTree =
Packit 40b132
                "{2.5.29.32.0,{},Critical,(2.5.29.32.0),0}\n"
Packit 40b132
                ". {2.16.840.1.101.3.2.1.48.1,(1.3.6.1.5.5.7.2.2:[30 5"
Packit 40b132
                "C 1A 5A 71 31 3A 20 20 54 68 69 73 20 69 73 20 74 68 "
Packit 40b132
                "65 20 75 73 65 72 20 6E 6F 74 69 63 65 20 66 72 6F 6D"
Packit 40b132
                " 20 71 75 61 6C 69 66 69 65 72 20 31 2E 20 20 54 68 6"
Packit 40b132
                "9 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 "
Packit 40b132
                "66 6F 72 20 74 65 73 74 20 70 75 72 70 6F 73 65 73 20"
Packit 40b132
                " 6F 6E 6C 79]),Critical,(2.16.840.1.101.3.2.1.48.1),1}\n"
Packit 40b132
                ". . {2.16.840.1.101.3.2.1.48.1,(EMPTY),Not Critical,"
Packit 40b132
                "(2.16.840.1.101.3.2.1.48.1),2}\n"
Packit 40b132
                ". . . {2.16.840.1.101.3.2.1.48.1,{},Critical,(2.16.84"
Packit 40b132
                "0.1.101.3.2.1.48.1),3}";
Packit 40b132
Packit 40b132
        PKIX_UInt32 actualMinorVersion;
Packit 40b132
        PKIX_UInt32 j = 0;
Packit 40b132
        char *dirName = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        if (argc < 2) {
Packit 40b132
                printUsage();
Packit 40b132
                return (0);
Packit 40b132
        }
Packit 40b132
Packit 40b132
        startTests("PolicyNode");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
            PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
Packit 40b132
Packit 40b132
        dirName = argv[j+1];
Packit 40b132
Packit 40b132
        subTest("Creating OID objects");
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create
Packit 40b132
                (asciiAnyPolicy, &oidAnyPolicy, plContext));
Packit 40b132
Packit 40b132
        /* Read certificates to get real policies, qualifiers */
Packit 40b132
Packit 40b132
        cert = createCert
Packit 40b132
                (dirName, "UserNoticeQualifierTest16EE.crt", plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Cert_GetPolicyInformation
Packit 40b132
                (cert, &expectedNist1Nist2List, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem
Packit 40b132
                (expectedNist1Nist2List,
Packit 40b132
                0,
Packit 40b132
                (PKIX_PL_Object **)&nist1Policy,
Packit 40b132
                plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem
Packit 40b132
                (expectedNist1Nist2List,
Packit 40b132
                1,
Packit 40b132
                (PKIX_PL_Object **)&nist2Policy,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CertPolicyInfo_GetPolQualifiers
Packit 40b132
                (nist1Policy, &policyQualifierList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CertPolicyInfo_GetPolicyId
Packit 40b132
                (nist1Policy, &oidNist1Policy, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CertPolicyInfo_GetPolicyId
Packit 40b132
                (nist2Policy, &oidNist2Policy, plContext));
Packit 40b132
Packit 40b132
        subTest("Creating expectedPolicy List objects");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_List_Create(&expectedAnyList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_List_Create(&expectedNist1List, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_List_Create(&expectedNist2List, plContext));
Packit 40b132
Packit 40b132
Packit 40b132
        subTest("Populating expectedPolicy List objects");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem
Packit 40b132
                (expectedAnyList, (PKIX_PL_Object *)oidAnyPolicy, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_List_AppendItem
Packit 40b132
                (expectedNist1List,
Packit 40b132
                (PKIX_PL_Object *)oidNist1Policy,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem
Packit 40b132
                                    (expectedNist2List,
Packit 40b132
                                    (PKIX_PL_Object *)oidNist2Policy,
Packit 40b132
                                    plContext));
Packit 40b132
Packit 40b132
        subTest("Creating PolicyNode objects");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&emptyList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create
Packit 40b132
                (oidAnyPolicy,
Packit 40b132
                NULL,
Packit 40b132
                PKIX_TRUE,
Packit 40b132
                expectedAnyList,
Packit 40b132
                &parentNode,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create
Packit 40b132
                (oidNist2Policy,
Packit 40b132
                policyQualifierList,
Packit 40b132
                PKIX_TRUE,
Packit 40b132
                expectedNist1Nist2List,
Packit 40b132
                &childNode1,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create
Packit 40b132
                (oidNist1Policy,
Packit 40b132
                policyQualifierList,
Packit 40b132
                PKIX_TRUE,
Packit 40b132
                expectedNist1List,
Packit 40b132
                &childNode2,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create
Packit 40b132
                (oidNist2Policy,
Packit 40b132
                policyQualifierList,
Packit 40b132
                PKIX_TRUE,
Packit 40b132
                expectedNist2List,
Packit 40b132
                &childNode3,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create
Packit 40b132
                (oidNist1Policy,
Packit 40b132
                emptyList,
Packit 40b132
                PKIX_FALSE,
Packit 40b132
                expectedNist1List,
Packit 40b132
                &childNode4,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Create
Packit 40b132
                (oidNist1Policy,
Packit 40b132
                NULL,
Packit 40b132
                PKIX_TRUE,
Packit 40b132
                expectedNist1List,
Packit 40b132
                &childNode5,
Packit 40b132
                plContext));
Packit 40b132
Packit 40b132
        subTest("Creating the PolicyNode tree");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent
Packit 40b132
                (parentNode, childNode1, plContext));
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent
Packit 40b132
                (parentNode, childNode2, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent
Packit 40b132
                (childNode1, childNode3, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent
Packit 40b132
                (childNode2, childNode4, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_AddToParent
Packit 40b132
                (childNode4, childNode5, plContext));
Packit 40b132
Packit 40b132
        subTest("Displaying PolicyNode objects");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString
Packit 40b132
                ((PKIX_PL_Object*)parentNode, &parentString, plContext));
Packit 40b132
        (void) printf("parentNode is\n\t%s\n", parentString->escAsciiString);
Packit 40b132
Packit 40b132
        testToStringHelper
Packit 40b132
                ((PKIX_PL_Object*)parentNode, expectedTree, plContext);
Packit 40b132
Packit 40b132
        test_DuplicateHelper(parentNode, plContext);
Packit 40b132
Packit 40b132
        test_GetParent(childNode3, childNode3, childNode4, expectedParentAscii);
Packit 40b132
        test_GetValidPolicy
Packit 40b132
                (childNode1, childNode3, parentNode, expectedValidAscii);
Packit 40b132
        test_GetPolicyQualifiers
Packit 40b132
                (childNode1, childNode3, childNode4, expectedQualifiersAscii);
Packit 40b132
        test_GetExpectedPolicies
Packit 40b132
                (childNode2, childNode4, childNode3, expectedPoliciesAscii);
Packit 40b132
        test_IsCritical(childNode1, childNode2, childNode4);
Packit 40b132
        test_GetDepth(childNode2, childNode4, childNode5);
Packit 40b132
Packit 40b132
        subTest("pkix_PolicyNode_Prune");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Prune
Packit 40b132
                (parentNode, 2, &pDelete, plContext));
Packit 40b132
Packit 40b132
        testToStringHelper
Packit 40b132
                ((PKIX_PL_Object*)parentNode, expectedTree, plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(pkix_PolicyNode_Prune
Packit 40b132
                (parentNode, 3, &pDelete, plContext));
Packit 40b132
Packit 40b132
        testToStringHelper
Packit 40b132
                ((PKIX_PL_Object*)parentNode, expectedPrunedTree, plContext);
Packit 40b132
Packit 40b132
        test_GetChildren(parentNode, parentNode, childNode2);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(cert);
Packit 40b132
        PKIX_TEST_DECREF_AC(nist1Policy);
Packit 40b132
        PKIX_TEST_DECREF_AC(nist2Policy);
Packit 40b132
        PKIX_TEST_DECREF_AC(policyQualifierList);
Packit 40b132
        PKIX_TEST_DECREF_AC(oidAnyPolicy);
Packit 40b132
        PKIX_TEST_DECREF_AC(oidNist1Policy);
Packit 40b132
        PKIX_TEST_DECREF_AC(oidNist2Policy);
Packit 40b132
        PKIX_TEST_DECREF_AC(expectedAnyList);
Packit 40b132
        PKIX_TEST_DECREF_AC(expectedNist1List);
Packit 40b132
        PKIX_TEST_DECREF_AC(expectedNist2List);
Packit 40b132
        PKIX_TEST_DECREF_AC(expectedNist1Nist2List);
Packit 40b132
        PKIX_TEST_DECREF_AC(emptyList);
Packit 40b132
        PKIX_TEST_DECREF_AC(parentNode);
Packit 40b132
        PKIX_TEST_DECREF_AC(childNode1);
Packit 40b132
        PKIX_TEST_DECREF_AC(childNode2);
Packit 40b132
        PKIX_TEST_DECREF_AC(childNode3);
Packit 40b132
        PKIX_TEST_DECREF_AC(childNode4);
Packit 40b132
        PKIX_TEST_DECREF_AC(childNode5);
Packit 40b132
        PKIX_TEST_DECREF_AC(parentString);
Packit 40b132
Packit 40b132
        PKIX_Shutdown(plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
Packit 40b132
        endTests("PolicyNode");
Packit 40b132
Packit 40b132
        return (0);
Packit 40b132
}