7 package Net::SSH::Perl::ProxiedIPC;
8 use strict; use warnings;
9 use Net::SSH::Perl::WithSocks;
14 my $class = ref $proto || $proto;
15 bless( { @_ }, $class );
19 $_[0]->{ssh} ||= $_[0]->_build_ssh
23 Net::SSH::Perl::WithSocks->new();
27 my( $self, @hosts ) = @_;
28 my $ssh = $self->_ssh;
29 my $command = join ' ', (map "ssh -A $_", @hosts), "perl";
30 my( $read, $write ) = $ssh->open2($command);
32 my $readfunc = sub { sysread( $read, $_[0], $_[1] ) };
33 my $writefunc = sub { syswrite( $write, $_[0] ) };
35 IPC::PerlSSH->new( Readfunc => $readfunc, Writefunc => $writefunc );
41 my $ssh = Net::SSH::Perl->new('localhost');
42 $ssh->login('test', 'test');
44 my $pipc = Net::SSH::Perl::ProxiedIPC->new(ssh => $ssh);
46 my $perlssh = $pipc->_open_perlssh;
48 is( ref $perlssh, "IPC::PerlSSH", '$perlssh isa IPC::PerlSSH' );
50 $perlssh->eval( "use POSIX qw(uname)" );
51 my @remote_uname = $perlssh->eval( "uname()" );
53 ## This is a really shitty idea for a test but fuck you.
54 is( $remote_uname[1], "minerva", 'localhost uname() returns minerva' );
56 my $homedir = $perlssh->eval( '$ENV{HOME}' );
57 fail( "we require a little sensibility in our \$ENV thank you." )
58 unless defined $homedir;
60 $perlssh->eval( "use File::HomeDir" );
61 my $homedir2 = $perlssh->eval( 'File::HomeDir->my_home' );
62 is( $homedir2, "/home/test", 'got $ENV{HOME} the smart way' );