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 )