1
# Check that cluster administration works as non-root if the invoker has
2
# sufficient permissions on directories.
9
my $ownver = $MAJORS[-1];
10
my $grpver = $MAJORS[0];
12
use Test::More tests => 37;
14
use lib '/usr/share/postgresql-common';
17
my $testuser = 'postgres';
18
my ($uid, $gid) = (getpwnam $testuser)[2,3];
20
# fails by default due to access restrictions
21
is ((exec_as 'postgres', "pg_createcluster $ownver fail --start"), 1,
22
"pg_createcluster fails as user $testuser by default");
23
# and does not leave any garbage behind
26
# prepare directories to that we can access it as owner/group
27
die "could not mkdir: $!" if system "mkdir -p /etc/postgresql/$ownver /etc/postgresql/$grpver /var/log/postgresql /var/lib/postgresql/$ownver /var/lib/postgresql/$grpver";
28
chown $uid, 0, "/etc/postgresql/$ownver", "/var/lib/postgresql/$ownver";
29
chown 0, $gid, "/etc/postgresql/$grpver", "/var/log/postgresql", "/var/lib/postgresql/$grpver";
30
chmod 0775, "/etc/postgresql/$grpver", "/var/log/postgresql", "/var/lib/postgresql/$grpver";
32
# pg_createcluster and pg_ctlcluster
33
is ((exec_as $testuser, "pg_createcluster $ownver own --start"), 0,
34
"pg_createcluster succeeds as user $testuser with appropriate owner permissions");
35
is ((exec_as $testuser, "pg_createcluster $grpver grp --start"), 0,
36
"pg_createcluster succeeds as user $testuser with appropriate group permissions");
38
like_program_out $testuser, 'pg_lsclusters -h', 0,
39
qr/^$grpver\s+grp.*online.*\n^$ownver\s+own.*online/m;
40
like_program_out 'postgres', 'psql -Atl', 0, qr/template1.*UTF8/;
43
like_program_out $testuser, 'pg_maintenance --force', 0,
44
qr/^Doing.*$grpver\/grp.*\n^Doing.*$ownver\/own/m,
45
"pg_maintenance works as user $testuser with appropriate directory permissions";
48
is ((exec_as $testuser, "pg_dropcluster $ownver own --stop"), 0,
49
"pg_dropcluster succeeds as user $testuser with appropriate directory owner permissions");
52
if ($grpver ne $ownver) {
54
is ((exec_as $testuser, "pg_upgradecluster $grpver grp", $outref, 0), 0,
55
"pg_upgradecluster succeeds as user $testuser");
56
like $$outref, qr/Starting target cluster/, 'pg_upgradecluster reported cluster startup';
57
like $$outref, qr/Success. Please check/, 'pg_upgradecluster reported successful operation';
59
like_program_out $testuser, 'pg_lsclusters -h', 0,
60
qr/^$grpver\s+grp.*down.*\n^$ownver\s+grp.*online/m;
63
is ((exec_as $testuser, "pg_dropcluster $grpver grp"), 0);
64
is ((exec_as $testuser, "pg_dropcluster $ownver grp --stop"), 0);
66
pass 'Only one major version installed, skipping pg_upgradecluster tests';
67
for (my $i = 0; $i < 5; ++$i) { pass '...'; }
69
is ((exec_as $testuser, "pg_dropcluster $grpver grp --stop"), 0);
72
# we cannot expect full cleanliness of /{etc,var/lib}/postgresql since that
73
# requires root permissions; thus help a bit
74
rmdir "/etc/postgresql/$ownver";
75
rmdir "/etc/postgresql/$grpver";
76
rmdir "/var/lib/postgresql/$ownver";
77
rmdir "/var/lib/postgresql/$grpver";