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 <and...@anarazel.de>
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 (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to