Import BSDDB 4.7.25 (as of svn r89086)
This commit is contained in:
217
test_micro/source/test_micro.c
Normal file
217
test_micro/source/test_micro.c
Normal file
@@ -0,0 +1,217 @@
|
||||
/*
|
||||
* $Id: test_micro.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||
*/
|
||||
|
||||
#include "bench.h"
|
||||
|
||||
int main __P((int, char *[]));
|
||||
|
||||
static int run __P((char *));
|
||||
static int usage __P((void));
|
||||
|
||||
char *progname; /* program name */
|
||||
|
||||
static int test_start = 1; /* first test to run */
|
||||
static int test_end = 0; /* last test to run */
|
||||
|
||||
static struct {
|
||||
char *name; /* command name */
|
||||
int (*f)(int, char *[]); /* function */
|
||||
} cmdlist[] = {
|
||||
{ "b_curalloc", b_curalloc },
|
||||
{ "b_curwalk", b_curwalk },
|
||||
{ "b_del", b_del },
|
||||
{ "b_get", b_get },
|
||||
{ "b_inmem", b_inmem },
|
||||
{ "b_load", b_load },
|
||||
{ "b_open", b_open },
|
||||
{ "b_put", b_put },
|
||||
{ "b_recover", b_recover },
|
||||
{ "b_txn", b_txn },
|
||||
{ "b_txn_write", b_txn_write },
|
||||
{ "b_workload", b_workload },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
int ch, ret;
|
||||
char *run_directory, *ifile;
|
||||
|
||||
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||
progname = argv[0];
|
||||
else
|
||||
++progname;
|
||||
|
||||
#ifdef DB_BREW
|
||||
if (bdb_brew_begin() != 0) {
|
||||
fprintf(stderr,
|
||||
"%s: failed to initialize Berkeley DB on BREW\n");
|
||||
return (EXIT_FAILURE);
|
||||
}
|
||||
#endif
|
||||
|
||||
run_directory = NULL;
|
||||
ifile = "run.std";
|
||||
while ((ch = getopt(argc, argv, "d:e:i:s:")) != EOF)
|
||||
switch (ch) {
|
||||
case 'd':
|
||||
run_directory = optarg;
|
||||
break;
|
||||
case 'e':
|
||||
test_end = atoi(optarg);
|
||||
break;
|
||||
case 'i':
|
||||
ifile = optarg;
|
||||
break;
|
||||
case 's':
|
||||
test_start = atoi(optarg);
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
return (usage());
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
/* Run in the target directory. */
|
||||
if (run_directory != NULL && chdir(run_directory) != 0) {
|
||||
fprintf(stderr,
|
||||
"%s: %s: %s\n", progname, run_directory, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* Clean up any left-over test directory. */
|
||||
if (b_util_dir_teardown())
|
||||
return (1);
|
||||
|
||||
ret = run(ifile);
|
||||
|
||||
#ifdef DB_BREW
|
||||
bdb_brew_end();
|
||||
#endif
|
||||
|
||||
return (ret ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* run --
|
||||
* Read a configuration file and run the tests.
|
||||
*/
|
||||
static int
|
||||
run(ifile)
|
||||
char *ifile;
|
||||
{
|
||||
#ifdef HAVE_GETOPT_OPTRESET
|
||||
extern int optreset;
|
||||
#endif
|
||||
extern int optind;
|
||||
static int test_cur = 0;
|
||||
FILE *ifp;
|
||||
int argc, cmdindx, lineno, ret;
|
||||
char *p, cmd[1024], path[1024], **argv;
|
||||
|
||||
/* Identify the run. */
|
||||
if (b_uname() != 0)
|
||||
return (1);
|
||||
|
||||
/* Open the list of tests. */
|
||||
if ((ifp = fopen(ifile, "r")) == NULL) {
|
||||
fprintf(stderr,
|
||||
"%s: %s: %s\n", progname, ifile, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
|
||||
for (lineno = 1; fgets(cmd, sizeof(cmd), ifp) != NULL; ++lineno) {
|
||||
/*
|
||||
* Nul-terminate the command line; check for a trailing \r
|
||||
* on Windows.
|
||||
*/
|
||||
if ((p = strchr(cmd, '\n')) == NULL) {
|
||||
format_err: fprintf(stderr, "%s: %s: line %d: illegal input\n",
|
||||
progname, ifile, lineno);
|
||||
return (1);
|
||||
}
|
||||
if (p > cmd && p[-1] == '\r')
|
||||
--p;
|
||||
*p = '\0';
|
||||
|
||||
/* Skip empty lines and comments. */
|
||||
if (cmd[0] == '\0' || cmd[0] == '#')
|
||||
continue;
|
||||
|
||||
/* Optionally limit the test run to specific tests. */
|
||||
if (++test_cur < test_start ||
|
||||
(test_end != 0 && test_cur > test_end))
|
||||
continue;
|
||||
|
||||
fprintf(stderr, "%d: %s\n", test_cur, cmd);
|
||||
|
||||
/* Find the command. */
|
||||
if ((p = strchr(cmd, ' ')) == NULL)
|
||||
goto format_err;
|
||||
*p++ = '\0';
|
||||
for (cmdindx = 0; cmdlist[cmdindx].name != NULL; ++cmdindx)
|
||||
if (strcmp(cmd, cmdlist[cmdindx].name) == 0)
|
||||
break;
|
||||
if (cmdlist[cmdindx].name == NULL)
|
||||
goto format_err;
|
||||
|
||||
/* Build argc/argv. */
|
||||
if (__db_util_arg(cmd, p, &argc, &argv) != 0)
|
||||
return (1);
|
||||
|
||||
/* Re-direct output into the test log file. */
|
||||
(void)snprintf(path, sizeof(path), "%d", test_cur);
|
||||
if (freopen(path, "a", stdout) == NULL) {
|
||||
fprintf(stderr,
|
||||
"%s: %s: %s\n", progname, path, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Each underlying "program" re-parses its arguments --
|
||||
* reset getopt.
|
||||
*/
|
||||
#ifdef HAVE_GETOPT_OPTRESET
|
||||
optreset = 1;
|
||||
#endif
|
||||
optind = 1;
|
||||
|
||||
/* Prepare the test directory. */
|
||||
if (b_util_dir_setup())
|
||||
return (1);
|
||||
|
||||
ret = cmdlist[cmdindx].f(argc, argv);
|
||||
|
||||
/* Clean up the test directory. */
|
||||
if (b_util_dir_teardown())
|
||||
return (1);
|
||||
|
||||
(void)fflush(stdout);
|
||||
|
||||
#if DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 1
|
||||
__os_free(NULL, argv, 0);
|
||||
#else
|
||||
__os_free(NULL, argv);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
return (ret);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
usage()
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
"usage: %s [-d directory] [-e end] [-i input] [-s start]\n",
|
||||
progname);
|
||||
return (EXIT_FAILURE);
|
||||
}
|
||||
Reference in New Issue
Block a user