AnyEvent-FTP

 view release on metacpan or  search on metacpan

t/anyevent_ftp_client.t  view on Meta::CPAN

    $plan->();

    do {
      my $data = 'some data';
      my $xfer = eval { $client->stou(undef, \$data) };
      diag $@ if $@;
      isa_ok $xfer, 'AnyEvent::FTP::Client::Transfer';
      my $ret = eval { $xfer->recv; };
      diag $@ if $@;
      isa_ok $ret, 'AnyEvent::FTP::Response';

      my @list = do {
        opendir my $dh, $config->{dir};
        grep !/^\./, readdir $dh;
      };

      is scalar(@list), 1, 'exactly one file';
      my $fn = File::Spec->catfile($config->{dir}, $list[0]);
      is $xfer->remote_name, $list[0], "remote_name = $list[0]";

      my $remote = do {
        open my $fh, '<', $fn;
        local $/;
        <$fh>;
      };

      is $remote, $data, 'local/remote match';

      unlink $fn;

      ok !-e $fn, 'remote deleted';
    };

    $client->quit->recv;
  }
};

subtest 'stat' => sub {
  reset_timeout;
  my $client = AnyEvent::FTP::Client->new;

  prep_client( $client );
  our $config;
  our $detect;

  $client->connect($config->{host}, $config->{port})->recv;
  $client->login($config->{user}, $config->{pass})->recv;

  skip_all 'ncftp return code broken' if $detect->{nc};

  do {
    my $res = eval { $client->stat->recv };
    diag $@ if $@;
    isa_ok $res, 'AnyEvent::FTP::Response';
    my $code = eval { $res->code };
    diag $@ if $@;
    like $code, qr{^21[123]$}, 'code = ' . $code;
  };

  do {
    my $res = eval { $client->stat('/')->recv };
    diag $@ if $@;
    isa_ok $res, 'AnyEvent::FTP::Response';
    my $code = eval { $res->code };
    diag $@ if $@;
    like $code, qr{^21[123]$}, 'code = ' . $code;
  };

  SKIP: {
    skip 'wu-ftpd does not return [45]50 on bogus file', 2 if $detect->{wu};
    skip 'pure-FTPd does not return [45]50 on bogus file', 2 if $detect->{pu};
    skip 'vsftp does not return [45]50 on bogus file', 2 if $detect->{vs};
    skip 'IIS does not return [45]50 on bogus file', 2 if $detect->{ms};
    skip 'bftp does not return [45]50 on bogus file', 2 if $detect->{xb};
    eval { $client->stat('bogus')->recv };
    my $res = $@;
    isa_ok $res, 'AnyEvent::FTP::Response';
    my $code = eval { $res->code };
    diag $@ if $@;
    like $code, qr{^[45]50$}, 'code = ' . $code;
  };

  $client->quit->recv;

};

subtest 'rename' => sub {
  reset_timeout;
  skip_all 'requires client and server on localhost' if $ENV{AEF_REMOTE};

  our $config;
  $config->{dir} = tempdir( CLEANUP => 1 );

  my $client = AnyEvent::FTP::Client->new;

  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 $from = File::Spec->catfile($config->{dir}, 'foo.txt');
    do { open my $fh, '>', $from; close $fh; };
    my $to   = File::Spec->catfile($config->{dir}, 'bar.txt');

    ok  -e $from, "EX: $from";
    ok !-e $to,   "NO: $to";

    my $res1 = eval { $client->rnfr($from)->recv };
    diag $@ if $@;
    isa_ok $res1, 'AnyEvent::FTP::Response';

    my $res2 = eval { $client->rnto($to)->recv };
    diag $@ if $@;
    isa_ok $res2, 'AnyEvent::FTP::Response';

    ok !-e $from, "NO: $from";
    ok  -e $to,   "EX: $to";
  };

  do {
    my $from = File::Spec->catfile($config->{dir}, 'pepper.txt');
    do { open my $fh, '>', $from; close $fh; };
    my $to   = File::Spec->catfile($config->{dir}, 'coke.txt');

    ok  -e $from, "EX: $from";
    ok !-e $to,   "NO: $to";

    my $res = eval { $client->rename($from, $to)->recv };
    diag $@ if $@;
    isa_ok $res, 'AnyEvent::FTP::Response';

    ok !-e $from, "NO: $from";



( run in 2.906 seconds using v1.01-cache-2.11-cpan-99c4e6809bf )