From cfe7bd17e4fa987c9ba14add48ea58a41c45ccdb Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 21 Jan 2022 15:12:32 +1300 Subject: [PATCH] Add new simple TAP test for tablespaces, attempt II. See commit message for d1511fe1b040853f6e10d353e56b42bb96ae239d. This new version attempts to fix path translation problem on MSYS/Windows. Discussion: https://postgr.es/m/20220117055326.GD756210%40rfd.leadboat.com --- .../modules/test_misc/t/002_tablespace.pl | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/test/modules/test_misc/t/002_tablespace.pl diff --git a/src/test/modules/test_misc/t/002_tablespace.pl b/src/test/modules/test_misc/t/002_tablespace.pl new file mode 100644 index 0000000000..4e4c35b4f2 --- /dev/null +++ b/src/test/modules/test_misc/t/002_tablespace.pl @@ -0,0 +1,99 @@ +# Simple tablespace tests that can't be replicated on the same host +# due to the use of absolute paths, so we keep them out of the regular +# regression tests. + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More tests => 20; + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->start; + +# Create a couple of directories to use as tablespaces. +my $basedir = $node->basedir(); +my $TS1_LOCATION = PostgreSQL::Test::Utils::perl2host("$basedir/ts1"); +$TS1_LOCATION =~ s/\/\.\//\//g; # collapse foo/./bar to foo/bar +mkdir($TS1_LOCATION); +my $TS2_LOCATION = PostgreSQL::Test::Utils::perl2host("$basedir/ts2"); +$TS2_LOCATION =~ s/\/\.\//\//g; +mkdir($TS2_LOCATION); + +my $result; + +# Create a tablespace with an absolute path +$result = $node->psql('postgres', + "CREATE TABLESPACE regress_ts1 LOCATION '$TS1_LOCATION'"); +ok($result == 0, 'create tablespace with absolute path'); + +# Can't create a tablespace where there is one already +$result = $node->psql('postgres', + "CREATE TABLESPACE regress_ts1 LOCATION '$TS1_LOCATION'"); +ok($result != 0, 'clobber tablespace with absolute path'); + +# Create table in it +$result = $node->psql('postgres', + "CREATE TABLE t () TABLESPACE regress_ts1"); +ok($result == 0, 'create table in tablespace with absolute path'); + +# Can't drop a tablespace that still has a table in it +$result = $node->psql('postgres', + "DROP TABLESPACE regress_ts1"); +ok($result != 0, 'drop tablespace with absolute path'); + +# Drop the table +$result = $node->psql('postgres', "DROP TABLE t"); +ok($result == 0, 'drop table in tablespace with absolute path'); + +# Drop the tablespace +$result = $node->psql('postgres', "DROP TABLESPACE regress_ts1"); +ok($result == 0, 'drop tablespace with absolute path'); + +# Create two absolute tablespaces and two in-place tablespaces, so we can +# testing various kinds of tablespace moves. +$result = $node->psql('postgres', + "CREATE TABLESPACE regress_ts1 LOCATION '$TS1_LOCATION'"); +ok($result == 0, 'create tablespace 1 with absolute path'); +$result = $node->psql('postgres', + "CREATE TABLESPACE regress_ts2 LOCATION '$TS2_LOCATION'"); +ok($result == 0, 'create tablespace 2 with absolute path'); +$result = $node->psql('postgres', + "SET allow_in_place_tablespaces=on; CREATE TABLESPACE regress_ts3 LOCATION ''"); +ok($result == 0, 'create tablespace 3 with in-place directory'); +$result = $node->psql('postgres', + "SET allow_in_place_tablespaces=on; CREATE TABLESPACE regress_ts4 LOCATION ''"); +ok($result == 0, 'create tablespace 4 with in-place directory'); + +# Create a table and test moving between absolute and in-place tablespaces +$result = $node->psql('postgres', + "CREATE TABLE t () TABLESPACE regress_ts1"); +ok($result == 0, 'create table in tablespace 1'); +$result = $node->psql('postgres', + "ALTER TABLE t SET tablespace regress_ts2"); +ok($result == 0, 'move table abs->abs'); +$result = $node->psql('postgres', + "ALTER TABLE t SET tablespace regress_ts3"); +ok($result == 0, 'move table abs->in-place'); +$result = $node->psql('postgres', + "ALTER TABLE t SET tablespace regress_ts4"); +ok($result == 0, 'move table in-place->in-place'); +$result = $node->psql('postgres', + "ALTER TABLE t SET tablespace regress_ts1"); +ok($result == 0, 'move table in-place->abs'); + +# Drop everything +$result = $node->psql('postgres', + "DROP TABLE t"); +ok($result == 0, 'create table in tablespace 1'); +$result = $node->psql('postgres', "DROP TABLESPACE regress_ts1"); +ok($result == 0, 'drop tablespace 1'); +$result = $node->psql('postgres', "DROP TABLESPACE regress_ts2"); +ok($result == 0, 'drop tablespace 2'); +$result = $node->psql('postgres', "DROP TABLESPACE regress_ts3"); +ok($result == 0, 'drop tablespace 3'); +$result = $node->psql('postgres', "DROP TABLESPACE regress_ts4"); +ok($result == 0, 'drop tablespace 4'); + +$node->stop;