Alien-Build
view release on metacpan or search on metacpan
t/lib/MyTest/FTP.pm view on Meta::CPAN
package MyTest::FTP;
use strict;
use warnings;
use Path::Tiny qw( path );
use JSON::PP qw( decode_json );
use Exporter qw( import );
our @EXPORT = qw( ftp_url ftp_error );
my $ftp_error;
sub ftp_error
{
my($new) = @_;
if($new)
{
$ftp_error = $new;
return undef;
}
else
{
return $ftp_error;
}
}
sub ftp_url
{
my $file = path('t/bin/ftpd.json');
return ftp_error('no ftpd.json') unless -r $file;
my $config = eval { decode_json($file->slurp) };
return ftp_error("error loading ftpd.json $@") if $@;
my $url = $config->{url};
return ftp_error("no url in ftpd.json") unless $url;
require Net::FTP;
require URI;
$url = URI->new($url);
my $ftp = Net::FTP->new($url->host, Port => $url->port) or do {
return ftp_error("Connot connect to @{[ $url->host ]}");
};
eval {
$ftp->login($url->user, $url->password) or die;
$ftp->binary;
$ftp->cwd($url->path) or die;
my $path = Path::Tiny->tempfile;
$ftp->get('foo-1.00.tar.xz', $path->stringify) or die;
-e $path || die;
$ftp->quit;
};
return ftp_error($ftp->message) if $@;
$url->path($url->path . '/')
unless $url->path =~ m!/$!;
return $url;
}
1;
( run in 1.585 second using v1.01-cache-2.11-cpan-63c85eba8c4 )