| 1 | use strict; |
|---|
| 2 | use warnings; |
|---|
| 3 | |
|---|
| 4 | use Test::TCP; |
|---|
| 5 | use Test::More tests => 9; |
|---|
| 6 | |
|---|
| 7 | use Server::Starter qw(start_server); |
|---|
| 8 | |
|---|
| 9 | test_tcp( |
|---|
| 10 | server => sub { |
|---|
| 11 | my $port = shift; |
|---|
| 12 | start_server( |
|---|
| 13 | port => $port, |
|---|
| 14 | exec => [ qw(t/03-startfail-server.pl) ], |
|---|
| 15 | ); |
|---|
| 16 | }, |
|---|
| 17 | client => sub { |
|---|
| 18 | my ($port, $server_pid) = @_; |
|---|
| 19 | my $buf; |
|---|
| 20 | sleep 3; |
|---|
| 21 | { |
|---|
| 22 | my $sock = IO::Socket::INET->new( |
|---|
| 23 | PeerAddr => "127.0.0.1:$port", |
|---|
| 24 | Proto => 'tcp', |
|---|
| 25 | ); |
|---|
| 26 | ok($sock, 'connect'); |
|---|
| 27 | # check generation |
|---|
| 28 | ok($sock->sysread($buf, 1048576), 'read'); |
|---|
| 29 | is($buf, 2, 'check generation'); |
|---|
| 30 | } |
|---|
| 31 | # request restart, that will fail |
|---|
| 32 | kill 'HUP', $server_pid; |
|---|
| 33 | sleep 1; |
|---|
| 34 | { |
|---|
| 35 | my $sock = IO::Socket::INET->new( |
|---|
| 36 | PeerAddr => "127.0.0.1:$port", |
|---|
| 37 | Proto => 'tcp', |
|---|
| 38 | ); |
|---|
| 39 | ok($sock, 'connect'); |
|---|
| 40 | ok( |
|---|
| 41 | $sock->sysread($buf, 1048576), |
|---|
| 42 | 'read while worker is failing to reboot', |
|---|
| 43 | ); |
|---|
| 44 | is($buf, 2, 'check generation'); |
|---|
| 45 | } |
|---|
| 46 | # wait until server succeds in reboot |
|---|
| 47 | sleep 5; |
|---|
| 48 | { |
|---|
| 49 | my $sock = IO::Socket::INET->new( |
|---|
| 50 | PeerAddr => "127.0.0.1:$port", |
|---|
| 51 | Proto => 'tcp', |
|---|
| 52 | ); |
|---|
| 53 | ok($sock, 'connect'); |
|---|
| 54 | ok( |
|---|
| 55 | $sock->sysread($buf, 1048576), |
|---|
| 56 | 'read after worker succeeds to reboot', |
|---|
| 57 | ); |
|---|
| 58 | is($buf, 5, 'check generation'); |
|---|
| 59 | } |
|---|
| 60 | }, |
|---|
| 61 | ); |
|---|