/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* * test_colcertstore.c * * Test CollectionCertStore Type * */ #include "testutil.h" #include "testutil_nss.h" /* When CRL IDP is supported, change NUM_CRLS to 9 */ #define PKIX_TEST_COLLECTIONCERTSTORE_NUM_CRLS 4 #define PKIX_TEST_COLLECTIONCERTSTORE_NUM_CERTS 15 static void *plContext = NULL; static PKIX_Error * testCRLSelectorMatchCallback( PKIX_CRLSelector *selector, PKIX_PL_CRL *crl, PKIX_Boolean *pMatch, void *plContext) { *pMatch = PKIX_TRUE; return (0); } static PKIX_Error * testCertSelectorMatchCallback( PKIX_CertSelector *selector, PKIX_PL_Cert *cert, PKIX_Boolean *pResult, void *plContext) { *pResult = PKIX_TRUE; return (0); } static PKIX_Error * getCertCallback( PKIX_CertStore *store, PKIX_CertSelector *certSelector, PKIX_List **pCerts, void *plContext) { return (0); } static char * catDirName(char *platform, char *dir, void *plContext) { char *pathName = NULL; PKIX_UInt32 dirLen; PKIX_UInt32 platformLen; PKIX_TEST_STD_VARS(); dirLen = PL_strlen(dir); platformLen = PL_strlen(platform); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Malloc(platformLen + dirLen + 2, (void **)&pathName, plContext)); PL_strcpy(pathName, platform); PL_strcat(pathName, "/"); PL_strcat(pathName, dir); cleanup: PKIX_TEST_RETURN(); return (pathName); } static void testGetCRL(char *crlDir) { PKIX_PL_String *dirString = NULL; PKIX_CertStore_CRLCallback crlCallback; PKIX_CertStore *certStore = NULL; PKIX_CRLSelector *crlSelector = NULL; PKIX_List *crlList = NULL; PKIX_UInt32 numCrl = 0; void *nbioContext = NULL; PKIX_TEST_STD_VARS(); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, crlDir, 0, &dirString, plContext)); subTest("PKIX_PL_CollectionCertStore_Create"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CollectionCertStore_Create(dirString, &certStore, plContext)); subTest("PKIX_CRLSelector_Create"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_CRLSelector_Create(testCRLSelectorMatchCallback, NULL, &crlSelector, plContext)); subTest("PKIX_CertStore_GetCRLCallback"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertStore_GetCRLCallback(certStore, &crlCallback, NULL)); subTest("Getting data from CRL Callback"); PKIX_TEST_EXPECT_NO_ERROR(crlCallback(certStore, crlSelector, &nbioContext, &crlList, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(crlList, &numCrl, plContext)); if (numCrl != PKIX_TEST_COLLECTIONCERTSTORE_NUM_CRLS) { pkixTestErrorMsg = "unexpected CRL number mismatch"; } cleanup: PKIX_TEST_DECREF_AC(dirString); PKIX_TEST_DECREF_AC(crlList); PKIX_TEST_DECREF_AC(crlSelector); PKIX_TEST_DECREF_AC(certStore); PKIX_TEST_RETURN(); } static void testGetCert(char *certDir) { PKIX_PL_String *dirString = NULL; PKIX_CertStore_CertCallback certCallback; PKIX_CertStore *certStore = NULL; PKIX_CertSelector *certSelector = NULL; PKIX_List *certList = NULL; PKIX_UInt32 numCert = 0; void *nbioContext = NULL; PKIX_TEST_STD_VARS(); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, certDir, 0, &dirString, plContext)); subTest("PKIX_PL_CollectionCertStore_Create"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CollectionCertStore_Create(dirString, &certStore, plContext)); subTest("PKIX_CertSelector_Create"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertSelector_Create(testCertSelectorMatchCallback, NULL, &certSelector, plContext)); subTest("PKIX_CertStore_GetCertCallback"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertStore_GetCertCallback(certStore, &certCallback, NULL)); subTest("Getting data from Cert Callback"); PKIX_TEST_EXPECT_NO_ERROR(certCallback(certStore, certSelector, &nbioContext, &certList, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(certList, &numCert, plContext)); if (numCert != PKIX_TEST_COLLECTIONCERTSTORE_NUM_CERTS) { pkixTestErrorMsg = "unexpected Cert number mismatch"; } cleanup: PKIX_TEST_DECREF_AC(dirString); PKIX_TEST_DECREF_AC(certList); PKIX_TEST_DECREF_AC(certSelector); PKIX_TEST_DECREF_AC(certStore); PKIX_TEST_RETURN(); } static void printUsage(char *pName) { printf("\nUSAGE: %s test-purpose \n\n", pName); } /* Functional tests for CollectionCertStore public functions */ int test_colcertstore(int argc, char *argv[]) { PKIX_UInt32 actualMinorVersion; PKIX_UInt32 j = 0; char *platformDir = NULL; char *dataDir = NULL; char *combinedDir = NULL; PKIX_TEST_STD_VARS(); startTests("CollectionCertStore"); PKIX_TEST_EXPECT_NO_ERROR( PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); if (argc < (3 + j)) { printUsage(argv[0]); return (0); } dataDir = argv[2 + j]; platformDir = argv[3 + j]; combinedDir = catDirName(platformDir, dataDir, plContext); testGetCRL(combinedDir); testGetCert(combinedDir); cleanup: pkixTestErrorResult = PKIX_PL_Free(combinedDir, plContext); PKIX_Shutdown(plContext); PKIX_TEST_RETURN(); endTests("CollectionCertStore"); return (0); }