#!/usr/bin/perl -w
my
$loop
= IO::Async::Loop->new();
testing_loop(
$loop
);
my
$ips
= IPC::PerlSSH::Async->new(
Command
=>
"$^X"
,
on_exception
=>
sub
{
die
"Perl died early - $_[0]"
},
);
ok(
defined
$ips
,
"Constructor"
);
is_oneref(
$ips
,
'$ips has 1 refcount'
);
$loop
->add(
$ips
);
my
$result
;
$ips
->
eval
(
code
=>
'( 10 + 30 ) / 2'
,
on_result
=>
sub
{
$result
=
shift
},
);
wait_for {
defined
$result
};
is(
$result
, 20,
"Scalar eval return"
);
my
@letters
;
$ips
->
eval
(
code
=>
'split( m//, "Hello, world!" )'
,
on_result
=>
sub
{
@letters
=
@_
},
);
wait_for {
@letters
};
is_deeply( \
@letters
, [
qw( H e l l o )
,
","
,
" "
,
qw( w o r l d ! )
],
"List eval return"
);
$ips
->
eval
(
code
=>
'join( ":", @_ )'
,
args
=> [
qw( some values here )
],
on_result
=>
sub
{
$result
=
shift
},
);
undef
$result
;
wait_for {
defined
$result
};
is(
$result
,
"some:values:here"
,
"Scalar eval argument passing"
);
my
$stored
= 0;
$ips
->store(
name
=>
'add'
,
code
=> '
my
$t
= 0;
while
(
defined
(
$_
=
shift
) ) {
$t
+=
$_
;
}
$t
',
on_stored
=>
sub
{
$stored
= 1 },
);
wait_for {
$stored
};
my
$total
;
$ips
->call(
name
=>
'add'
,
args
=> [ 10, 20, 30, 40, 50 ],
on_result
=>
sub
{
$total
=
shift
},
);
wait_for {
defined
$total
};
is(
$total
, 150,
"Stored procedure storing/invokation"
);
$loop
->remove(
$ips
);
is_oneref(
$ips
,
'$ips has 1 refcount at EOF'
);