From 45d702b45b86a0a09a34f539391e0d87a62dce33 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Mon, 19 Dec 2022 16:27:31 +1100 Subject: [PATCH v1] isolationtester - allow session specific conninfo --- src/test/isolation/isolationtester.c | 26 +++++++++++++++++++++++++- src/test/isolation/isolationtester.h | 1 + src/test/isolation/specparse.y | 20 +++++++++++++------- src/test/isolation/specscanner.l | 1 + 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c index 0a66235..76edbf1 100644 --- a/src/test/isolation/isolationtester.c +++ b/src/test/isolation/isolationtester.c @@ -119,6 +119,8 @@ main(int argc, char **argv) * as the conninfo string; otherwise default to setting dbname=postgres * and using environment variables or defaults for all other connection * parameters. + * + * Note, this will be overridden by any session specific 'conninfo'. */ if (argc > optind) conninfo = argv[optind]; @@ -153,15 +155,37 @@ main(int argc, char **argv) for (i = 0; i < nconns; i++) { const char *sessionname; + const char *sessionconninfo; if (i == 0) + { sessionname = "control connection"; + sessionconninfo = NULL; + } else + { sessionname = testspec->sessions[i - 1]->name; + sessionconninfo = testspec->sessions[i - 1]->conninfo; + } conns[i].sessionname = sessionname; - conns[i].conn = PQconnectdb(conninfo); + /* + * If this spec session has specified a conninfo to use then that + * overrides and other conninfo (e.g. passed as an argument) + * + * Note - the necessary instance to connect to is assumed to exist + * already manually setup by the user. + */ + if (sessionconninfo) + { + fprintf(stderr, "session '%s' specifies connection info '%s'\n", sessionname, sessionconninfo); + conns[i].conn = PQconnectdb(sessionconninfo); + } + else + { + conns[i].conn = PQconnectdb(conninfo); + } if (PQstatus(conns[i].conn) != CONNECTION_OK) { fprintf(stderr, "Connection %d failed: %s", diff --git a/src/test/isolation/isolationtester.h b/src/test/isolation/isolationtester.h index 77134b0..317abcd 100644 --- a/src/test/isolation/isolationtester.h +++ b/src/test/isolation/isolationtester.h @@ -24,6 +24,7 @@ typedef struct Step Step; typedef struct { char *name; + char *conninfo; char *setupsql; char *teardownsql; Step **steps; diff --git a/src/test/isolation/specparse.y b/src/test/isolation/specparse.y index 657285c..b927362 100644 --- a/src/test/isolation/specparse.y +++ b/src/test/isolation/specparse.y @@ -39,7 +39,7 @@ TestSpec parseresult; /* result of parsing is left here */ } %type setup_list -%type opt_setup opt_teardown +%type opt_conninfo opt_setup opt_teardown %type setup %type step_list session_list permutation_list opt_permutation_list %type permutation_step_list blocker_list @@ -51,7 +51,7 @@ TestSpec parseresult; /* result of parsing is left here */ %token sqlblock identifier %token INTEGER -%token NOTICES PERMUTATION SESSION SETUP STEP TEARDOWN TEST +%token NOTICES PERMUTATION SESSION CONNINFO SETUP STEP TEARDOWN TEST %% @@ -86,6 +86,11 @@ setup_list: } ; +opt_conninfo: + /* EMPTY */ { $$ = NULL; } + | CONNINFO identifier { $$ = $2; } + ; + opt_setup: /* EMPTY */ { $$ = NULL; } | setup { $$ = $1; } @@ -117,14 +122,15 @@ session_list: ; session: - SESSION identifier opt_setup step_list opt_teardown + SESSION identifier opt_conninfo opt_setup step_list opt_teardown { $$ = pg_malloc(sizeof(Session)); $$->name = $2; - $$->setupsql = $3; - $$->steps = (Step **) $4.elements; - $$->nsteps = $4.nelements; - $$->teardownsql = $5; + $$->conninfo = $3; + $$->setupsql = $4; + $$->steps = (Step **) $5.elements; + $$->nsteps = $5.nelements; + $$->teardownsql = $6; } ; diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l index b04696f..3174372 100644 --- a/src/test/isolation/specscanner.l +++ b/src/test/isolation/specscanner.l @@ -71,6 +71,7 @@ self [,()*] %} /* Keywords (must appear before the {identifier} rule!) */ +conninfo { return CONNINFO; } notices { return NOTICES; } permutation { return PERMUTATION; } session { return SESSION; } -- 1.8.3.1