AnyEvent-FTP
view release on metacpan or search on metacpan
t/anyevent_ftp_client.t view on Meta::CPAN
use 5.010;
use lib 't/lib';
use Test2::V0 -no_srand => 1;
use Test2::Tools::ClientTests;
use AnyEvent::FTP::Client;
use File::Temp qw( tempdir );
use File::chdir;
subtest 'syst' => sub {
reset_timeout;
my $client = eval { AnyEvent::FTP::Client->new };
diag $@ if $@;
isa_ok $client, 'AnyEvent::FTP::Client';
prep_client( $client );
our $config;
$client->connect($config->{host}, $config->{port})->recv;
$client->login($config->{user}, $config->{pass})->recv;
my $res = eval { $client->syst->recv };
diag $@ if $@;
isa_ok $res, 'AnyEvent::FTP::Response';
is eval { $res->code }, 215, 'code = 215';
diag $@ if $@;
$client->quit->recv;
};
subtest 'retr' => sub {
reset_timeout;
skip_all 'requires client and server on localhost' if $ENV{AEF_REMOTE};
our $config;
$config->{dir} = tempdir( CLEANUP => 1 );
my $fn = File::Spec->catfile($config->{dir}, 'foo.txt');
do {
open my $fh, '>', $fn;
say $fh "line 1";
say $fh "line 2";
close $fh;
};
foreach my $passive (0,1)
{
my $client = AnyEvent::FTP::Client->new( passive => $passive );
prep_client( $client );
$client->connect($config->{host}, $config->{port})->recv;
$client->login($config->{user}, $config->{pass})->recv;
$client->type('I')->recv;
$client->cwd($config->{dir})->recv;
do {
my $dest_fn = File::Spec->catdir(tempdir( CLEANUP => 1 ), 'foo.txt');
my $ret = eval { $client->retr('foo.txt', $dest_fn)->recv; };
diag $@ if $@;
isa_ok $ret, 'AnyEvent::FTP::Response';
my @data = split /\015?\012/, do {
open my $fh, '<', $dest_fn;
local $/;
<$fh>;
};
is $data[0], 'line 1';
is $data[1], 'line 2';
};
do {
my $data = '';
my $xfer = eval { $client->retr('foo.txt') };
isa_ok $xfer, 'AnyEvent::FTP::Client::Transfer';
$xfer->on_open(sub {
my $handle = shift;
$handle->on_read(sub {
$handle->push_read(sub {
$data .= $_[0]{rbuf};
$_[0]{rbuf} = '';
});
});
});
my $ret = eval { $xfer->recv };
isa_ok $ret, 'AnyEvent::FTP::Response';
my @data = split /\015?\012/, $data;
is $data[0], 'line 1';
is $data[1], 'line 2';
};
do {
my $data = '';
my $ret = eval { $client->retr('foo.txt', sub { $data .= shift })->recv; };
diag $@ if $@;
isa_ok $ret, 'AnyEvent::FTP::Response';
my @data = split /\015?\012/, $data;
is $data[0], 'line 1';
is $data[1], 'line 2';
};
t/anyevent_ftp_client.t view on Meta::CPAN
open my $fh, '<', "$remote/data.$passive";
binmode $fh;
local $/;
my $data = <$fh>;
close $fh;
$data;
};
is $actual, $expected, "files match";
$client->quit->recv;
}
};
subtest 'noop' => sub {
reset_timeout;
my $client = eval { AnyEvent::FTP::Client->new };
diag $@ if $@;
isa_ok $client, 'AnyEvent::FTP::Client';
prep_client( $client );
our $config;
$client->connect($config->{host}, $config->{port})->recv;
$client->login($config->{user}, $config->{pass})->recv;
my $res = eval { $client->noop->recv };
diag $@ if $@;
isa_ok $res, 'AnyEvent::FTP::Response';
is eval { $res->code }, 200, 'code = 200';
diag $@ if $@;
$client->quit->recv;
};
subtest 'appe' => sub {
reset_timeout;
skip_all 'requires client and server on localhost' if $ENV{AEF_REMOTE};
our $config;
$config->{dir} = tempdir( CLEANUP => 1 );
foreach my $passive (0,1)
{
my $client = AnyEvent::FTP::Client->new( passive => $passive );
prep_client( $client );
$client->connect($config->{host}, $config->{port})->recv;
$client->login($config->{user}, $config->{pass})->recv;
$client->type('I')->recv;
$client->cwd(translate_dir($config->{dir}))->recv;
my $fn = File::Spec->catfile($config->{dir}, 'foo.txt');
do {
open my $fh, '>', $fn;
say $fh "line1";
close $fh;
};
do {
my $data = 'line2';
my $ret = eval { $client->appe('foo.txt', \$data)->recv; };
diag $@ if $@;
isa_ok $ret, 'AnyEvent::FTP::Response';
ok -e $fn, 'remote file exists';
my @remote = split /\015?\012/, do {
open my $fh, '<', $fn;
local $/;
<$fh>;
};
is scalar(@remote), 2, 'two lines';
is $remote[0], 'line1', 'line 1 = line1';
is $remote[1], 'line2', 'line 2 = line2';
};
unlink $fn;
ok !-e $fn, 'remote file deleted';
$client->quit->recv;
}
};
done_testing;
( run in 2.081 seconds using v1.01-cache-2.11-cpan-ad19def0cd9 )