1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# Check start.conf handling.
use strict;
use lib 't';
use TestLib;
use PgCommon;
use Test::More tests => 73;
my $systemd = -d '/run/systemd/system';
# Do test with oldest version
my $v = $MAJORS[0];
# create cluster
is ((system "pg_createcluster $v main >/dev/null"), 0, "pg_createcluster $v main");
# Check that we start with 'auto'
note "start.conf auto";
is ((get_cluster_start_conf $v, 'main'), 'auto',
'get_cluster_start_conf returns auto');
is_program_out 'nobody', "grep '^[^\\s#]' /etc/postgresql/$v/main/start.conf",
0, "auto\n", 'start.conf contains auto';
SKIP: {
skip 'not running under systemd', 2 unless ($systemd);
ok_dir '/run/systemd/generator/postgresql.service.wants',
["postgresql\@$v-main.service"],
"systemd generator links cluster";
is ((readlink "/run/systemd/generator/postgresql.service.wants/postgresql\@$v-main.service"),
"/lib/systemd/system/postgresql@.service",
"systemd generator links correct service file");
}
# init script should handle auto cluster
like_program_out 0, "/etc/init.d/postgresql start $v", 0, qr/Start.*($v|systemctl)/;
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/online/, 'cluster is online';
like_program_out 0, "/etc/init.d/postgresql stop $v", 0, qr/Stop.*($v|systemctl)/;
sleep 3 if ($systemd); # FIXME: systemctl stop postgresql is not yet synchronous (#759725)
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/down/, 'cluster is down';
# change to manual, verify start.conf contents
note "start.conf manual";
set_cluster_start_conf $v, 'main', 'manual';
is ((get_cluster_start_conf $v, 'main'), 'manual',
'get_cluster_start_conf returns manual');
is_program_out 'nobody', "grep '^[^\\s#]' /etc/postgresql/$v/main/start.conf",
0, "manual\n", 'start.conf contains manual';
SKIP: {
skip 'not running under systemd', 1 unless ($systemd);
system "systemctl daemon-reload";
ok_dir '/run/systemd/generator/postgresql.service.wants',
[], "systemd generator doesn't link cluster";
}
# init script should not handle manual cluster ...
like_program_out 0, "/etc/init.d/postgresql start $v", 0, qr/Start.*($v|systemctl)/;
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/down/, 'cluster is down';
# pg_ctlcluster should handle manual cluster
is_program_out 'postgres', "pg_ctlcluster $v main start", 0, '';
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/online/, 'cluster is online';
is_program_out 'postgres', "pg_ctlcluster $v main stop", 0, '';
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/down/, 'cluster is down';
# change to disabled, verify start.conf contents
note "start.conf disabled";
set_cluster_start_conf $v, 'main', 'disabled';
is ((get_cluster_start_conf $v, 'main'), 'disabled',
'get_cluster_start_conf returns disabled');
SKIP: {
skip 'not running under systemd', 1 unless ($systemd);
system "systemctl daemon-reload";
ok_dir '/run/systemd/generator/postgresql.service.wants',
[], "systemd generator doesn't link cluster";
}
# init script should not handle disabled cluster
like_program_out 0, "/etc/init.d/postgresql start $v", 0, qr/Start.*($v|systemctl)/;
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/down/, 'cluster is down';
# pg_ctlcluster should not start disabled cluster
is_program_out 'postgres', "pg_ctlcluster $v main start", 1,
"Error: Cluster is disabled\n";
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/down/, 'cluster is down';
# change back to manual, start cluster
set_cluster_start_conf $v, 'main', 'manual';
is_program_out 'postgres', "pg_ctlcluster $v main start", 0, '';
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/online/, 'cluster is online';
# however, we want to stop disabled clusters
set_cluster_start_conf $v, 'main', 'disabled';
is_program_out 'postgres', "pg_ctlcluster $v main stop", 0, '';
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/down/, 'cluster is down';
# set back to manual
set_cluster_start_conf $v, 'main', 'manual';
is_program_out 'postgres', "pg_ctlcluster $v main start", 0, '';
like_program_out 'postgres', 'pg_lsclusters -h', 0, qr/online/, 'cluster is online';
# upgrade cluster
note "test upgrade";
if ($#MAJORS == 0) {
pass 'only one major version installed, skipping upgrade test';
pass '...';
} else {
like_program_out 0, "pg_upgradecluster -v $MAJORS[-1] $v main", 0, qr/Success/;
}
# check start.conf of old and upgraded cluster
is ((get_cluster_start_conf $v, 'main'), 'manual',
'get_cluster_start_conf for old cluster returns manual');
is ((get_cluster_start_conf $MAJORS[-1], 'main'), 'manual',
'get_cluster_start_conf for new cluster returns manual');
# clean up
if ($#MAJORS == 0) {
pass '...';
} else {
is ((system "pg_dropcluster $v main"), 0,
'dropping old cluster');
}
is ((system "pg_dropcluster $MAJORS[-1] main --stop"), 0,
'dropping upgraded cluster');
is_program_out 'postgres', 'pg_lsclusters -h', 0, '', 'no clusters any more';
# create cluster with --start-conf option
is_program_out 0, "pg_createcluster $v main --start-conf foo", 1,
"Error: Invalid --start-conf value: foo\n",
'pg_createcluster checks --start-conf validity';
is ((system "pg_createcluster $v main --start-conf manual >/dev/null"), 0,
'pg_createcluster checks --start-conf manual');
is ((get_cluster_start_conf $v, 'main'), 'manual',
'get_cluster_start_conf returns manual');
is ((system "pg_dropcluster $v main"), 0,
'dropping cluster');
check_clean;
# vim: filetype=perl
|