about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <BOFH@YHBT.net>2023-09-10 07:13:11 +0000
committerEric Wong <BOFH@YHBT.net>2023-09-10 19:01:03 +0000
commit1607ac966f604ec4cf383025c4c3ee296f638fff (patch)
tree821be17a5c6cf9404c3ab22c377efe70ebde7075
parentd67284a692683bca59effd9c0670bd5dd47e4fa3 (diff)
downloadunicorn-1607ac966f604ec4cf383025c4c3ee296f638fff.tar.gz
Being able to do subsecond sleeps is one welcome advantage
over POSIX (not GNU) sleep(1) in portable Bourne sh.
-rw-r--r--t/reopen-logs.ru (renamed from t/t0006.ru)0
-rw-r--r--t/reopen-logs.t43
-rwxr-xr-xt/t0006-reopen-logs.sh83
3 files changed, 43 insertions, 83 deletions
diff --git a/t/t0006.ru b/t/reopen-logs.ru
index c39e8f6..c39e8f6 100644
--- a/t/t0006.ru
+++ b/t/reopen-logs.ru
diff --git a/t/reopen-logs.t b/t/reopen-logs.t
new file mode 100644
index 0000000..e1bf524
--- /dev/null
+++ b/t/reopen-logs.t
@@ -0,0 +1,43 @@
+#!perl -w
+# Copyright (C) unicorn hackers <unicorn-public@yhbt.net>
+# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
+use v5.14; BEGIN { require './t/lib.perl' };
+use autodie;
+my $srv = tcp_server();
+my $u_conf = "$tmpdir/u.conf.rb";
+my $out_log = "$tmpdir/out.log";
+open my $fh, '>', $u_conf;
+print $fh <<EOM;
+stderr_path "$err_log"
+stdout_path "$out_log"
+EOM
+close $fh;
+
+my $auto_reap = unicorn('-c', $u_conf, 't/reopen-logs.ru', { 3 => $srv } );
+my $c = tcp_start($srv, 'GET / HTTP/1.0');
+my ($status, $hdr) = slurp_hdr($c);
+my $bdy = do { local $/; <$c> };
+is($bdy, "true\n", 'logs opened');
+
+rename($err_log, "$err_log.rot");
+rename($out_log, "$out_log.rot");
+
+$auto_reap->do_kill('USR1');
+
+my $tries = 1000;
+while (!-f $err_log && --$tries) { select undef, undef, undef, 0.01 };
+while (!-f $out_log && --$tries) { select undef, undef, undef, 0.01 };
+
+ok(-f $out_log, 'stdout_path recreated after USR1');
+ok(-f $err_log, 'stderr_path recreated after USR1');
+
+$c = tcp_start($srv, 'GET / HTTP/1.0');
+($status, $hdr) = slurp_hdr($c);
+$bdy = do { local $/; <$c> };
+is($bdy, "true\n", 'logs reopened with sync==true');
+
+$auto_reap->join('QUIT');
+is($?, 0, 'no error on exit');
+check_stderr;
+undef $tmpdir;
+done_testing;
diff --git a/t/t0006-reopen-logs.sh b/t/t0006-reopen-logs.sh
deleted file mode 100755
index a6e7a17..0000000
--- a/t/t0006-reopen-logs.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-. ./test-lib.sh
-
-t_plan 15 "reopen rotated logs"
-
-t_begin "setup and startup" && {
-        rtmpfiles curl_out curl_err r_rot
-        unicorn_setup
-        unicorn -D t0006.ru -c $unicorn_config
-        unicorn_wait_start
-}
-
-t_begin "ensure server is responsive" && {
-        test xtrue = x$(curl -sSf http://$listen/ 2> $curl_err)
-}
-
-t_begin "ensure stderr log is clean" && check_stderr
-
-t_begin "external log rotation" && {
-        rm -f $r_rot
-        mv $r_err $r_rot
-}
-
-t_begin "send reopen log signal (USR1)" && {
-        kill -USR1 $unicorn_pid
-}
-
-t_begin "wait for rotated log to reappear" && {
-        nr=60
-        while ! test -f $r_err && test $nr -ge 0
-        do
-                sleep 1
-                nr=$(( $nr - 1 ))
-        done
-}
-
-t_begin "ensure server is still responsive" && {
-        test xtrue = x$(curl -sSf http://$listen/ 2> $curl_err)
-}
-
-t_begin "wait for worker to reopen logs" && {
-        nr=60
-        re="worker=.* done reopening logs"
-        while ! grep "$re" < $r_err >/dev/null && test $nr -ge 0
-        do
-                sleep 1
-                nr=$(( $nr - 1 ))
-        done
-}
-
-dbgcat r_rot
-dbgcat r_err
-
-t_begin "ensure no errors from curl" && {
-        test ! -s $curl_err
-}
-
-t_begin "current server stderr is clean" && check_stderr
-
-t_begin "rotated stderr is clean" && {
-        check_stderr $r_rot
-}
-
-t_begin "server is now writing logs to new stderr" && {
-        before_rot=$(count_bytes < $r_rot)
-        before_err=$(count_bytes < $r_err)
-        test xtrue = x$(curl -sSf http://$listen/ 2> $curl_err)
-        after_rot=$(count_bytes < $r_rot)
-        after_err=$(count_bytes < $r_err)
-        test $after_rot -eq $before_rot
-        test $after_err -gt $before_err
-}
-
-t_begin "stop server" && {
-        kill $unicorn_pid
-}
-
-dbgcat r_err
-
-t_begin "current server stderr is clean" && check_stderr
-t_begin "rotated stderr is clean" && check_stderr $r_rot
-
-t_done