From 2c83f435a3deca745c666e9778229d64cb2dfc79 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 3 Mar 2016 17:58:30 -0300 Subject: Rework PostgresNode's psql method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes the psql() method much more capable: it captures both stdout and stderr; it now returns the psql exit code rather than stdout; a timeout can now be specified, as can ON_ERROR_STOP behavior; it gained a new "on_error_die" (defaulting to off) parameter to raise an exception if there's any problem. Finally, additional parameters to psql can be passed if there's need for further tweaking. For convenience, a new safe_psql() method retains much of the old behavior of psql(), except that it uses on_error_die on, so that problems like syntax errors in SQL commands can be detected more easily. Many existing TAP test files now use safe_psql, which is what is really wanted. A couple of ->psql() calls are now added in the commit_ts tests, which verify that the right thing is happening on certain errors. Some ->command_fails() calls in recovery tests that were verifying that psql failed also became ->psql() calls now. Author: Craig Ringer. Some tweaks by Álvaro Herrera Reviewed-By: Michaël Paquier --- src/bin/scripts/t/010_clusterdb.pl | 2 +- src/bin/scripts/t/030_createlang.pl | 2 +- src/bin/scripts/t/050_dropdb.pl | 2 +- src/bin/scripts/t/070_dropuser.pl | 2 +- src/bin/scripts/t/090_reindexdb.pl | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/bin/scripts/t') diff --git a/src/bin/scripts/t/010_clusterdb.pl b/src/bin/scripts/t/010_clusterdb.pl index 11d678a8676..0e677cacf18 100644 --- a/src/bin/scripts/t/010_clusterdb.pl +++ b/src/bin/scripts/t/010_clusterdb.pl @@ -21,7 +21,7 @@ $node->issues_sql_like( $node->command_fails([ 'clusterdb', '-t', 'nonexistent' ], 'fails with nonexistent table'); -$node->psql('postgres', +$node->safe_psql('postgres', 'CREATE TABLE test1 (a int); CREATE INDEX test1x ON test1 (a); CLUSTER test1 USING test1x' ); $node->issues_sql_like( diff --git a/src/bin/scripts/t/030_createlang.pl b/src/bin/scripts/t/030_createlang.pl index 38e351670d0..ffbd35dcc5a 100644 --- a/src/bin/scripts/t/030_createlang.pl +++ b/src/bin/scripts/t/030_createlang.pl @@ -16,7 +16,7 @@ $node->start; $node->command_fails([ 'createlang', 'plpgsql' ], 'fails if language already exists'); -$node->psql('postgres', 'DROP EXTENSION plpgsql'); +$node->safe_psql('postgres', 'DROP EXTENSION plpgsql'); $node->issues_sql_like( [ 'createlang', 'plpgsql' ], qr/statement: CREATE EXTENSION "plpgsql"/, diff --git a/src/bin/scripts/t/050_dropdb.pl b/src/bin/scripts/t/050_dropdb.pl index fb4f6564811..25aa54a4ae4 100644 --- a/src/bin/scripts/t/050_dropdb.pl +++ b/src/bin/scripts/t/050_dropdb.pl @@ -13,7 +13,7 @@ my $node = get_new_node('main'); $node->init; $node->start; -$node->psql('postgres', 'CREATE DATABASE foobar1'); +$node->safe_psql('postgres', 'CREATE DATABASE foobar1'); $node->issues_sql_like( [ 'dropdb', 'foobar1' ], qr/statement: DROP DATABASE foobar1/, diff --git a/src/bin/scripts/t/070_dropuser.pl b/src/bin/scripts/t/070_dropuser.pl index 22079f6742c..166a591d0a1 100644 --- a/src/bin/scripts/t/070_dropuser.pl +++ b/src/bin/scripts/t/070_dropuser.pl @@ -13,7 +13,7 @@ my $node = get_new_node('main'); $node->init; $node->start; -$node->psql('postgres', 'CREATE ROLE foobar1'); +$node->safe_psql('postgres', 'CREATE ROLE foobar1'); $node->issues_sql_like( [ 'dropuser', 'foobar1' ], qr/statement: DROP ROLE foobar1/, diff --git a/src/bin/scripts/t/090_reindexdb.pl b/src/bin/scripts/t/090_reindexdb.pl index 7f57af8e391..d92896f34f6 100644 --- a/src/bin/scripts/t/090_reindexdb.pl +++ b/src/bin/scripts/t/090_reindexdb.pl @@ -20,7 +20,7 @@ $node->issues_sql_like( qr/statement: REINDEX DATABASE postgres;/, 'SQL REINDEX run'); -$node->psql('postgres', +$node->safe_psql('postgres', 'CREATE TABLE test1 (a int); CREATE INDEX test1x ON test1 (a);'); $node->issues_sql_like( [ 'reindexdb', '-t', 'test1', 'postgres' ], -- cgit v1.2.3