The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#use strictures 1;

use Test::More;
use Carp;
use Devel::Dwarn;

my $ssh = Net::SSH::Perl->new('localhost');
$ssh->login('user', 'localhost');

my $pipc = Net::SSH::Perl::ProxiedIPC->new(ssh => $ssh);

my ($cmd, $perlssh) = $pipc->open;

is( ref $perlssh, "IPC::PerlSSH", "\$perlssh isa IPC::PerlSSH (via $cmd)" );

$perlssh->eval( "use POSIX qw(uname)" );
my @remote_uname = $perlssh->eval( "uname()" );

is( $remote_uname[1], "localhost", 'localhost uname() returns localhost' );

my $homedir = $perlssh->eval( '$ENV{HOME}' );
fail( "we require a little sensibility in our \$ENV thank you." )
  unless defined $homedir;

$perlssh->eval( "use File::HomeDir" );
my $homedir2 = $perlssh->eval( 'File::HomeDir->my_home' );
is( $homedir2, "/home/user", 'got $ENV{HOME} the smart way' );

my $new_env = $perlssh->eval( 'chomp(my @env = `ssh-agent`); my %new_env; foreach (@env) { /^(.*?)=([^;]+)/ or next; $ENV{$1} =$new_env{$1}=$2; } my $output; $output .= "$_=$new_env{$_} " foreach ( keys %new_env ); $output;' );
Dwarn $new_env;
$pipc->{ssh_env_vars} = $new_env; 

my @test_hosts = ( 'user1@host1', 'user2@host2' );
my ($cmd2, $pssh2) = $pipc->open(@test_hosts);
is( ref $pssh2, "IPC::PerlSSH", "\$pssh2 isa IPC::PerlSSH (via $cmd2)" );

$pssh2->eval( "use POSIX qw(uname)" );
@remote_uname = $pssh2->eval( "uname()" );
is( $remote_uname[1], "localhost", 'uname() returns localhost three jumps into localhost!' );

done_testing;