Net-SSH2
view release on metacpan or search on metacpan
t/Net-SSH2.t view on Meta::CPAN
}
is($banner, "SSH-2.0-libssh2_$version", "banner is $banner");
# (2) timeout
is($ssh2->poll(0), 0, 'poll indefinite');
is($ssh2->poll(2000), 0, 'poll 2 second');
is($ssh2->sock, undef, '->sock is undef before connect');
is($ssh2->hostname, undef, '->hostname is undef before connect');
# (1) connect
unless (defined $host) {
if (-t STDIN and -t STDOUT) {
chomp(my $prompt = <<EOP);
To test the connection capabilities of Net::SSH2, we need a test site running
a secure shell server daemon. Enter 'localhost' or '127.0.0.1' to use this
host over IPv4. Enter '::1' to use this host over IPv6.
Hostname or IP address [ENTER to skip]:
EOP
$host = $ssh2->_ask_user($prompt, 1);
}
unless (defined $host and length $host) {
done_testing;
exit(0);
}
}
($host, $port) = split /:/, $host
if (($host =~ tr/://) == 1);
if (defined $port) {
ok($ssh2->connect($host, $port), "connect to $host port $port");
}
else {
ok($ssh2->connect($host), "connect to $host");
}
isa_ok($ssh2->sock, 'IO::Socket', '->sock isa IO::Socket');
is($ssh2->hostname, $host, '->hostname');
# (8) server methods
for my $type (qw(kex hostkey crypt_cs crypt_sc mac_cs mac_sc comp_cs comp_sc)) {
my $method = $ssh2->method($type);
ok($ssh2->method($type), "$type method: $method");
}
# (2) check host key
my $md5 = $ssh2->hostkey_hash('md5');
is(length $md5, 16, 'have MD5 hostkey hash');
my $sha1 = $ssh2->hostkey_hash('sha1');
is(length $sha1, 20, 'have SHA1 hostkey hash');
ok($ssh2->check_hostkey('advisory', $known_hosts), "check remote key - advisory")
or diag(join " ", "Error:", $ssh2->error);
ok($ssh2->check_hostkey($policy, $known_hosts), "check remote key - ask")
or diag(join " ", "Error:", $ssh2->error);
# (3) authentication methods
unless ($user) {
my $def_user = eval { getpwuid $< };
$user = $ssh2->_ask_user("Enter username" . ($def_user ? " [$def_user]: " : ": "), 1);
$user = $def_user unless defined $user and length $user;
}
my $auth = $ssh2->auth_list($user);
ok($auth, "authenticate: $auth");
my @auth_methods = split /,/, $auth;
is_deeply(\@auth_methods, [$ssh2->auth_list($user)], 'list matches comma-separated');
ok(!$ssh2->auth_ok, 'not authenticated yet');
# (2) authenticate
my $type;
my $home = $ssh2->_local_home;
if (defined $home) {
for my $key (qw(dsa rsa)) {
my $path = "$home/.ssh/id_$key";
if ($ssh2->auth_publickey($user, "$path.pub", $path,
$passphrase)) {
diag "authenticated with key at $path";
$type = 'pubkey';
last;
}
else {
diag "failed to authenticate with key at $path";
}
}
}
unless ($type) {
diag "reverting to password authentication";
$type = $ssh2->auth(username => $user,
password => $password,
interact => 1);
}
ok($ssh2->auth_ok, 'authenticated successfully');
ok($type, "authentication type is defined (".($type||undef).")");
# (5) channels
ok(!defined eval { $ssh2->channel("direct-tcpip") }, "only session channels");
my $chan = $ssh2->channel();
isa_ok($chan, 'Net::SSH2::Channel');
$chan->blocking(0); pass('set blocking');
ok(!$chan->eof(), 'not at EOF');
ok($chan->ext_data('normal'), 'normal extended data handling');
ok($chan->ext_data('merge'), 'merge extended data');
# (3) environment
is($chan->setenv(), 1, 'empty setenv');
my %env = (test1 => 'A', test2 => 'something', test3 => 'E L S E', LANG => 'C');
# most sshds disallow set, so we're happy if these don't crash
ok($chan->setenv(%env) || 1, 'set environment variables, it is ok if it fails');
is($chan->session, $ssh2, 'verify session');
# (1) callback
ok($ssh2->callback(disconnect => sub { warn "SSH_MSG_DISCONNECT!\n"; }),
'set disconnect callback');
# (2) SFTP
$ssh2->blocking(1); # creating channel may block
( run in 0.844 second using v1.01-cache-2.11-cpan-39bf76dae61 )