Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

#!/usr/bin/env perl
use v5.12.5;
our $VERSION = '9999.99.99_99'; # VERSION
my %have_mods = (
'Net::SSH2' => 1,
'Net::OpenSSH' => 1,
);
for my $m ( keys %have_mods ) {
my $have_mod = 1;
eval "use $m;";
if ($@) {
$have_mods{$m} = 0;
}
}
unless ( $have_mods{'Net::SSH2'} or $have_mods{'Net::OpenSSH'} ) {
plan skip_all =>
'SSH module not found. You need Net::SSH2 or Net::OpenSSH to connect to servers via SSH.';
}
else {
plan tests => 37;
}
{
no warnings 'once';
$::QUIET = 1;
}
my $t1 = Rex::Task->new( name => "foo" );
isa_ok( $t1, "Rex::Task", "create teask object" );
is( $t1->get_connection_type, "Local", "get connection type for local" );
is( $t1->is_local, 1, "is task local" );
is( $t1->is_remote, 0, "is task not remote" );
$t1->set_server("192.168.1.1");
is( $t1->server->[0], "192.168.1.1", "get/set server" );
is( $t1->is_local, 0, "is task not local" );
$t1->set_desc("Description");
is( $t1->desc, "Description", "get/set description" );
is(
$t1->get_connection_type,
( $have_mods{"Net::OpenSSH"} && $^O !~ m/^MSWin/ ? "OpenSSH" : "SSH" ),
"get connection type for ssh"
);
is( $t1->want_connect, 1, "want a connection?" );
$t1->modify( "no_ssh", 1 );
is( $t1->want_connect, 0, "want no connection?" );
is( $t1->get_connection_type, "Fake", "get connection type for fake" );
$t1->modify( "no_ssh", 0 );
is( $t1->want_connect, 1, "want a connection?" );
is(
$t1->get_connection_type,
( $have_mods{"Net::OpenSSH"} && $^O !~ m/^MSWin/ ? "OpenSSH" : "SSH" ),
"get connection type for ssh"
);
Rex::Config->set( "connection" => "SSH" );
is( $t1->get_connection_type, "SSH", "get connection type for ssh" );
Rex::Config->set( "connection" => "OpenSSH" );
is( $t1->get_connection_type, "OpenSSH", "get connection type for ssh" );
$t1->set_user("root");
is( $t1->user, "root", "get/set the user" );
$t1->set_password("f00b4r");
is( $t1->password, "f00b4r", "get/set the password" );
is( $t1->name, "foo", "get task name" );
$t1->set_auth( "user", "foo" );
is( $t1->user, "foo", "set auth user" );
$t1->set_auth( "password", "baz" );
is( $t1->password, "baz", "set auth password" );
my $test_var = 0;
$t1->set_code(
sub {
$test_var = connection()->server;
}
);
Rex::Config->set( "connection" => $have_mods{"Net::OpenSSH"}
&& $^O !~ m/^MSWin/ ? "OpenSSH" : "SSH" );
ok( !$t1->connection->is_connected, "connection currently not established" );
$t1->modify( "no_ssh", 1 );
$t1->connect("localtest");
ok( $t1->connection->is_connected, "connection established" );
$t1->run("localtest");
is( $test_var, "localtest", "task run" );
$t1->disconnect();
my $before_hook = 0;
$t1->delete_server;
is( $t1->is_remote, 0, "task is no more remote" );
is( $t1->is_local, 1, "task is now local" );
$t1->modify(
before => sub {
my $server = shift;
my $server_ref = shift;
$before_hook = 1;
$$server_ref = "local02";
}
);
my $server = $t1->current_server;
$t1->run_hook( \$server, "before" );
is( $before_hook, 1, "run before hook" );
is( $t1->is_remote, 1, "task is now remote" );
is( $t1->is_local, 0, "task is no more local" );
$t1->modify(
before => sub {
my $server = shift;
my $server_ref = shift;
$before_hook = 2;
$$server_ref = "<local>";
}
);
$server = $t1->current_server;
$t1->run_hook( \$server, "before" );
is( $before_hook, 2, "run before hook - right direction" );
is( $t1->is_remote, 0, "task is no not remote" );
is( $t1->is_local, 1, "task is now local" );
task(
"ret_test1",
sub {
return "string";
}
);
task(
"ret_test2",
sub {
return ( "e1", "e2" );
}
);
task(
"param_test1",
sub {
my $param = shift;
is_deeply(
$param,
{ name => "foo" },
"First parameter to task is a hashRef"
);
}
);
task(
"param_test2",
sub {
is_deeply( \@_, [ "city", "bar" ], "Parameters are a list (length 2)." );
}
);
task(
"param_test3",
sub {
is_deeply(
\@_,
[ "blah", "blub", "bumm" ],
"Parameters are a list (length 3)."
);
}
);
my $s = ret_test1();
is( $s, "string", "task successfully returned a string" );
my @l = ret_test2();
is_deeply( \@l, [ "e1", "e2" ], "task successfully returned a list" );
param_test1( { name => "foo" } );
param_test2( city => "bar" );
param_test3( "blah", "blub", "bumm" );