diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index 8a0b384dec6..f721694230f 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -30,6 +30,8 @@
parallel method starts up multiple server processes to run groups
of tests in parallel. Parallel testing adds confidence that
interprocess communication and locking are working correctly.
+ Some tests may run sequentially even in the parallel
+ mode in case this is required by the test.
@@ -43,12 +45,12 @@ make check
in the top-level directory. (Or you can change to
src/test/regress and run the command there.)
+ Tests which are run in parallel are prefixed with +
, and
+ tests which run sequentially are prefixed with -
.
At the end you should see something like:
-=======================
- All 193 tests passed.
-=======================
+# All 213 tests passed.
or otherwise a note about which tests failed. See User.Sid, accountname, &accountnamesize,
domainname, &domainnamesize, &accountnameuse))
{
- fprintf(stderr,
- _("%s: could not look up account SID: error code %lu\n"),
- progname, GetLastError());
- exit(2);
+ bail("could not look up account SID: error code %lu",
+ GetLastError());
}
free(tokenuser);
@@ -870,8 +1007,7 @@ config_sspi_auth(const char *pgdata, const char *superuser_name)
superuser_name = get_user_name(&errstr);
if (superuser_name == NULL)
{
- fprintf(stderr, "%s: %s\n", progname, errstr);
- exit(2);
+ bail("%s", errstr);
}
}
@@ -902,9 +1038,8 @@ config_sspi_auth(const char *pgdata, const char *superuser_name)
do { \
if (!(cond)) \
{ \
- fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"), \
- progname, fname, strerror(errno)); \
- exit(2); \
+ bail("could not write to file \"%s\": %s", \
+ fname, strerror(errno)); \
} \
} while (0)
@@ -915,15 +1050,13 @@ config_sspi_auth(const char *pgdata, const char *superuser_name)
* Truncating this name is a fatal error, because we must not fail to
* overwrite an original trust-authentication pg_hba.conf.
*/
- fprintf(stderr, _("%s: directory name too long\n"), progname);
- exit(2);
+ bail("directory name too long");
}
hba = fopen(fname, "w");
if (hba == NULL)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
- progname, fname, strerror(errno));
- exit(2);
+ bail("could not open file \"%s\" for writing: %s",
+ fname, strerror(errno));
}
CW(fputs("# Configuration written by config_sspi_auth()\n", hba) >= 0);
CW(fputs("host all all 127.0.0.1/32 sspi include_realm=1 map=regress\n",
@@ -937,9 +1070,8 @@ config_sspi_auth(const char *pgdata, const char *superuser_name)
ident = fopen(fname, "w");
if (ident == NULL)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
- progname, fname, strerror(errno));
- exit(2);
+ bail("could not open file \"%s\" for writing: %s",
+ fname, strerror(errno));
}
CW(fputs("# Configuration written by config_sspi_auth()\n", ident) >= 0);
@@ -973,7 +1105,7 @@ psql_start_command(void)
StringInfo buf = makeStringInfo();
appendStringInfo(buf,
- "\"%s%spsql\" -X",
+ "\"%s%spsql\" -X -q",
bindir ? bindir : "",
bindir ? "/" : "");
return buf;
@@ -1029,8 +1161,7 @@ psql_end_command(StringInfo buf, const char *database)
if (system(buf->data) != 0)
{
/* psql probably already reported the error */
- fprintf(stderr, _("command failed: %s\n"), buf->data);
- exit(2);
+ bail("command failed: %s", buf->data);
}
/* Clean up */
@@ -1071,9 +1202,7 @@ spawn_process(const char *cmdline)
pid = fork();
if (pid == -1)
{
- fprintf(stderr, _("%s: could not fork: %s\n"),
- progname, strerror(errno));
- exit(2);
+ bail("could not fork: %s", strerror(errno));
}
if (pid == 0)
{
@@ -1088,9 +1217,8 @@ spawn_process(const char *cmdline)
cmdline2 = psprintf("exec %s", cmdline);
execl(shellprog, shellprog, "-c", cmdline2, (char *) NULL);
- fprintf(stderr, _("%s: could not exec \"%s\": %s\n"),
- progname, shellprog, strerror(errno));
- _exit(1); /* not exit() here... */
+ /* Not using the normal bail() here as we want _exit */
+ bail_noatexit("could not exec \"%s\": %s", shellprog, strerror(errno));
}
/* in parent */
return pid;
@@ -1128,8 +1256,8 @@ file_size(const char *file)
if (!f)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
- progname, file, strerror(errno));
+ diag("could not open file \"%s\" for reading: %s",
+ file, strerror(errno));
return -1;
}
fseek(f, 0, SEEK_END);
@@ -1150,8 +1278,8 @@ file_line_count(const char *file)
if (!f)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
- progname, file, strerror(errno));
+ diag("could not open file \"%s\" for reading: %s",
+ file, strerror(errno));
return -1;
}
while ((c = fgetc(f)) != EOF)
@@ -1192,9 +1320,7 @@ make_directory(const char *dir)
{
if (mkdir(dir, S_IRWXU | S_IRWXG | S_IRWXO) < 0)
{
- fprintf(stderr, _("%s: could not create directory \"%s\": %s\n"),
- progname, dir, strerror(errno));
- exit(2);
+ bail("could not create directory \"%s\": %s", dir, strerror(errno));
}
}
@@ -1244,8 +1370,7 @@ run_diff(const char *cmd, const char *filename)
r = system(cmd);
if (!WIFEXITED(r) || WEXITSTATUS(r) > 1)
{
- fprintf(stderr, _("diff command failed with status %d: %s\n"), r, cmd);
- exit(2);
+ bail("diff command failed with status %d: %s", r, cmd);
}
#ifdef WIN32
@@ -1255,8 +1380,7 @@ run_diff(const char *cmd, const char *filename)
*/
if (WEXITSTATUS(r) == 1 && file_size(filename) <= 0)
{
- fprintf(stderr, _("diff command not found: %s\n"), cmd);
- exit(2);
+ bail("diff command not found: %s", cmd);
}
#endif
@@ -1327,9 +1451,8 @@ results_differ(const char *testname, const char *resultsfile, const char *defaul
alt_expectfile = get_alternative_expectfile(expectfile, i);
if (!alt_expectfile)
{
- fprintf(stderr, _("Unable to check secondary comparison files: %s\n"),
- strerror(errno));
- exit(2);
+ bail("Unable to check secondary comparison files: %s",
+ strerror(errno));
}
if (!file_exists(alt_expectfile))
@@ -1444,9 +1567,7 @@ wait_for_tests(PID_TYPE * pids, int *statuses, instr_time *stoptimes,
if (p == INVALID_PID)
{
- fprintf(stderr, _("failed to wait for subprocesses: %s\n"),
- strerror(errno));
- exit(2);
+ bail("failed to wait for subprocesses: %s", strerror(errno));
}
#else
DWORD exit_status;
@@ -1455,9 +1576,8 @@ wait_for_tests(PID_TYPE * pids, int *statuses, instr_time *stoptimes,
r = WaitForMultipleObjects(tests_left, active_pids, FALSE, INFINITE);
if (r < WAIT_OBJECT_0 || r >= WAIT_OBJECT_0 + tests_left)
{
- fprintf(stderr, _("failed to wait for subprocesses: error code %lu\n"),
- GetLastError());
- exit(2);
+ bail("failed to wait for subprocesses: error code %lu",
+ GetLastError());
}
p = active_pids[r - WAIT_OBJECT_0];
/* compact the active_pids array */
@@ -1476,7 +1596,7 @@ wait_for_tests(PID_TYPE * pids, int *statuses, instr_time *stoptimes,
statuses[i] = (int) exit_status;
INSTR_TIME_SET_CURRENT(stoptimes[i]);
if (names)
- status(" %s", names[i]);
+ note_detail(" %s", names[i]);
tests_left--;
break;
}
@@ -1495,21 +1615,20 @@ static void
log_child_failure(int exitstatus)
{
if (WIFEXITED(exitstatus))
- status(_(" (test process exited with exit code %d)"),
- WEXITSTATUS(exitstatus));
+ diag("(test process exited with exit code %d)",
+ WEXITSTATUS(exitstatus));
else if (WIFSIGNALED(exitstatus))
{
#if defined(WIN32)
- status(_(" (test process was terminated by exception 0x%X)"),
- WTERMSIG(exitstatus));
+ diag("(test process was terminated by exception 0x%X)",
+ WTERMSIG(exitstatus));
#else
- status(_(" (test process was terminated by signal %d: %s)"),
- WTERMSIG(exitstatus), pg_strsignal(WTERMSIG(exitstatus)));
+ diag("(test process was terminated by signal %d: %s)",
+ WTERMSIG(exitstatus), pg_strsignal(WTERMSIG(exitstatus)));
#endif
}
else
- status(_(" (test process exited with unrecognized status %d)"),
- exitstatus);
+ diag("(test process exited with unrecognized status %d)", exitstatus);
}
/*
@@ -1540,9 +1659,8 @@ run_schedule(const char *schedule, test_start_function startfunc,
scf = fopen(schedule, "r");
if (!scf)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
- progname, schedule, strerror(errno));
- exit(2);
+ bail("could not open file \"%s\" for reading: %s",
+ schedule, strerror(errno));
}
while (fgets(scbuf, sizeof(scbuf), scf))
@@ -1566,9 +1684,8 @@ run_schedule(const char *schedule, test_start_function startfunc,
test = scbuf + 6;
else
{
- fprintf(stderr, _("syntax error in schedule file \"%s\" line %d: %s\n"),
- schedule, line_num, scbuf);
- exit(2);
+ bail("syntax error in schedule file \"%s\" line %d: %s",
+ schedule, line_num, scbuf);
}
num_tests = 0;
@@ -1584,9 +1701,8 @@ run_schedule(const char *schedule, test_start_function startfunc,
if (num_tests >= MAX_PARALLEL_TESTS)
{
- fprintf(stderr, _("too many parallel tests (more than %d) in schedule file \"%s\" line %d: %s\n"),
- MAX_PARALLEL_TESTS, schedule, line_num, scbuf);
- exit(2);
+ bail("too many parallel tests (more than %d) in schedule file \"%s\" line %d: %s",
+ MAX_PARALLEL_TESTS, schedule, line_num, scbuf);
}
sav = *c;
*c = '\0';
@@ -1608,14 +1724,12 @@ run_schedule(const char *schedule, test_start_function startfunc,
if (num_tests == 0)
{
- fprintf(stderr, _("syntax error in schedule file \"%s\" line %d: %s\n"),
- schedule, line_num, scbuf);
- exit(2);
+ bail("syntax error in schedule file \"%s\" line %d: %s",
+ schedule, line_num, scbuf);
}
if (num_tests == 1)
{
- status(_("test %-28s ... "), tests[0]);
pids[0] = (startfunc) (tests[0], &resultfiles[0], &expectfiles[0], &tags[0]);
INSTR_TIME_SET_CURRENT(starttimes[0]);
wait_for_tests(pids, statuses, stoptimes, NULL, 1);
@@ -1623,16 +1737,15 @@ run_schedule(const char *schedule, test_start_function startfunc,
}
else if (max_concurrent_tests > 0 && max_concurrent_tests < num_tests)
{
- fprintf(stderr, _("too many parallel tests (more than %d) in schedule file \"%s\" line %d: %s\n"),
- max_concurrent_tests, schedule, line_num, scbuf);
- exit(2);
+ bail("too many parallel tests (more than %d) in schedule file \"%s\" line %d: %s",
+ max_concurrent_tests, schedule, line_num, scbuf);
}
else if (max_connections > 0 && max_connections < num_tests)
{
int oldest = 0;
- status(_("parallel group (%d tests, in groups of %d): "),
- num_tests, max_connections);
+ note_detail("parallel group (%d tests, in groups of %d): ",
+ num_tests, max_connections);
for (i = 0; i < num_tests; i++)
{
if (i - oldest >= max_connections)
@@ -1648,18 +1761,18 @@ run_schedule(const char *schedule, test_start_function startfunc,
wait_for_tests(pids + oldest, statuses + oldest,
stoptimes + oldest,
tests + oldest, i - oldest);
- status_end();
+ note_end();
}
else
{
- status(_("parallel group (%d tests): "), num_tests);
+ note_detail("parallel group (%d tests): ", num_tests);
for (i = 0; i < num_tests; i++)
{
pids[i] = (startfunc) (tests[i], &resultfiles[i], &expectfiles[i], &tags[i]);
INSTR_TIME_SET_CURRENT(starttimes[i]);
}
wait_for_tests(pids, statuses, stoptimes, tests, num_tests);
- status_end();
+ note_end();
}
/* Check results for all tests */
@@ -1670,8 +1783,7 @@ run_schedule(const char *schedule, test_start_function startfunc,
*tl;
bool differ = false;
- if (num_tests > 1)
- status(_(" %-28s ... "), tests[i]);
+ INSTR_TIME_SUBTRACT(stoptimes[i], starttimes[i]);
/*
* Advance over all three lists simultaneously.
@@ -1692,36 +1804,27 @@ run_schedule(const char *schedule, test_start_function startfunc,
newdiff = results_differ(tests[i], rl->str, el->str);
if (newdiff && tl)
{
- printf("%s ", tl->str);
+ diag("tag: %s", tl->str);
}
differ |= newdiff;
}
if (statuses[i] != 0)
{
- status(_("FAILED"));
+ test_status_failed(tests[i], INSTR_TIME_GET_MILLISEC(stoptimes[i]), (num_tests > 1));
log_child_failure(statuses[i]);
- fail_count++;
}
else
{
-
if (differ)
{
- status(_("FAILED"));
- fail_count++;
+ test_status_failed(tests[i], INSTR_TIME_GET_MILLISEC(stoptimes[i]), (num_tests > 1));
}
else
{
- status(_("ok ")); /* align with FAILED */
- success_count++;
+ test_status_ok(tests[i], INSTR_TIME_GET_MILLISEC(stoptimes[i]), (num_tests > 1));
}
}
-
- INSTR_TIME_SUBTRACT(stoptimes[i], starttimes[i]);
- status(_(" %8.0f ms"), INSTR_TIME_GET_MILLISEC(stoptimes[i]));
-
- status_end();
}
for (i = 0; i < num_tests; i++)
@@ -1756,7 +1859,6 @@ run_single_test(const char *test, test_start_function startfunc,
*tl;
bool differ = false;
- status(_("test %-28s ... "), test);
pid = (startfunc) (test, &resultfiles, &expectfiles, &tags);
INSTR_TIME_SET_CURRENT(starttime);
wait_for_tests(&pid, &exit_status, &stoptime, NULL, 1);
@@ -1780,35 +1882,29 @@ run_single_test(const char *test, test_start_function startfunc,
newdiff = results_differ(test, rl->str, el->str);
if (newdiff && tl)
{
- printf("%s ", tl->str);
+ diag("tag: %s", tl->str);
}
differ |= newdiff;
}
+ INSTR_TIME_SUBTRACT(stoptime, starttime);
+
if (exit_status != 0)
{
- status(_("FAILED"));
- fail_count++;
+ test_status_failed(test, false, INSTR_TIME_GET_MILLISEC(stoptime));
log_child_failure(exit_status);
}
else
{
if (differ)
{
- status(_("FAILED"));
- fail_count++;
+ test_status_failed(test, false, INSTR_TIME_GET_MILLISEC(stoptime));
}
else
{
- status(_("ok ")); /* align with FAILED */
- success_count++;
+ test_status_ok(test, INSTR_TIME_GET_MILLISEC(stoptime), false);
}
}
-
- INSTR_TIME_SUBTRACT(stoptime, starttime);
- status(_(" %8.0f ms"), INSTR_TIME_GET_MILLISEC(stoptime));
-
- status_end();
}
/*
@@ -1830,9 +1926,8 @@ open_result_files(void)
logfile = fopen(logfilename, "w");
if (!logfile)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
- progname, logfilename, strerror(errno));
- exit(2);
+ bail("could not open file \"%s\" for writing: %s",
+ logfilename, strerror(errno));
}
/* create the diffs file as empty */
@@ -1841,9 +1936,8 @@ open_result_files(void)
difffile = fopen(difffilename, "w");
if (!difffile)
{
- fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
- progname, difffilename, strerror(errno));
- exit(2);
+ bail("could not open file \"%s\" for writing: %s",
+ difffilename, strerror(errno));
}
/* we don't keep the diffs file open continuously */
fclose(difffile);
@@ -1859,7 +1953,6 @@ drop_database_if_exists(const char *dbname)
{
StringInfo buf = psql_start_command();
- header(_("dropping database \"%s\""), dbname);
/* Set warning level so we don't see chatter about nonexistent DB */
psql_add_command(buf, "SET client_min_messages = warning");
psql_add_command(buf, "DROP DATABASE IF EXISTS \"%s\"", dbname);
@@ -1876,7 +1969,6 @@ create_database(const char *dbname)
* We use template0 so that any installation-local cruft in template1 will
* not mess up the tests.
*/
- header(_("creating database \"%s\""), dbname);
if (encoding)
psql_add_command(buf, "CREATE DATABASE \"%s\" TEMPLATE=template0 ENCODING='%s'%s", dbname, encoding,
(nolocale) ? " LC_COLLATE='C' LC_CTYPE='C'" : "");
@@ -1898,10 +1990,7 @@ create_database(const char *dbname)
* this will work whether or not the extension is preinstalled.
*/
for (sl = loadextension; sl != NULL; sl = sl->next)
- {
- header(_("installing %s"), sl->str);
psql_command(dbname, "CREATE EXTENSION IF NOT EXISTS \"%s\"", sl->str);
- }
}
static void
@@ -1909,7 +1998,6 @@ drop_role_if_exists(const char *rolename)
{
StringInfo buf = psql_start_command();
- header(_("dropping role \"%s\""), rolename);
/* Set warning level so we don't see chatter about nonexistent role */
psql_add_command(buf, "SET client_min_messages = warning");
psql_add_command(buf, "DROP ROLE IF EXISTS \"%s\"", rolename);
@@ -1921,7 +2009,6 @@ create_role(const char *rolename, const _stringlist *granted_dbs)
{
StringInfo buf = psql_start_command();
- header(_("creating role \"%s\""), rolename);
psql_add_command(buf, "CREATE ROLE \"%s\" WITH LOGIN", rolename);
for (; granted_dbs != NULL; granted_dbs = granted_dbs->next)
{
@@ -2143,8 +2230,8 @@ regression_main(int argc, char *argv[],
break;
default:
/* getopt_long already emitted a complaint */
- fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"),
- progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.",
+ progname);
exit(2);
}
}
@@ -2164,9 +2251,7 @@ regression_main(int argc, char *argv[],
*/
if (!(dblist && dblist->str && dblist->str[0]))
{
- fprintf(stderr, _("%s: no database name was specified\n"),
- progname);
- exit(2);
+ bail("no database name was specified");
}
if (config_auth_datadir)
@@ -2217,17 +2302,12 @@ regression_main(int argc, char *argv[],
if (directory_exists(temp_instance))
{
- header(_("removing existing temp instance"));
if (!rmtree(temp_instance, true))
{
- fprintf(stderr, _("\n%s: could not remove temp instance \"%s\"\n"),
- progname, temp_instance);
- exit(2);
+ bail("could not remove temp instance \"%s\"", temp_instance);
}
}
- header(_("creating temporary instance"));
-
/* make the temp instance top directory */
make_directory(temp_instance);
@@ -2237,7 +2317,6 @@ regression_main(int argc, char *argv[],
make_directory(buf);
/* initdb */
- header(_("initializing database system"));
snprintf(buf, sizeof(buf),
"\"%s%sinitdb\" -D \"%s/data\" --no-clean --no-sync%s%s > \"%s/log/initdb.log\" 2>&1",
bindir ? bindir : "",
@@ -2249,8 +2328,10 @@ regression_main(int argc, char *argv[],
fflush(NULL);
if (system(buf))
{
- fprintf(stderr, _("\n%s: initdb failed\nExamine %s/log/initdb.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf);
- exit(2);
+ bail("initdb failed\n"
+ "# Examine \"%s/log/initdb.log\" for the reason.\n"
+ "# Command was: %s",
+ outputdir, buf);
}
/*
@@ -2265,8 +2346,8 @@ regression_main(int argc, char *argv[],
pg_conf = fopen(buf, "a");
if (pg_conf == NULL)
{
- fprintf(stderr, _("\n%s: could not open \"%s\" for adding extra config: %s\n"), progname, buf, strerror(errno));
- exit(2);
+ bail("could not open \"%s\" for adding extra config: %s",
+ buf, strerror(errno));
}
fputs("\n# Configuration added by pg_regress\n\n", pg_conf);
fputs("log_autovacuum_min_duration = 0\n", pg_conf);
@@ -2285,8 +2366,8 @@ regression_main(int argc, char *argv[],
extra_conf = fopen(temp_config, "r");
if (extra_conf == NULL)
{
- fprintf(stderr, _("\n%s: could not open \"%s\" to read extra config: %s\n"), progname, temp_config, strerror(errno));
- exit(2);
+ bail("could not open \"%s\" to read extra config: %s",
+ temp_config, strerror(errno));
}
while (fgets(line_buf, sizeof(line_buf), extra_conf) != NULL)
fputs(line_buf, pg_conf);
@@ -2325,14 +2406,13 @@ regression_main(int argc, char *argv[],
if (port_specified_by_user || i == 15)
{
- fprintf(stderr, _("port %d apparently in use\n"), port);
+ note("port %d apparently in use", port);
if (!port_specified_by_user)
- fprintf(stderr, _("%s: could not determine an available port\n"), progname);
- fprintf(stderr, _("Specify an unused port using the --port option or shut down any conflicting PostgreSQL servers.\n"));
- exit(2);
+ note("could not determine an available port");
+ bail("Specify an unused port using the --port option or shut down any conflicting PostgreSQL servers.");
}
- fprintf(stderr, _("port %d apparently in use, trying %d\n"), port, port + 1);
+ note("port %d apparently in use, trying %d", port, port + 1);
port++;
sprintf(s, "%d", port);
setenv("PGPORT", s, 1);
@@ -2344,7 +2424,6 @@ regression_main(int argc, char *argv[],
/*
* Start the temp postmaster
*/
- header(_("starting postmaster"));
snprintf(buf, sizeof(buf),
"\"%s%spostgres\" -D \"%s/data\" -F%s "
"-c \"listen_addresses=%s\" -k \"%s\" "
@@ -2356,11 +2435,7 @@ regression_main(int argc, char *argv[],
outputdir);
postmaster_pid = spawn_process(buf);
if (postmaster_pid == INVALID_PID)
- {
- fprintf(stderr, _("\n%s: could not spawn postmaster: %s\n"),
- progname, strerror(errno));
- exit(2);
- }
+ bail("could not spawn postmaster: %s", strerror(errno));
/*
* Wait till postmaster is able to accept connections; normally this
@@ -2395,16 +2470,16 @@ regression_main(int argc, char *argv[],
if (WaitForSingleObject(postmaster_pid, 0) == WAIT_OBJECT_0)
#endif
{
- fprintf(stderr, _("\n%s: postmaster failed\nExamine %s/log/postmaster.log for the reason\n"), progname, outputdir);
- exit(2);
+ bail("postmaster failed, examine \"%s/log/postmaster.log\" for the reason",
+ outputdir);
}
pg_usleep(1000000L);
}
if (i >= wait_seconds)
{
- fprintf(stderr, _("\n%s: postmaster did not respond within %d seconds\nExamine %s/log/postmaster.log for the reason\n"),
- progname, wait_seconds, outputdir);
+ diag("postmaster did not respond within %d seconds, examine \"%s/log/postmaster.log\" for the reason",
+ wait_seconds, outputdir);
/*
* If we get here, the postmaster is probably wedged somewhere in
@@ -2413,17 +2488,14 @@ regression_main(int argc, char *argv[],
* attempts.
*/
#ifndef WIN32
- if (kill(postmaster_pid, SIGKILL) != 0 &&
- errno != ESRCH)
- fprintf(stderr, _("\n%s: could not kill failed postmaster: %s\n"),
- progname, strerror(errno));
+ if (kill(postmaster_pid, SIGKILL) != 0 && errno != ESRCH)
+ bail("could not kill failed postmaster: %s", strerror(errno));
#else
if (TerminateProcess(postmaster_pid, 255) == 0)
- fprintf(stderr, _("\n%s: could not kill failed postmaster: error code %lu\n"),
- progname, GetLastError());
+ bail("could not kill failed postmaster: error code %lu",
+ GetLastError());
#endif
-
- exit(2);
+ bail("postmaster failed");
}
postmaster_running = true;
@@ -2434,8 +2506,8 @@ regression_main(int argc, char *argv[],
#else
#define ULONGPID(x) (unsigned long) (x)
#endif
- printf(_("running on port %d with PID %lu\n"),
- port, ULONGPID(postmaster_pid));
+ note("using temp instance on port %d with PID %lu",
+ port, ULONGPID(postmaster_pid));
}
else
{
@@ -2466,8 +2538,6 @@ regression_main(int argc, char *argv[],
/*
* Ready to run the tests
*/
- header(_("running regression test queries"));
-
for (sl = schedulelist; sl != NULL; sl = sl->next)
{
run_schedule(sl->str, startfunc, postfunc);
@@ -2483,7 +2553,6 @@ regression_main(int argc, char *argv[],
*/
if (temp_instance)
{
- header(_("shutting down postmaster"));
stop_postmaster();
}
@@ -2494,42 +2563,30 @@ regression_main(int argc, char *argv[],
*/
if (temp_instance && fail_count == 0)
{
- header(_("removing temporary instance"));
if (!rmtree(temp_instance, true))
- fprintf(stderr, _("\n%s: could not remove temp instance \"%s\"\n"),
- progname, temp_instance);
+ diag("could not remove temp instance \"%s\"",
+ temp_instance);
}
- fclose(logfile);
+ /*
+ * Emit a TAP compliant Plan
+ */
+ plan(fail_count + success_count);
/*
* Emit nice-looking summary message
*/
if (fail_count == 0)
- snprintf(buf, sizeof(buf),
- _(" All %d tests passed. "),
- success_count);
+ note("All %d tests passed.", success_count);
else
- snprintf(buf, sizeof(buf),
- _(" %d of %d tests failed. "),
- fail_count,
- success_count + fail_count);
-
- putchar('\n');
- for (i = strlen(buf); i > 0; i--)
- putchar('=');
- printf("\n%s\n", buf);
- for (i = strlen(buf); i > 0; i--)
- putchar('=');
- putchar('\n');
- putchar('\n');
+ diag("%d of %d tests failed.", fail_count, success_count + fail_count);
if (file_size(difffilename) > 0)
{
- printf(_("The differences that caused some tests to fail can be viewed in the\n"
- "file \"%s\". A copy of the test summary that you see\n"
- "above is saved in the file \"%s\".\n\n"),
- difffilename, logfilename);
+ diag("The differences that caused some tests to fail can be viewed in the file \"%s\".",
+ difffilename);
+ diag("A copy of the test summary that you see above is saved in the file \"%s\".",
+ logfilename);
}
else
{
@@ -2537,6 +2594,9 @@ regression_main(int argc, char *argv[],
unlink(logfilename);
}
+ fclose(logfile);
+ logfile = NULL;
+
if (fail_count != 0)
exit(1);