From 64f3a6aded930c82e35a466b2dad58299d29ee6e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 24 Nov 2019 00:22:25 +0000 Subject: t/httpd-corner: wait for worker process death We need to ensure the worker process is terminated before starting a new connection, so leave a persistent HTTP/1.1 connection open and wait for the SIGKILL to take effect and drop the client. --- t/httpd-corner.psgi | 2 +- t/httpd-corner.t | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) (limited to 't') diff --git a/t/httpd-corner.psgi b/t/httpd-corner.psgi index bf38d1ff..18e556be 100644 --- a/t/httpd-corner.psgi +++ b/t/httpd-corner.psgi @@ -87,7 +87,7 @@ my $app = sub { }); } elsif ($path eq '/pid') { $code = 200; - push @$body, $$; + push @$body, "$$\n"; } [ $code, $h, $body ] diff --git a/t/httpd-corner.t b/t/httpd-corner.t index b063d9fa..cc36c7e1 100644 --- a/t/httpd-corner.t +++ b/t/httpd-corner.t @@ -76,17 +76,22 @@ my $spawn_httpd = sub { $spawn_httpd->(); if ('test worker death') { my $conn = conn_for($sock, 'killed worker'); - $conn->write("GET /pid HTTP/1.0\r\n\r\n"); - ok($conn->read(my $buf, 8192), 'read response'); - my ($head, $body) = split(/\r\n\r\n/, $buf); - like($body, qr/\A[0-9]+\z/, '/pid response'); - my $pid = $body; + $conn->write("GET /pid HTTP/1.1\r\nHost:example.com\r\n\r\n"); + my $pid; + while (defined(my $line = $conn->getline)) { + next unless $line eq "\r\n"; + chomp($pid = $conn->getline); + last; + } + like($pid, qr/\A[0-9]+\z/, '/pid response'); is(kill('KILL', $pid), 1, 'killed worker'); + is($conn->getline, undef, 'worker died and EOF-ed client'); $conn = conn_for($sock, 'respawned worker'); $conn->write("GET /pid HTTP/1.0\r\n\r\n"); - ok($conn->read($buf, 8192), 'read response'); - ($head, $body) = split(/\r\n\r\n/, $buf); + ok($conn->read(my $buf, 8192), 'read response'); + my ($head, $body) = split(/\r\n\r\n/, $buf); + chomp($body); like($body, qr/\A[0-9]+\z/, '/pid response'); isnt($body, $pid, 'respawned worker'); } -- cgit v1.2.3-24-ge0c7