File Coverage

blib/lib/Net/Wait.pm
Criterion Covered Total %
statement 30 30 100.0
branch 21 22 95.4
condition 2 3 66.6
subroutine 3 3 100.0
pod n/a
total 56 58 96.5


line stmt bran cond sub pod time code
1             package Net::Wait;
2              
3 2     2   790 use Carp qw( croak );
  2         4  
  2         99  
4 2     2   360 use Net::EmptyPort qw( wait_port );
  2         24564  
  2         695  
5              
6             our $VERSION = '0.001';
7              
8             sub import {
9 10     10   214091 my $package = shift;
10              
11 10         12 my @tests;
12 10         20 my %opts = ( timeout => 10 );
13              
14 10         25 while ( local $_ = shift ) {
15 18 100       46 if (/^-verbose$/) {
16 4 50       15 $opts{verbose} = 1 and next;
17             }
18              
19 14 100       28 if (/^-timeout$/) {
20 6         11 my $timeout = shift;
21 6 100       80 croak "Missing value for -timeout when loading $package"
22             unless defined $timeout;
23              
24 5         8 $opts{timeout} = $timeout;
25 5         11 next;
26             }
27              
28 8 100       21 if (/^-/) {
29 1         95 croak "Found unknown option when loading $package: $_";
30             }
31              
32 7         14 push @tests, $_;
33             }
34              
35 8 100       103 croak "Missing list of host/port pairs when loading $package"
36             unless @tests;
37              
38 7         10 my $limit = '';
39 7 100       16 if ( $opts{timeout} > 0 ) {
40 6         24 $limit = " up to $opts{timeout} second";
41 6 100       13 $limit .= 's' if $opts{timeout} != 1;
42             }
43              
44 7         9 for (@tests) {
45 7         23 my ( $host, $port ) = split /:/, $_, 2;
46              
47 7 100 66     99 croak "Cannot parse host and port from argument to $package: '$_'"
48             unless $host && $port;
49              
50 6 100       131 warn "Waiting$limit for $_\n" if $opts{verbose};
51              
52             wait_port {
53             host => $host,
54             port => $port,
55             max_wait => $opts{timeout},
56 6 100       44 proto => 'tcp',
57             } or croak "$package timed out while waiting for $_";
58             }
59             }
60              
61             delete @Net::Wait::{qw( wait_port croak )};
62              
63             1;
64              
65             __END__