summaryrefslogtreecommitdiffstats
path: root/src/bin/initdb/t
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:17:33 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:17:33 +0000
commit5e45211a64149b3c659b90ff2de6fa982a5a93ed (patch)
tree739caf8c461053357daa9f162bef34516c7bf452 /src/bin/initdb/t
parentInitial commit. (diff)
downloadpostgresql-15-5e45211a64149b3c659b90ff2de6fa982a5a93ed.tar.xz
postgresql-15-5e45211a64149b3c659b90ff2de6fa982a5a93ed.zip
Adding upstream version 15.5.upstream/15.5
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bin/initdb/t')
-rw-r--r--src/bin/initdb/t/001_initdb.pl150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl
new file mode 100644
index 0000000..164fc11
--- /dev/null
+++ b/src/bin/initdb/t/001_initdb.pl
@@ -0,0 +1,150 @@
+
+# Copyright (c) 2021-2022, PostgreSQL Global Development Group
+
+# To test successful data directory creation with an additional feature, first
+# try to elaborate the "successful creation" test instead of adding a test.
+# Successful initdb consumes much time and I/O.
+
+use strict;
+use warnings;
+use Fcntl ':mode';
+use File::stat qw{lstat};
+use PostgreSQL::Test::Cluster;
+use PostgreSQL::Test::Utils;
+use Test::More;
+
+my $tempdir = PostgreSQL::Test::Utils::tempdir;
+my $xlogdir = "$tempdir/pgxlog";
+my $datadir = "$tempdir/data";
+
+program_help_ok('initdb');
+program_version_ok('initdb');
+program_options_handling_ok('initdb');
+
+command_fails([ 'initdb', '-S', "$tempdir/nonexistent" ],
+ 'sync missing data directory');
+
+mkdir $xlogdir;
+mkdir "$xlogdir/lost+found";
+command_fails(
+ [ 'initdb', '-X', $xlogdir, $datadir ],
+ 'existing nonempty xlog directory');
+rmdir "$xlogdir/lost+found";
+command_fails(
+ [ 'initdb', '-X', 'pgxlog', $datadir ],
+ 'relative xlog directory not allowed');
+
+command_fails(
+ [ 'initdb', '-U', 'pg_test', $datadir ],
+ 'role names cannot begin with "pg_"');
+
+mkdir $datadir;
+
+# make sure we run one successful test without a TZ setting so we test
+# initdb's time zone setting code
+{
+
+ # delete local only works from perl 5.12, so use the older way to do this
+ local (%ENV) = %ENV;
+ delete $ENV{TZ};
+
+ command_ok([ 'initdb', '-N', '-T', 'german', '-X', $xlogdir, $datadir ],
+ 'successful creation');
+
+ # Permissions on PGDATA should be default
+ SKIP:
+ {
+ skip "unix-style permissions not supported on Windows", 1
+ if ($windows_os);
+
+ ok(check_mode_recursive($datadir, 0700, 0600),
+ "check PGDATA permissions");
+ }
+}
+
+# Control file should tell that data checksums are disabled by default.
+command_like(
+ [ 'pg_controldata', $datadir ],
+ qr/Data page checksum version:.*0/,
+ 'checksums are disabled in control file');
+# pg_checksums fails with checksums disabled by default. This is
+# not part of the tests included in pg_checksums to save from
+# the creation of an extra instance.
+command_fails([ 'pg_checksums', '-D', $datadir ],
+ "pg_checksums fails with data checksum disabled");
+
+command_ok([ 'initdb', '-S', $datadir ], 'sync only');
+command_fails([ 'initdb', $datadir ], 'existing data directory');
+
+# Check group access on PGDATA
+SKIP:
+{
+ skip "unix-style permissions not supported on Windows", 2
+ if ($windows_os);
+
+ # Init a new db with group access
+ my $datadir_group = "$tempdir/data_group";
+
+ command_ok(
+ [ 'initdb', '-g', $datadir_group ],
+ 'successful creation with group access');
+
+ ok(check_mode_recursive($datadir_group, 0750, 0640),
+ 'check PGDATA permissions');
+}
+
+# Locale provider tests
+
+if ($ENV{with_icu} eq 'yes')
+{
+ command_fails_like(
+ [ 'initdb', '--no-sync', '--locale-provider=icu', "$tempdir/data2" ],
+ qr/initdb: error: ICU locale must be specified/,
+ 'locale provider ICU requires --icu-locale');
+
+ command_ok(
+ [
+ 'initdb', '--no-sync',
+ '--locale-provider=icu', '--icu-locale=en',
+ "$tempdir/data3"
+ ],
+ 'option --icu-locale');
+
+ command_fails_like(
+ [
+ 'initdb', '--no-sync',
+ '--locale-provider=icu', '--icu-locale=@colNumeric=lower',
+ "$tempdir/dataX"
+ ],
+ qr/FATAL: could not open collator for locale/,
+ 'fails for invalid ICU locale');
+
+ command_fails_like(
+ [
+ 'initdb', '--no-sync',
+ '--locale-provider=icu', '--encoding=SQL_ASCII',
+ '--icu-locale=en', "$tempdir/dataX"
+ ],
+ qr/error: encoding mismatch/,
+ 'fails for encoding not supported by ICU');
+}
+else
+{
+ command_fails(
+ [ 'initdb', '--no-sync', '--locale-provider=icu', "$tempdir/data2" ],
+ 'locale provider ICU fails since no ICU support');
+}
+
+command_fails(
+ [ 'initdb', '--no-sync', '--locale-provider=xyz', "$tempdir/dataX" ],
+ 'fails for invalid locale provider');
+
+command_fails(
+ [
+ 'initdb', '--no-sync',
+ '--locale-provider=libc', '--icu-locale=en',
+ "$tempdir/dataX"
+ ],
+ 'fails for invalid option combination');
+
+done_testing();