| /* 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 <data-dir> <platform-dir>\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); |
| } |