holyfuckingshit it works
[p5sagit/IPC-PerlSSH-MultiHop.git] / t / scratch.t
1 #!/usr/bin/perl
2 use strictures 1;
3
4 use Test::More;
5
6 {
7   package Net::SSH::Perl::ProxiedIPC;
8   use strict; use warnings;
9   use Net::SSH::Perl::WithSocks;
10   use IPC::PerlSSH;
11
12   sub new {
13     my $proto = shift;
14     my $class = ref $proto || $proto;
15     bless( { @_ }, $class );
16   }
17
18   sub _ssh {
19     $_[0]->{ssh} ||= $_[0]->_build_ssh
20   }
21
22   sub _build_ssh {
23     Net::SSH::Perl::WithSocks->new();
24   }
25
26   sub _open_perlssh {
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);
31
32     my $readfunc = sub { sysread( $read, $_[0], $_[1] ) };
33     my $writefunc = sub { syswrite( $write, $_[0] ) };
34     
35     IPC::PerlSSH->new( Readfunc => $readfunc, Writefunc => $writefunc );
36   }
37
38
39 }
40
41 my $ssh = Net::SSH::Perl->new('localhost');
42 $ssh->login('test', 'test');
43
44 my $pipc = Net::SSH::Perl::ProxiedIPC->new(ssh => $ssh);
45
46 my $perlssh = $pipc->_open_perlssh;
47
48 is( ref $perlssh, "IPC::PerlSSH", '$perlssh isa IPC::PerlSSH' );
49
50 $perlssh->eval( "use POSIX qw(uname)" );
51 my @remote_uname = $perlssh->eval( "uname()" );
52
53 ## This is a really shitty idea for a test but fuck you.
54 is( $remote_uname[1], "minerva", 'localhost uname() returns minerva' );
55 done_testing;