Blame nss/cmd/libpkix/pkix_pl/system/test_oid.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_oid.c
Packit 40b132
 *
Packit 40b132
 * Test OID Types
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
createOID(
Packit 40b132
        PKIX_PL_OID **testOID,
Packit 40b132
        char *oidAscii,
Packit 40b132
        PKIX_Boolean errorHandling)
Packit 40b132
{
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        if (errorHandling){
Packit 40b132
                PKIX_TEST_EXPECT_ERROR
Packit 40b132
                        (PKIX_PL_OID_Create(oidAscii, testOID, plContext));
Packit 40b132
        } else {
Packit 40b132
                PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                        (PKIX_PL_OID_Create(oidAscii, testOID, plContext));
Packit 40b132
        }
Packit 40b132
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
testToString(
Packit 40b132
        PKIX_PL_OID *oid,
Packit 40b132
        char *expAscii)
Packit 40b132
{
Packit 40b132
        PKIX_PL_String *oidString = NULL;
Packit 40b132
        char *temp = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString
Packit 40b132
                                    ((PKIX_PL_Object*)oid,
Packit 40b132
                                    &oidString, plContext));
Packit 40b132
Packit 40b132
        temp = PKIX_String2ASCII(oidString, plContext);
Packit 40b132
        if (temp == NULL){
Packit 40b132
                testError("PKIX_String2Ascii failed");
Packit 40b132
                goto cleanup;
Packit 40b132
        }
Packit 40b132
Packit 40b132
        if (PL_strcmp(temp, expAscii) != 0) {
Packit 40b132
                (void) printf("\tOid ToString: %s %s\n", temp, expAscii);
Packit 40b132
                testError("Output string does not match source");
Packit 40b132
        }
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext));
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(oidString);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
testCompare(
Packit 40b132
            PKIX_PL_OID *oid0,
Packit 40b132
            PKIX_PL_OID *oid1,
Packit 40b132
            PKIX_PL_OID *oid2,
Packit 40b132
            PKIX_PL_OID *oid3)
Packit 40b132
{
Packit 40b132
        PKIX_Int32 cmpResult;
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object*)oid0,
Packit 40b132
                                            (PKIX_PL_Object*)oid1,
Packit 40b132
                                            &cmpResult, plContext));
Packit 40b132
        if (cmpResult <= 0) testError("Invalid Result from OID Compare");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object*)oid1,
Packit 40b132
                                        (PKIX_PL_Object*)oid0,
Packit 40b132
                                        &cmpResult, plContext));
Packit 40b132
        if (cmpResult >= 0) testError("Invalid Result from OID Compare");
Packit 40b132
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object*)oid1,
Packit 40b132
                                        (PKIX_PL_Object*)oid2,
Packit 40b132
                                        &cmpResult, plContext));
Packit 40b132
        if (cmpResult >= 0) testError("Invalid Result from OID Compare");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object*)oid2,
Packit 40b132
                                        (PKIX_PL_Object*)oid1,
Packit 40b132
                                        &cmpResult, plContext));
Packit 40b132
        if (cmpResult <= 0) testError("Invalid Result from OID Compare");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object*)oid1,
Packit 40b132
                                        (PKIX_PL_Object*)oid3,
Packit 40b132
                                        &cmpResult, plContext));
Packit 40b132
        if (cmpResult != 0) testError("Invalid Result from OID Compare");
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
testDestroy(
Packit 40b132
        PKIX_PL_OID *oid)
Packit 40b132
{
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_BC(oid);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
Packit 40b132
int test_oid(int argc, char *argv[]) {
Packit 40b132
Packit 40b132
        PKIX_PL_OID *testOID[6] = {NULL};
Packit 40b132
        PKIX_PL_OID *badTestOID = NULL;
Packit 40b132
        PKIX_UInt32 i, size = 6;
Packit 40b132
        PKIX_UInt32 actualMinorVersion;
Packit 40b132
        PKIX_UInt32 j = 0;
Packit 40b132
Packit 40b132
        char* validOID[6] = {
Packit 40b132
                "2.11.22222.33333",
Packit 40b132
                "1.2.3.004.5.6.7",
Packit 40b132
                "2.11.22222.33333",
Packit 40b132
                "1.2.3.4.5.6.7",
Packit 40b132
                "1.2.3",
Packit 40b132
                "2.39.3"
Packit 40b132
        };
Packit 40b132
Packit 40b132
        char* expected[6] = {
Packit 40b132
                "2.11.22222.33333",
Packit 40b132
                "1.2.3.4.5.6.7",
Packit 40b132
                "2.11.22222.33333",
Packit 40b132
                "1.2.3.4.5.6.7",
Packit 40b132
                "1.2.3",
Packit 40b132
                "2.39.3"
Packit 40b132
        };
Packit 40b132
Packit 40b132
        char *badOID[11] = {
Packit 40b132
                "1.2.4294967299",
Packit 40b132
                "this. is. a. bad. oid",
Packit 40b132
                "00a1000.002b",
Packit 40b132
                "100.-5.10",
Packit 40b132
                "1.2..3",
Packit 40b132
                ".1.2.3",
Packit 40b132
                "1.2.3.",
Packit 40b132
                "00010.1.2.3",
Packit 40b132
                "1.000041.2.3",
Packit 40b132
                "000000000000000000000000000000000000000010.3.2",
Packit 40b132
                "1"
Packit 40b132
        };
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        startTests("OIDs");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
            PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
Packit 40b132
Packit 40b132
        for (i = 0; i < size; i++) {
Packit 40b132
                subTest("PKIX_PL_OID_Create");
Packit 40b132
                createOID(&testOID[i], validOID[i], PKIX_FALSE);
Packit 40b132
        }
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (testOID[0],
Packit 40b132
                testOID[2],
Packit 40b132
                testOID[1],
Packit 40b132
                NULL,
Packit 40b132
                OID,
Packit 40b132
                PKIX_FALSE);
Packit 40b132
Packit 40b132
        for (i = 0; i < size; i++) {
Packit 40b132
                subTest("PKIX_PL_OID_ToString");
Packit 40b132
                testToString(testOID[i], expected[i]);
Packit 40b132
        }
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_OID_Compare");
Packit 40b132
        testCompare(testOID[0], testOID[1], testOID[2], testOID[3]);
Packit 40b132
Packit 40b132
        for (i = 0; i < size; i++) {
Packit 40b132
                subTest("PKIX_PL_OID_Destroy");
Packit 40b132
                testDestroy(testOID[i]);
Packit 40b132
        }
Packit 40b132
Packit 40b132
        for (i = 0; i < 11; i++) {
Packit 40b132
                subTest("PKIX_PL_OID Error Handling");
Packit 40b132
                createOID(&badTestOID, badOID[i], PKIX_TRUE);
Packit 40b132
        }
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_Shutdown(plContext);
Packit 40b132
Packit 40b132
        endTests("OIDs");
Packit 40b132
Packit 40b132
        return (0);
Packit 40b132
Packit 40b132
}