void VSFMergeTest::execute_test_cases(OsFile_Handle config_file JVM_TRAPS) { static MergeTestCase test_case; while (read_test_case(config_file, &test_case)) { execute_test_case(&test_case JVM_CHECK); } }
static void test_harness(void* vargs) { func_args* args = (func_args*)vargs; char* script; long sz, len; int cliMode = 0; /* server or client command flag, server first */ int ret; FILE* file; char* svrArgs[MAX_ARGS]; int svrArgsSz; char* cliArgs[MAX_ARGS]; int cliArgsSz; char* cursor; char* comment; const char* fname = "tests/test.conf"; if (args->argc == 1) { printf("notice: using default file %s\n", fname); } else if(args->argc != 2) { printf("usage: harness [FILE]\n"); args->return_code = 1; return; } else { fname = args->argv[1]; } file = fopen(fname, "r"); if (file == NULL) { fprintf(stderr, "unable to open %s\n", fname); args->return_code = 1; return; } fseek(file, 0, SEEK_END); sz = ftell(file); rewind(file); if (sz <= 0) { fprintf(stderr, "%s is empty\n", fname); fclose(file); args->return_code = 1; return; } script = (char*)malloc(sz+1); if (script == 0) { fprintf(stderr, "unable to allocte script buffer\n"); fclose(file); args->return_code = 1; return; } len = fread(script, 1, sz, file); if (len != sz) { fprintf(stderr, "read error\n"); fclose(file); free(script); args->return_code = 1; return; } fclose(file); script[sz] = 0; cursor = script; svrArgsSz = 1; svrArgs[0] = args->argv[0]; cliArgsSz = 1; cliArgs[0] = args->argv[0]; while (*cursor != 0) { int do_it = 0; switch (*cursor) { case '\n': /* A blank line triggers test case execution or switches to client mode if we don't have the client command yet */ if (cliMode == 0) cliMode = 1; /* switch to client mode processing */ else do_it = 1; /* Do It, we have server and client */ cursor++; break; case '#': /* Ignore lines that start with a #. */ comment = strsep(&cursor, "\n"); #ifdef DEBUG_SUITE_TESTS printf("%s\n", comment); #else (void)comment; #endif break; case '-': /* Parameters start with a -. They end in either a newline * or a space. Capture until either, save in Args list. */ if (cliMode) cliArgs[cliArgsSz++] = strsep(&cursor, " \n"); else svrArgs[svrArgsSz++] = strsep(&cursor, " \n"); break; default: /* Anything from cursor until end of line that isn't the above * is data for a paramter. Just up until the next newline in * the Args list. */ if (cliMode) cliArgs[cliArgsSz++] = strsep(&cursor, "\n"); else svrArgs[svrArgsSz++] = strsep(&cursor, "\n"); if (*cursor == 0) /* eof */ do_it = 1; } if (svrArgsSz == MAX_ARGS || cliArgsSz == MAX_ARGS) { fprintf(stderr, "too many arguments, forcing test run\n"); do_it = 1; } if (do_it) { ret = execute_test_case(svrArgsSz, svrArgs, cliArgsSz, cliArgs,0,0); /* don't repeat if not supported in build */ if (ret == 0) { execute_test_case(svrArgsSz, svrArgs, cliArgsSz, cliArgs, 0, 1); execute_test_case(svrArgsSz, svrArgs, cliArgsSz, cliArgs, 1, 0); execute_test_case(svrArgsSz, svrArgs, cliArgsSz, cliArgs, 1, 1); } svrArgsSz = 1; cliArgsSz = 1; cliMode = 0; } } free(script); args->return_code = 0; }