AnyEvent-FTP

 view release on metacpan or  search on metacpan

t/anyevent_ftp_client.t  view on Meta::CPAN


        is $called_open, 1, 'open emit';
        is $called_close, 1, 'close emit';
      };

      unlink $fn;
      ok !-e $fn, 'remote file deleted';

      do {
        my $data = 'some data';
        my $xfer = eval { $client->stor('foo.txt', \$data) };
        diag $@ if $@;
        isa_ok $xfer, 'AnyEvent::FTP::Client::Transfer';
        my $ret = eval { $xfer->recv; };
        diag $@ if $@;
        isa_ok $ret, 'AnyEvent::FTP::Response';
        ok -e $fn, 'remote file created';
        my $remote = do {
          open my $fh, '<', $fn;
          local $/;
          <$fh>;
        };
        is $remote, $data, 'remote matches';
        is $xfer->remote_name, 'foo.txt', 'remote_name = foo.txt';
      };

      unlink $fn;
      ok !-e $fn, 'remote file deleted';

      do {
        my $data = 'some data';
        my $cb = do {
          my $buffer = $data;
          sub {
            my $tmp = $buffer;
            undef $buffer;
            $tmp;
          };
        };
        my $ret = eval { $client->stor('foo.txt', $cb)->recv; };
        diag $@ if $@;
        isa_ok $ret, 'AnyEvent::FTP::Response';
        ok -e $fn, 'remote file created';
        my $remote = do {
          open my $fh, '<', $fn;
          local $/;
          <$fh>;
        };
        is $remote, $data, 'remote matches';
      };

      unlink $fn;
      ok !-e $fn, 'remote file deleted';

      do {
        my $data = 'some data';
        my $glob = do {
          my $dir = tempdir( CLEANUP => 1);
          my $fn = File::Spec->catfile($dir, 'flub.txt');
          open my $out, '>', $fn;
          binmode $out;
          print $out $data;
          close $out;
          open my $in, '<', $fn;
          binmode $in;
          $in;
        };
        my $ret = eval { $client->stor('foo.txt', $glob)->recv; };
        diag $@ if $@;
        isa_ok $ret, 'AnyEvent::FTP::Response';
        ok -e $fn, 'remote file created';
        my $remote = do {
          open my $fh, '<', $fn;
          local $/;
          <$fh>;
        };
        is $remote, $data, 'remote matches';
      };

      unlink $fn;
      ok !-e $fn, 'remote file deleted';

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

};

subtest 'login' => 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;

  my $res = eval { $client->login($config->{user}, $config->{pass})->recv };
  diag $@ if $@;
  isa_ok $res, 'AnyEvent::FTP::Response';

  is $res->code, 230, 'code = 230';

  is eval { $client->quit->recv->code }, 221, 'code = 221';
  diag $@ if $@;

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

  eval { $client->login('bogus', 'bogus')->recv };
  my $error = $@;
  isa_ok $error, 'AnyEvent::FTP::Response';
  is $error->code, 530, 'code = 530';

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

subtest 'uri' => sub {
  reset_timeout;
  skip_all 'requires client and server on localhost' if $ENV{AEF_REMOTE};
  skip_all 'requires URI' unless eval q{ require URI };

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

t/anyevent_ftp_client.t  view on Meta::CPAN

  diag $@ if $@;

  $done->recv;
  $done = AnyEvent->condvar;

  SKIP: {
    our $detect;
    skip 'bftp quit broken', 5 if $detect->{xb};
    is eval { $client->connect($config->{host}, $config->{port})->recv->code }, 220, 'code = 220';
    diag $@ if $@;

    is eval { $client->push_command([USER => 'bogus'])->recv->code }, 331, 'code = 331';
    diag $@ if $@;
    eval { $client->push_command([PASS => 'bogus'])->recv };
    is $@->code, 530, 'code = 530';
    is eval { $client->push_command(['QUIT'])                 ->recv->code }, 221, 'code = 221 (2)';
    diag $@ if $@;

    is $help_cv->recv->code, 214, 'code = 214';
    $done->recv;
    $done = AnyEvent->condvar;
  }

  my $cv1 = $client->push_command([USER => $config->{user}]);
  my $cv2 = $client->push_command([PASS => $config->{pass}]);
  my $cv3 = $client->push_command(['QUIT']);

  is eval { $client->connect($config->{host}, $config->{port})->recv->code }, 220, 'code = 220';
  diag $@ if $@;

  is $cv1->recv->code, 331, 'code = 331';
  is $cv2->recv->code, 230, 'code = 230';
  is $cv3->recv->code, 221, 'code = 221';

  $done->recv;
};

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

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

  my $local = 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($config->{dir})->recv;

    do {
      open my $fh, '>', "$local/data.$passive";
      binmode $fh;
      print $fh "data$_\n" for 1..200;
      close $fh;
    };

    $client->stor("data.$passive", "$local/data.$passive")->recv;

    my $size = -s "$local/data.$passive";
    is $size && -s "$remote/data.$passive", $size, "size of remote file is $size";
    $size = $client->size("data.$passive")->recv;
    is $size, -s "$local/data.$passive", "size returned from remote file is correct";

    my $expected = do {
      open my $fh, '>>', "$local/data.$passive";
      binmode $fh;
      print $fh "xorxor$_\n" for 1..300;
      close $fh;

      open $fh, '<', "$local/data.$passive";
      binmode $fh;
      local $/;
      my $data = <$fh>;
      close $fh;
      $data;
    };

    do {
      open my $fh, '<', "$local/data.$passive";
      binmode $fh;
      seek $fh, $client->size("data.$passive")->recv, 0;
      $client->appe("data.$passive", $fh)->recv;
      close $fh;
    };

    $size = -s "$local/data.$passive";
    is $size && -s "$remote/data.$passive", $size, "size of remote file is $size";
    $size = $client->size("data.$passive")->recv;
    is $size, -s "$local/data.$passive", "size returned from remote file is correct";

    my $actual = do {
      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;



( run in 1.116 second using v1.01-cache-2.11-cpan-39bf76dae61 )