File Coverage

blib/lib/Net/SSH/Any/Test/Isolated.pm
Criterion Covered Total %
statement 93 122 76.2
branch 11 24 45.8
condition 6 14 42.8
subroutine 21 29 72.4
pod 0 3 0.0
total 131 192 68.2


line stmt bran cond sub pod time code
1             package Net::SSH::Any::Test::Isolated;
2              
3 1     1   49914 use strict;
  1         1  
  1         23  
4 1     1   3 use warnings;
  1         1  
  1         21  
5 1     1   3 use feature qw(say);
  1         4  
  1         69  
6 1     1   3 use Carp;
  1         1  
  1         41  
7 1     1   2 use Scalar::Util ();
  1         1  
  1         13  
8 1     1   513 use Data::Dumper;
  1         6125  
  1         46  
9 1     1   386 use IPC::Open2 qw(open2);
  1         3345  
  1         60  
10              
11             our $debug;
12              
13 1     1   383 use parent qw(Net::SSH::Any::Test::Isolated::_Base);
  1         209  
  1         4  
14 1     1   422 use Net::SSH::Any::URI;
  1         3  
  1         876  
15              
16              
17             sub _default_logger {
18 0     0   0 my ($fh, $text) = @_;
19 0         0 print {$fh} $text;
  0         0  
20             }
21              
22             sub _diag_logger {
23 29     29   161 require Test::More;
24 29         95 Test::More::diag($_[1]);
25             }
26              
27             sub new {
28 3     3 0 5231 my ($class, %opts) = @_;
29 3         21 my $self = $class->SUPER::_new('client');
30              
31 3   50     22 my $logger_fh = delete $opts{logger_fh} // \*STDERR;
32 3         52 open my $logger_fh_dup, '>>&', $logger_fh;
33 3         15 $self->{logger_fh} = $logger_fh_dup;
34 3   50     11 my $logger = delete $opts{logger} // \&_default_logger;
35 3 50       9 unless (ref $logger) {
36 3 50       10 if ($logger eq 'diag') {
37 3         8 $logger = \&_diag_logger;
38             }
39             else {
40 0         0 croak "Bad logger argument '$logger'";
41             }
42             }
43 3         6 $self->{logger} = $logger;
44 3   33     19 $self->{perl} = $opts{local_perl_cmd} // $^X // 'perl';
      50        
45 3         10 $self->_bootstrap;
46 3         18 $self->_start(%opts);
47              
48 3         21 $self;
49             }
50              
51             sub _log {
52 29     29   37 my $self = shift;
53 29         95 $self->{logger}->($self->{logger_fh}, @_);
54             }
55              
56             sub _bootstrap {
57 3     3   6 my $self = shift;
58 3         19 $self->_check_state('new');
59 3 50       11 my $perl = $self->{perl} or return;
60 3         20 $self->{pid} = open2($self->{in}, $self->{out}, $^X);
61              
62 3         7222 my $old = select($self->{out});
63 3         8 $| = 1;
64 3         9 select $old;
65              
66 3   33     112 my $inc = Data::Dumper::Dumper([grep defined && !ref, @INC]);
67 3 50       359 my $debug_as_str = ($debug ? -1 : 'undef');
68              
69 3         13 my $code = <
70              
71             use lib \@{$inc};
72              
73             use strict;
74             use warnings;
75              
76             \$Net::SSH::Any::Test::Isolated::debug = $debug_as_str;
77              
78             use Net::SSH::Any::Test::Isolated::_Slave;
79             Net::SSH::Any::Test::Isolated::_Slave->run;
80              
81             __END__