Hi,
isolation_main.c executes isolationtester with:
snprintf(psql_cmd + offset, sizeof(psql_cmd) - offset,
SYSTEMQUOTE "\"./isolationtester\" \"dbname=%s\" < \"%s\" > \"%s\"
That obviously fails if pg_isolation_tester is invoked when CWD is not
its build directory. That's rather annoying if one wants to write an
isolation test for a contrib module or similar.
The attached patch fixes that using port.h's find_other_exec().
Greetings,
Andres Freund
--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
>From 80e5a1de55e3533da5b4b1b4aed7533e3d497bfa Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Tue, 1 Oct 2013 15:29:19 +0200
Subject: [PATCH] Fix pg_isolation_regress to work outside its build directory
---
src/test/isolation/isolation_main.c | 16 ++++++++++++++--
src/test/isolation/isolationtester.c | 5 ++++-
src/test/regress/pg_regress.c | 2 +-
src/test/regress/pg_regress.h | 2 +-
src/test/regress/pg_regress_main.c | 2 +-
5 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/test/isolation/isolation_main.c b/src/test/isolation/isolation_main.c
index 48a0e12..b3a8ff0 100644
--- a/src/test/isolation/isolation_main.c
+++ b/src/test/isolation/isolation_main.c
@@ -12,6 +12,9 @@
#include "pg_regress.h"
+char isolation_exec[MAXPGPATH];
+#define PG_ISOLATION_VERSIONSTR "isolationtester (PostgreSQL) " PG_VERSION "\n"
+
/*
* start an isolation tester process for specified file (including
* redirection), and return process ID
@@ -58,7 +61,8 @@ isolation_start_test(const char *testname,
"%s ", launcher);
snprintf(psql_cmd + offset, sizeof(psql_cmd) - offset,
- SYSTEMQUOTE "\"./isolationtester\" \"dbname=%s\" < \"%s\" > \"%s\" 2>&1" SYSTEMQUOTE,
+ SYSTEMQUOTE "\"%s\" \"dbname=%s\" < \"%s\" > \"%s\" 2>&1" SYSTEMQUOTE,
+ isolation_exec,
dblist->str,
infile,
outfile);
@@ -76,8 +80,16 @@ isolation_start_test(const char *testname,
}
static void
-isolation_init(void)
+isolation_init(int argc, char **argv)
{
+ /* look for isolationtester binary */
+ if (find_other_exec(argv[0], "isolationtester",
+ PG_ISOLATION_VERSIONSTR, isolation_exec) != 0)
+ {
+ fprintf(stderr, _("could not find proper isolationtester binary\n"));
+ exit(2);
+ }
+
/* set default regression database name */
add_stringlist_item(&dblist, "isolationtest");
}
diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c
index f280779..7f4c364 100644
--- a/src/test/isolation/isolationtester.c
+++ b/src/test/isolation/isolationtester.c
@@ -85,13 +85,16 @@ main(int argc, char **argv)
PQExpBufferData wait_query;
int opt;
- while ((opt = getopt(argc, argv, "n")) != -1)
+ while ((opt = getopt(argc, argv, "nV")) != -1)
{
switch (opt)
{
case 'n':
dry_run = true;
break;
+ case 'V':
+ puts("isolationtester (PostgreSQL) " PG_VERSION);
+ exit(0);
default:
fprintf(stderr, "Usage: isolationtester [-n] [CONNINFO]\n");
return EXIT_FAILURE;
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index b632326..94fc0b9 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -1968,7 +1968,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
* We call the initialization function here because that way we can set
* default parameters and let them be overwritten by the commandline.
*/
- ifunc();
+ ifunc(argc, argv);
if (getenv("PG_REGRESS_DIFF_OPTS"))
pretty_diff_opts = getenv("PG_REGRESS_DIFF_OPTS");
diff --git a/src/test/regress/pg_regress.h b/src/test/regress/pg_regress.h
index 5eb4d41..a5798c9 100644
--- a/src/test/regress/pg_regress.h
+++ b/src/test/regress/pg_regress.h
@@ -30,7 +30,7 @@ typedef PID_TYPE(*test_function) (const char *,
_stringlist **,
_stringlist **,
_stringlist **);
-typedef void (*init_function) (void);
+typedef void (*init_function) (int argc, char **argv);
extern char *bindir;
extern char *libdir;
diff --git a/src/test/regress/pg_regress_main.c b/src/test/regress/pg_regress_main.c
index f13e27f..147e24c 100644
--- a/src/test/regress/pg_regress_main.c
+++ b/src/test/regress/pg_regress_main.c
@@ -84,7 +84,7 @@ psql_start_test(const char *testname,
}
static void
-psql_init(void)
+psql_init(int argc, char **argv)
{
/* set default regression database name */
add_stringlist_item(&dblist, "regression");
--
1.8.3.251.g1462b67
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers