Add test for copy of shared dependencies from template database
authorMichael Paquier <[email protected]>
Wed, 27 Oct 2021 07:02:19 +0000 (16:02 +0900)
committerMichael Paquier <[email protected]>
Wed, 27 Oct 2021 07:02:19 +0000 (16:02 +0900)
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/[email protected]

src/bin/scripts/t/020_createdb.pl

index cb8e26c77312dc98ab9ea207a91ae4e48fb416f2..6bcc59de08d8feb0f77dc95a3c64449d3d4b5a73 100644 (file)
@@ -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' ],