From 0f8e296db9c870f9c59d62dad4cb07f8b7137d05 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 10 Dec 2021 12:22:55 +1300 Subject: [PATCH v9 3/6] Add new simple TAP test for tablespaces. 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 (but couldn't be replicated), for coverage. Discussion: https://postgr.es/m/CA%2BhUKGKpRWQ9SxdxxDmTBCJoR0YnFpMBe7kyzY8SUQk%2BHeskxg%40mail.gmail.com --- .../modules/test_misc/t/002_tablespace.pl | 49 +++++++++++++++++++ 1 file changed, 49 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..3864e5c24b --- /dev/null +++ b/src/test/modules/test_misc/t/002_tablespace.pl @@ -0,0 +1,49 @@ +# 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 => 6; + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->start; + +# Create a directory to hold the tablespace. +my $LOCATION = $node->basedir() . "/testtablespace"; +mkdir($LOCATION); + +my $result; + +# Create a tablespace with an absolute path +$result = $node->psql('postgres', + "CREATE TABLESPACE regress_tablespace LOCATION '$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_tablespace LOCATION '$LOCATION'"); +ok($result != 0, 'clobber tablespace with absolute path'); + +# Create table in it +$result = $node->psql('postgres', + "CREATE TABLE t () TABLESPACE regress_tablespace"); +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_tablespace LOCATION '$LOCATION'"); +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_tablespace"); +ok($result == 0, 'drop tablespace with absolute path'); + +$node->stop; -- 2.33.1