summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2021-10-27 16:02:19 +0900
committerMichael Paquier <michael@paquier.xyz>2021-10-27 16:02:19 +0900
commit70bfc5ae537c8bfeed4849b7d9f814de89a155fe (patch)
treedac36bc576985fb9a0d558c2e9d060749fe7f95b /src
parent5a2832465fd8984d089e8c44c094e6900d987fcd (diff)
Add test for copy of shared dependencies from template database
As 98ec35b has proved, there has never been any coverage in this area of the code. This commit adds a new TAP test with a template database that includes a small set of shared dependencies copied to a new database. The test is added in createdb, where we have never tested that -T generates a query with TEMPLATE, either. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/YXDTl+PfSnqmbbkE@paquier.xyz
Diffstat (limited to 'src')
-rw-r--r--src/bin/scripts/t/020_createdb.pl26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl
index cb8e26c7731..6bcc59de08d 100644
--- a/src/bin/scripts/t/020_createdb.pl
+++ b/src/bin/scripts/t/020_createdb.pl
@@ -6,7 +6,7 @@ use warnings;
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
-use Test::More tests => 22;
+use Test::More tests => 25;
program_help_ok('createdb');
program_version_ok('createdb');
@@ -28,6 +28,30 @@ $node->issues_sql_like(
$node->command_fails([ 'createdb', 'foobar1' ],
'fails if database already exists');
+# Check use of templates with shared dependencies copied from the template.
+my ($ret, $stdout, $stderr) = $node->psql(
+ 'foobar2',
+ 'CREATE ROLE role_foobar;
+CREATE TABLE tab_foobar (id int);
+ALTER TABLE tab_foobar owner to role_foobar;
+CREATE POLICY pol_foobar ON tab_foobar FOR ALL TO role_foobar;');
+$node->issues_sql_like(
+ [ 'createdb', '-l', 'C', '-T', 'foobar2', 'foobar3' ],
+ qr/statement: CREATE DATABASE foobar3 TEMPLATE foobar2/,
+ 'create database with template');
+($ret, $stdout, $stderr) = $node->psql(
+ 'foobar3',
+ "SELECT pg_describe_object(classid, objid, objsubid) AS obj,
+ pg_describe_object(refclassid, refobjid, 0) AS refobj
+ FROM pg_shdepend s JOIN pg_database d ON (d.oid = s.dbid)
+ WHERE d.datname = 'foobar3' ORDER BY obj;", on_error_die => 1);
+chomp($stdout);
+like(
+ $stdout,
+ qr/^policy pol_foobar on table tab_foobar\|role role_foobar
+table tab_foobar\|role role_foobar$/,
+ 'shared dependencies copied over to target database');
+
# Check quote handling with incorrect option values.
$node->command_checks_all(
[ 'createdb', '--encoding', "foo'; SELECT '1", 'foobar2' ],