Add an SSI regression test that tests all interesting permutations in the

order of begin, prepare, and commit of three concurrent transactions that
have conflicts between them.

The test runs for a quite long time, and the expected output file is huge,
but this test caught some serious bugs during development, so seems
worthwhile to keep. The test uses prepared transactions, so it fails if the
server has max_prepared_transactions=0. Because of that, it's marked as
"ignore" in the schedule file.

Dan Ports
REL9_1_STABLE
Heikki Linnakangas 15 years ago
parent 89c096c565
commit b9585e8f98
  1. 34843
      src/test/isolation/expected/prepared-transactions.out
  2. 5
      src/test/isolation/isolation_schedule
  3. 12
      src/test/isolation/isolationtester.c
  4. 1507
      src/test/isolation/specs/prepared-transactions.spec

File diff suppressed because it is too large Load Diff

@ -9,3 +9,8 @@ test: ri-trigger
test: partial-index test: partial-index
test: two-ids test: two-ids
test: multiple-row-versions test: multiple-row-versions
# Ignore failure from prepared-transactions test, because it fails if
# prepared transactions are disabled in the server. It should pass if they're
# enabled, however.
ignore: prepared-transactions
test: prepared-transactions

@ -278,7 +278,11 @@ run_permutation(TestSpec * testspec, int nsteps, Step ** steps)
if (testspec->sessions[i]->setupsql) if (testspec->sessions[i]->setupsql)
{ {
res = PQexec(conns[i], testspec->sessions[i]->setupsql); res = PQexec(conns[i], testspec->sessions[i]->setupsql);
if (PQresultStatus(res) != PGRES_COMMAND_OK) if (PQresultStatus(res) == PGRES_TUPLES_OK)
{
printResultSet(res);
}
else if (PQresultStatus(res) != PGRES_COMMAND_OK)
{ {
fprintf(stderr, "setup of session %s failed: %s", fprintf(stderr, "setup of session %s failed: %s",
testspec->sessions[i]->name, testspec->sessions[i]->name,
@ -340,7 +344,11 @@ run_permutation(TestSpec * testspec, int nsteps, Step ** steps)
if (testspec->teardownsql) if (testspec->teardownsql)
{ {
res = PQexec(conns[0], testspec->teardownsql); res = PQexec(conns[0], testspec->teardownsql);
if (PQresultStatus(res) != PGRES_COMMAND_OK) if (PQresultStatus(res) == PGRES_TUPLES_OK)
{
printResultSet(res);
}
else if (PQresultStatus(res) != PGRES_COMMAND_OK)
{ {
fprintf(stderr, "teardown failed: %s", fprintf(stderr, "teardown failed: %s",
PQerrorMessage(conns[0])); PQerrorMessage(conns[0]));

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save