static const char **backend_pids = NULL;
static int nconns = 0;
+/* In dry run only output permutations to be run by the tester. */
+static int dry_run = false;
+
+static void run_testspec(TestSpec *testspec);
static void run_all_permutations(TestSpec * testspec);
static void run_all_permutations_recurse(TestSpec * testspec, int nsteps,
Step ** steps);
int i;
PGresult *res;
PQExpBufferData wait_query;
+ int opt;
+
+ while ((opt = getopt(argc, argv, "n")) != -1)
+ {
+ switch (opt)
+ {
+ case 'n':
+ dry_run = true;
+ break;
+ default:
+ fprintf(stderr, "Usage: isolationtester [-n] [CONNINFO]\n");
+ return EXIT_FAILURE;
+ }
+ }
/*
- * If the user supplies a parameter on the command line, use it as the
- * conninfo string; otherwise default to setting dbname=postgres and using
- * environment variables or defaults for all other connection parameters.
+ * If the user supplies a non-option parameter on the command line, use it
+ * as the conninfo string; otherwise default to setting dbname=postgres and
+ * using environment variables or defaults for all other connection
+ * parameters.
*/
- if (argc > 1)
- conninfo = argv[1];
+ if (argc > optind)
+ conninfo = argv[optind];
else
conninfo = "dbname = postgres";
/* Read the test spec from stdin */
spec_yyparse();
testspec = &parseresult;
+
+ /*
+ * In dry-run mode, just print the permutations that would be run, and
+ * exit.
+ */
+ if (dry_run)
+ {
+ run_testspec(testspec);
+ return 0;
+ }
+
printf("Parsed test spec with %d sessions\n", testspec->nsessions);
/*
* Run the permutations specified in the spec, or all if none were
* explicitly specified.
*/
- if (testspec->permutations)
- run_named_permutations(testspec);
- else
- run_all_permutations(testspec);
+ run_testspec(testspec);
/* Clean up and exit */
for (i = 0; i < nconns; i++)
static int *piles;
+/*
+ * Run the permutations specified in the spec, or all if none were
+ * explicitly specified.
+ */
+static void
+run_testspec(TestSpec *testspec)
+{
+ if (testspec->permutations)
+ run_named_permutations(testspec);
+ else
+ run_all_permutations(testspec);
+}
+
/*
* Run all permutations of the steps and sessions.
*/
int i;
Step *waiting = NULL;
+ /*
+ * In dry run mode, just display the permutation in the same format used by
+ * spec files, and return.
+ */
+ if (dry_run)
+ {
+ printf("permutation");
+ for (i = 0; i < nsteps; i++)
+ printf(" \"%s\"", steps[i]->name);
+ printf("\n");
+ return;
+ }
+
printf("\nstarting permutation:");
for (i = 0; i < nsteps; i++)
printf(" %s", steps[i]->name);
}
/* Detail may contain xid values, so just show primary. */
step->errormsg = malloc(5 +
- strlen(PQresultErrorField(res, PG_DIAG_SEVERITY)) +
+ strlen(PQresultErrorField(res, PG_DIAG_SEVERITY)) +
strlen(PQresultErrorField(res,
PG_DIAG_MESSAGE_PRIMARY)));
sprintf(step->errormsg, "%s: %s",