/* 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/. */
/*
* testwrapper.c
*
* Wrpper programm for libpkix tests.
*
*/
#include <stdio.h>
#include "nspr.h"
#include "plgetopt.h"
#include "nss.h"
#include "secport.h"
typedef int (*mainTestFn)(
int argc,
char *argv[]);
extern int libpkix_buildthreads(
int argc,
char *argv[]);
extern int nss_threads(
int argc,
char *argv[]);
extern int test_certselector(
int argc,
char *argv[]);
extern int test_comcertselparams(
int argc,
char *argv[]);
extern int test_certchainchecker(
int argc,
char *argv[]);
extern int test_comcrlselparams(
int argc,
char *argv[]);
extern int test_crlselector(
int argc,
char *argv[]);
extern int test_procparams(
int argc,
char *argv[]);
extern int test_resourcelimits(
int argc,
char *argv[]);
extern int test_trustanchor(
int argc,
char *argv[]);
extern int test_valparams(
int argc,
char *argv[]);
extern int test_buildresult(
int argc,
char *argv[]);
extern int test_policynode(
int argc,
char *argv[]);
extern int test_valresult(
int argc,
char *argv[]);
extern int test_verifynode(
int argc,
char *argv[]);
extern int test_store(
int argc,
char *argv[]);
extern int test_basicchecker(
int argc,
char *argv[]);
extern int test_basicconstraintschecker(
int argc,
char *argv[]);
extern int test_buildchain(
int argc,
char *argv[]);
extern int test_buildchain_partialchain(
int argc,
char *argv[]);
extern int test_buildchain_resourcelimits(
int argc,
char *argv[]);
extern int test_buildchain_uchecker(
int argc,
char *argv[]);
extern int test_customcrlchecker(
int argc,
char *argv[]);
extern int test_defaultcrlchecker2stores(
int argc,
char *argv[]);
extern int test_ocsp(
int argc,
char *argv[]);
extern int test_policychecker(
int argc,
char *argv[]);
extern int test_subjaltnamechecker(
int argc,
char *argv[]);
extern int test_validatechain(
int argc,
char *argv[]);
extern int test_validatechain_NB(
int argc,
char *argv[]);
extern int test_validatechain_bc(
int argc,
char *argv[]);
extern int test_error(
int argc,
char *argv[]);
extern int test_list(
int argc,
char *argv[]);
extern int test_list2(
int argc,
char *argv[]);
extern int test_logger(
int argc,
char *argv[]);
extern int test_colcertstore(
int argc,
char *argv[]);
extern int test_ekuchecker(
int argc,
char *argv[]);
extern int test_httpcertstore(
int argc,
char *argv[]);
extern int test_pk11certstore(
int argc,
char *argv[]);
extern int test_socket(
int argc,
char *argv[]);
extern int test_authorityinfoaccess(
int argc,
char *argv[]);
extern int test_cert(
int argc,
char *argv[]);
extern int test_crl(
int argc,
char *argv[]);
extern int test_crlentry(
int argc,
char *argv[]);
extern int test_date(
int argc,
char *argv[]);
extern int test_generalname(
int argc,
char *argv[]);
extern int test_nameconstraints(
int argc,
char *argv[]);
extern int test_subjectinfoaccess(
int argc,
char *argv[]);
extern int test_x500name(
int argc,
char *argv[]);
extern int stress_test(
int argc,
char *argv[]);
extern int test_bigint(
int argc,
char *argv[]);
extern int test_bytearray(
int argc,
char *argv[]);
extern int test_hashtable(
int argc,
char *argv[]);
extern int test_mem(
int argc,
char *argv[]);
extern int test_monitorlock(
int argc,
char *argv[]);
extern int test_mutex(
int argc,
char *argv[]);
extern int test_mutex2(
int argc,
char *argv[]);
extern int test_mutex3(
int argc,
char *argv[]);
extern int test_object(
int argc,
char *argv[]);
extern int test_oid(
int argc,
char *argv[]);
/* Taken out. Problem with build */
/* extern int test_rwlock(int argc, char *argv[]); */
extern int test_string(
int argc,
char *argv[]);
extern int test_string2(
int argc,
char *argv[]);
extern int build_chain(
int argc,
char *argv[]);
extern int dumpcert(
int argc,
char *argv[]);
extern int dumpcrl(
int argc,
char *argv[]);
extern int validate_chain(
int argc,
char *argv[]);
typedef struct {
char *fnName;
mainTestFn fnPointer;
} testFunctionRef;
testFunctionRef testFnRefTable[] = {
{
"libpkix_buildthreads" , libpkix_buildthreads },
{
"nss_threads" , nss_threads },
{
"test_certselector" , test_certselector },
{
"test_comcertselparams" , test_comcertselparams },
{
"test_certchainchecker" , test_certchainchecker },
{
"test_comcrlselparams" , test_comcrlselparams },
{
"test_crlselector" , test_crlselector },
{
"test_procparams" , test_procparams },
{
"test_resourcelimits" , test_resourcelimits },
{
"test_trustanchor" , test_trustanchor },
{
"test_valparams" , test_valparams },
{
"test_buildresult" , test_buildresult },
{
"test_policynode" , test_policynode },
{
"test_valresult" , test_valresult },
{
"test_verifynode" , test_verifynode },
{
"test_store" , test_store },
{
"test_basicchecker" , test_basicchecker },
{
"test_basicconstraintschecker" , test_basicconstraintschecker },
{
"test_buildchain" , test_buildchain },
{
"test_buildchain_partialchain" , test_buildchain_partialchain },
{
"test_buildchain_resourcelimits" , test_buildchain_resourcelimits },
{
"test_buildchain_uchecker" , test_buildchain_uchecker },
{
"test_customcrlchecker" , test_customcrlchecker },
{
"test_defaultcrlchecker2stores" , test_defaultcrlchecker2stores },
{
"test_ocsp" , test_ocsp },
{
"test_policychecker" , test_policychecker },
{
"test_subjaltnamechecker" , test_subjaltnamechecker },
{
"test_validatechain" , test_validatechain },
{
"test_validatechain_NB" , test_validatechain_NB },
{
"test_validatechain_bc" , test_validatechain_bc },
{
"test_error" , test_error },
{
"test_list" , test_list },
{
"test_list2" , test_list2 },
{
"test_logger" , test_logger },
{
"test_colcertstore" , test_colcertstore },
{
"test_ekuchecker" , test_ekuchecker },
{
"test_httpcertstore" , test_httpcertstore },
{
"test_pk11certstore" , test_pk11certstore },
{
"test_socket" , test_socket },
{
"test_authorityinfoaccess" , test_authorityinfoaccess },
{
"test_cert" , test_cert },
{
"test_crl" , test_crl },
{
"test_crlentry" , test_crlentry },
{
"test_date" , test_date },
{
"test_generalname" , test_generalname },
{
"test_nameconstraints" , test_nameconstraints },
{
"test_subjectinfoaccess" , test_subjectinfoaccess },
{
"test_x500name" , test_x500name },
{
"stress_test" , stress_test },
{
"test_bigint" , test_bigint },
{
"test_bytearray" , test_bytearray },
{
"test_hashtable" , test_hashtable },
{
"test_mem" , test_mem },
{
"test_monitorlock" , test_monitorlock },
{
"test_mutex" , test_mutex },
{
"test_mutex2" , test_mutex2 },
{
"test_mutex3" , test_mutex3 },
{
"test_object" , test_object },
{
"test_oid" , test_oid },
/* {"test_rwlock", test_rwlock }*/
{
"test_string" , test_string },
{
"test_string2" , test_string2 },
{
"build_chain" , build_chain },
{
"dumpcert" , dumpcert },
{
"dumpcrl" , dumpcrl },
{
"validate_chain" , validate_chain },
{ NULL, NULL },
};
static void
printUsage(
char *cmdName)
{
int fnCounter = 0;
fprintf(stderr,
"Usage: %s [test name] [arg1]...[argN]\n\n" , cmdName);
fprintf(stderr,
"List of possible names for the tests:" );
while (testFnRefTable[fnCounter].fnName != NULL) {
if (fnCounter % 2 == 0) {
fprintf(stderr,
"\n" );
}
fprintf(stderr,
" %-35s " , testFnRefTable[fnCounter].fnName);
fnCounter += 1;
}
fprintf(stderr,
"\n" );
}
static SECStatus
getTestArguments(
int argc,
char **argv,
mainTestFn *ptestFn,
char **pdbPath,
int *pargc,
char ***pargv)
{
PLOptState *optstate = NULL;
PLOptStatus status;
mainTestFn testFunction = NULL;
char **wArgv = NULL;
char *dbPath = NULL;
char *fnName = NULL;
int wArgc = 0;
int fnCounter = 0;
if (argc < 2) {
printf(
"ERROR: insufficient number of arguments: %s.\n" , fnName);
return SECFailure;
}
fnName = argv[1];
while (testFnRefTable[fnCounter].fnName != NULL) {
if (!PORT_Strcmp(fnName, testFnRefTable[fnCounter].fnName)) {
testFunction = testFnRefTable[fnCounter].fnPointer;
break ;
}
fnCounter += 1;
}
if (!testFunction) {
printf(
"ERROR: unknown name of the test: %s.\n" , fnName);
return SECFailure;
}
wArgv = PORT_ZNewArray(
char *, argc);
if (!wArgv) {
return SECFailure;
}
/* set name of the function as a first arg and increment arg count. */
wArgv[0] = fnName;
wArgc += 1;
optstate = PL_CreateOptState(argc - 1, argv + 1,
"d:" );
while ((status = PL_GetNextOpt(optstate)) == PL_OPT_OK) {
switch (optstate->option) {
case 'd' :
dbPath = (
char *)optstate->value;
break ;
default :
wArgv[wArgc] = (
char *)optstate->value;
wArgc += 1;
break ;
}
}
PL_DestroyOptState(optstate);
*ptestFn = testFunction;
*pdbPath = dbPath;
*pargc = wArgc;
*pargv = wArgv;
return SECSuccess;
}
static int
runCmd(mainTestFn fnPointer,
int argc,
char **argv,
char *dbPath)
{
int retStat = 0;
/* Initialize NSPR and NSS. */
PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1);
/* if using databases, use NSS_Init and not NSS_NoDB_Init */
if (dbPath && PORT_Strlen(dbPath) != 0) {
if (NSS_Init(dbPath) != SECSuccess)
return SECFailure;
}
else {
if (NSS_NoDB_Init(NULL) != 0)
return SECFailure;
}
retStat = fnPointer(argc, argv);
if (NSS_Shutdown() != SECSuccess) {
exit (1);
}
PR_Cleanup();
return retStat;
}
int
main(
int argc,
char **argv)
{
mainTestFn testFunction = NULL;
char *dbPath = NULL;
char **testArgv = NULL;
int testArgc = 0;
int rv = 0;
rv = getTestArguments(argc, argv, &testFunction, &dbPath,
&testArgc, &testArgv);
if (rv != SECSuccess) {
printUsage(argv[0]);
return 1;
}
rv = runCmd(testFunction, testArgc, testArgv, dbPath);
PORT_Free(testArgv);
return rv;
}
Messung V0.5 C=94 H=95 G=94
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland