This file is indexed.

/usr/share/postgresql-common/t/015_start_stop.t is in postgresql-common 181+deb9u1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
use strict;

use lib 't';
use TestLib;
use PgCommon;

use Test::More tests => 73 * ($#MAJORS+1);

my $systemd = (-d "/var/run/systemd/system" and not $ENV{_SYSTEMCTL_SKIP_REDIRECT});
note $systemd ? "We are running systemd" : "We are not running systemd";

# check cluster status
# arguments: <version> <pg_ctlcluster exit status> <systemctl exit status> <text to print>
sub check_status {
    my ($v, $ctlstatus, $scstatus, $text) = @_;
    program_ok (0, "pg_ctlcluster $v main status", $ctlstatus, "cluster $v main $text");
    if ($systemd) {
        program_ok (0, "systemctl status postgresql\@$v-main", $scstatus, "service postgresql\@$v-main $text");
    } else {
        pass '';
    }
}

sub check_major {
    my $v = $_[0];
    my $ctlstopped = $v >= 9.2 ? 3 : 1; # pg_ctl status "not running" changed in 9.2
    note "Running tests for $v";

    note "Cluster does not exist yet"; ###############################
    check_status $v, 1, 3, "does not exist";

    # try to start postgresql
    if ($systemd) {
        program_ok (0, "systemctl start postgresql");
    } else {
        program_ok (0, "/etc/init.d/postgresql start");
    }
    check_status $v, 1, 3, "does not exist";

    # try to start specific cluster
    if ($systemd) {
        program_ok (0, "systemctl start postgresql\@$v-main");
    } else {
        program_ok (0, "/etc/init.d/postgresql start $v");
    }
    check_status $v, 1, 3, "does not exist";

    note "Start/stop postgresql using system tools"; ###############################

    # create cluster
    program_ok (0, "pg_createcluster $v main");
    check_status $v, $ctlstopped, 3, "is stopped";

    # start postgresql
    if ($systemd) {
        program_ok (0, "systemctl start postgresql");
    } else {
        program_ok (0, "/etc/init.d/postgresql start");
    }
    check_status $v, 0, 0, "is running";

    # start postgresql again
    if ($systemd) {
        program_ok (0, "systemctl start postgresql");
    } else {
        program_ok (0, "/etc/init.d/postgresql start");
    }
    check_status $v, 0, 0, "is already running";

    # stop postgresql
    if ($systemd) {
        program_ok (0, "systemctl stop postgresql");
        sleep 3; # FIXME: systemctl stop postgresql is not yet synchronous (#759725)
    } else {
        program_ok (0, "/etc/init.d/postgresql stop");
    }
    check_status $v, $ctlstopped, 3, "is stopped";

    # stop postgresql again
    if ($systemd) {
        program_ok (0, "systemctl stop postgresql");
    } else {
        program_ok (0, "/etc/init.d/postgresql stop");
    }
    check_status $v, $ctlstopped, 3, "is already stopped";

    note "Start/stop specific cluster using system tools"; ###############################

    # start cluster using system tools
    if ($systemd) {
        program_ok (0, "systemctl start postgresql\@$v-main");
    } else {
        program_ok (0, "/etc/init.d/postgresql start $v");
    }
    check_status $v, 0, 0, "is running";

    # try start cluster again
    if ($systemd) {
        program_ok (0, "systemctl start postgresql\@$v-main");
    } else {
        program_ok (0, "/etc/init.d/postgresql start $v");
    }
    check_status $v, 0, 0, "is running";

    # restart cluster
    if ($systemd) {
        program_ok (0, "systemctl restart postgresql\@$v-main");
    } else {
        program_ok (0, "/etc/init.d/postgresql restart $v");
    }
    check_status $v, 0, 0, "is running";

    # stop cluster
    if ($systemd) {
        program_ok (0, "systemctl stop postgresql\@$v-main");
    } else {
        program_ok (0, "/etc/init.d/postgresql stop $v");
    }
    check_status $v, $ctlstopped, 3, "is stopped";

    # try to stop cluster again
    if ($systemd) {
        program_ok (0, "systemctl stop postgresql\@$v-main");
    } else {
        program_ok (0, "/etc/init.d/postgresql stop $v");
    }
    check_status $v, $ctlstopped, 3, "is already stopped";

    # drop cluster
    program_ok (0, "pg_dropcluster $v main");
    check_status $v, 1, 3, "does not exist";

    note "Start/stop specific cluster using pg_*cluster"; ###############################

    # try to start cluster
    program_ok (0, "pg_ctlcluster $v main start", 1);
    check_status $v, 1, 3, "does not exist";

    # create cluster and start it
    program_ok (0, "pg_createcluster $v main --start");
    check_status $v, 0, 0, "is running";

    # try to start cluster again
    my $exitagain = $systemd ? 0 : 2;
    program_ok (0, "pg_ctlcluster $v main start", $exitagain);
    check_status $v, 0, 0, "is already running";

    # restart cluster
    program_ok (0, "pg_ctlcluster $v main restart");
    check_status $v, 0, 0, "is running";

    # stop cluster
    program_ok (0, "pg_ctlcluster $v main stop");
    check_status $v, $ctlstopped, 3, "is stopped";

    # try to stop cluster again
    program_ok (0, "pg_ctlcluster $v main stop", 2);
    check_status $v, $ctlstopped, 3, "is already stopped";

    # start cluster
    program_ok (0, "pg_ctlcluster $v main start");
    check_status $v, 0, 0, "is running";

    # stop server, clean up, check for leftovers
    program_ok (0, "pg_dropcluster $v main --stop");

    check_clean;
}

foreach (@MAJORS) {
    check_major $_;
}

# vim: filetype=perl