disallow /^content_length$/i + /^transfer_encoding$/i
[unicorn.git] / t / back-out-of-upgrade.t
blobcf3b09facea43e58d99cb4d98b94a49658bfdcf2
1 #!perl -w
2 # Copyright (C) unicorn hackers <unicorn-public@yhbt.net>
3 # License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
4 # test backing out of USR2 upgrade
5 use v5.14; BEGIN { require './t/lib.perl' };
6 use autodie;
7 my $srv = tcp_server();
8 mkfifo_die $fifo;
9 write_file '>', $u_conf, <<EOM;
10 preload_app true
11 stderr_path "$err_log"
12 pid "$pid_file"
13 after_fork { |s,w| File.open('$fifo', 'w') { |fp| fp.write "pid=#\$\$" } }
14 EOM
15 my $ar = unicorn(qw(-E none t/pid.ru -c), $u_conf, { 3 => $srv });
17 like(my $wpid_orig_1 = slurp($fifo), qr/\Apid=\d+\z/a, 'got worker pid');
19 ok $ar->do_kill('USR2'), 'USR2 to start upgrade';
20 ok $ar->do_kill('WINCH'), 'drop old worker';
22 like(my $wpid_new = slurp($fifo), qr/\Apid=\d+\z/a, 'got pid from new master');
23 chomp(my $new_pid = slurp($pid_file));
24 isnt $new_pid, $ar->{pid}, 'PID file changed';
25 chomp(my $pid_oldbin = slurp("$pid_file.oldbin"));
26 is $pid_oldbin, $ar->{pid}, '.oldbin PID valid';
28 ok $ar->do_kill('HUP'), 'HUP old master';
29 like(my $wpid_orig_2 = slurp($fifo), qr/\Apid=\d+\z/a, 'got worker new pid');
30 ok kill('QUIT', $new_pid), 'abort old master';
31 kill_until_dead $new_pid;
33 my ($st, $hdr, $req_pid) = do_req $srv, 'GET /';
34 chomp $req_pid;
35 is $wpid_orig_2, "pid=$req_pid", 'new worker on old worker serves';
37 ok !-f "$pid_file.oldbin", '.oldbin PID file gone';
38 chomp(my $old_pid = slurp($pid_file));
39 is $old_pid, $ar->{pid}, 'PID file restored';
41 my @log = grep !/ERROR -- : reaped .*? exec\(\)-ed/, slurp($err_log);
42 check_stderr @log;
43 undef $tmpdir;
44 done_testing;