mirror of https://github.com/postgres/postgres
The tablespace tests in the main regression tests have been changed to use "in-place" tablespaces, so that they work when streamed to a replica on the same host. Add a new TAP test that exercises tablespaces with absolute paths, for coverage. Reviewed-by: Andres Freund <andres@anarazel.de> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/CA%2BhUKGKpRWQ9SxdxxDmTBCJoR0YnFpMBe7kyzY8SUQk%2BHeskxg%40mail.gmail.compull/73/head
parent
d6d317dbf6
commit
d1511fe1b0
@ -0,0 +1,96 @@ |
||||
# 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 $TS1_LOCATION = $node->basedir() . "/ts1"; |
||||
mkdir($TS1_LOCATION); |
||||
my $TS2_LOCATION = $node->basedir() . "/ts2"; |
||||
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; |
Loading…
Reference in new issue