31
31
# Test that it daemonizes, creates a PID file, and removes that PID file.
32
32
# ############################################################################
34
my $ret_val = system("$cmd 5 --daemonize --pid $pid_file >/dev/null 2>&1");
34
my $ret_val = system("$cmd 3 --daemonize --pid $pid_file --log $log_file");
35
35
die 'Cannot test Daemon.pm because t/daemonizes.pl is not working'
36
36
unless $ret_val == 0;
38
PerconaTest::wait_for_files($pid_file);
38
PerconaTest::wait_for_files($pid_file, $log_file)
39
or die "$cmd did not create $pid_file and $log_file";
40
my $output = `ps wx | grep '$cmd 5' | grep -v grep`;
41
my ($pid, $output) = PerconaTest::get_cmd_pid("$cmd 3");
60
60
'PID file has correct PID'
63
# Wait until the process goes away
64
PerconaTest::wait_until(sub { !kill(0, $pid) });
67
'Removes PID file upon exit'
64
skip "Previous tests failed", 1 unless $pid;
66
# Wait until the process goes away
67
PerconaTest::wait_until(sub { !kill(0, $pid) });
70
'Removes PID file upon exit'
70
74
# ############################################################################
71
75
# Check that STDOUT can be redirected
132
136
# ##########################################################################
135
skip 'No /proc', 2 unless -d '/proc';
136
skip 'No fd in /proc', 2 unless -l "/proc/$PID/0" || -l "/proc/$PID/fd/0";
139
skip 'No /proc', 1 unless -d '/proc';
140
skip 'No fd in /proc', 1 unless -l "/proc/$PID/0" || -l "/proc/$PID/fd/0";
138
system("$cmd 5 --daemonize --pid $pid_file --log $log_file");
139
PerconaTest::wait_for_files($pid_file);
140
chomp($pid = slurp_file($pid_file));
142
system("$cmd 15 --daemonize --pid $pid_file --log $log_file");
143
PerconaTest::wait_for_files($pid_file, $log_file)
144
or die "$cmd did not create $pid_file and $log_file";
145
my $pid = PerconaTest::get_cmd_pid("$cmd 15")
146
or die "Cannot get PID of $cmd 15\n" . `ps xww`;
141
147
my $proc_fd_0 = -l "/proc/$pid/0" ? "/proc/$pid/0"
142
148
: -l "/proc/$pid/fd/0" ? "/proc/$pid/fd/0"
143
149
: die "Cannot find fd 0 symlink in /proc/$pid";
150
156
'Reopens STDIN to /dev/null'
154
skip "-t is not reliable", 1;
156
system("echo foo | $cmd 5 --daemonize --pid $pid_file --log $log_file");
157
PerconaTest::wait_for_files($pid_file, $log_file);
158
chomp($pid = slurp_file($pid_file));
159
$proc_fd_0 = -l "/proc/$pid/0" ? "/proc/$pid/0"
160
: -l "/proc/$pid/fd/0" ? "/proc/$pid/fd/0"
161
: die "Cannot find fd 0 symlink in /proc/$pid";
162
PTDEVDEBUG && PerconaTest::_d('pid_file', $pid_file,
163
'pid', $pid, 'proc_fd_0', $proc_fd_0, `ls -l $proc_fd_0`);
164
$stdin = readlink $proc_fd_0;
168
'Does not reopen STDIN to /dev/null when piped',
159
PerconaTest::kill_program(pid => $pid);
162
# skip "-t is not reliable", 1;
164
# system("echo foo | $cmd 5 --daemonize --pid $pid_file --log $log_file");
165
# PerconaTest::wait_for_files($pid_file, $log_file);
166
# chomp($pid = slurp_file($pid_file));
167
# $proc_fd_0 = -l "/proc/$pid/0" ? "/proc/$pid/0"
168
# : -l "/proc/$pid/fd/0" ? "/proc/$pid/fd/0"
169
# : die "Cannot find fd 0 symlink in /proc/$pid";
170
# PTDEVDEBUG && PerconaTest::_d('pid_file', $pid_file,
171
# 'pid', $pid, 'proc_fd_0', $proc_fd_0, `ls -l $proc_fd_0`);
172
# $stdin = readlink $proc_fd_0;
176
# 'Does not reopen STDIN to /dev/null when piped',
174
182
# ##########################################################################
175
183
# Issue 419: Daemon should check wether process with pid obtained from
176
184
# pid-file is still running
177
185
# ##########################################################################
179
system("$cmd 5 --daemonize --pid $pid_file >/dev/null 2>&1");
187
system("$cmd 7 --daemonize --pid $pid_file >/dev/null 2>&1");
180
188
PerconaTest::wait_for_files($pid_file);
181
chomp($pid = slurp_file($pid_file));
189
$pid = PerconaTest::get_cmd_pid("$cmd 7")
190
or die "Cannot get PID of $cmd 7";
184
$output = `ps wx | grep '^[ ]*$pid' | grep -v grep`;
193
(undef, $output) = PerconaTest::get_cmd_pid("$cmd 7");
195
204
my (undef, $tempfile) = tempfile();
197
system("$cmd 5 --daemonize --log $log_file --pid $pid_file > $tempfile 2>&1");
206
system("$cmd 6 --daemonize --log $log_file --pid $pid_file > $tempfile 2>&1");
198
207
PerconaTest::wait_for_files($log_file, $pid_file, $tempfile);
200
$output = `ps wx | grep '$cmd 5' | grep -v grep`;
201
chomp(my $new_pid = slurp_file($pid_file));
209
($new_pid, $output) = PerconaTest::get_cmd_pid("$cmd 6");
229
239
# Check that it actually checks the running process.
230
240
# ############################################################################
232
system("$cmd 20 --daemonize --log $log_file --pid $pid_file");
242
system("$cmd 10 --daemonize --log $log_file --pid $pid_file");
233
243
PerconaTest::wait_for_files($pid_file, $log_file);
234
244
chomp($pid = slurp_file($pid_file));
235
$output = `$cmd 0 --daemonize --pid $pid_file 2>&1`;
245
$output = `$cmd 1 --daemonize --pid $pid_file 2>&1`;
238
248
qr/PID file $pid_file exists and PID $pid is running/,
239
249
'Says that PID is running (issue 419)'
252
PerconaTest::kill_program(pid => $pid);
249
255
# #############################################################################