Maven-Agent

 view release on metacpan or  search on metacpan

t/Maven_Agent.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;

BEGIN { use_ok('Maven::Agent') }

use Digest::MD5;
use File::Basename;
use File::Spec;
use File::Temp;

my $test_dir          = dirname( File::Spec->rel2abs($0) );
my $maven_central_url = 'http://repo.maven.apache.org/maven2';

sub hash_file {
    my ($file) = @_;
    open( my $handle, '<', $file ) || croak("cant open $file: $!");
    binmode($handle);
    my $hash = Digest::MD5->new();
    $hash->addfile($handle);
    close($handle);
    return $hash->hexdigest();
}

# Verify local download with to
my $agent = Maven::Agent->new(
    M2_HOME     => File::Spec->catdir( $test_dir, 'M2_HOME' ),
    'user.home' => File::Spec->catdir( $test_dir, 'HOME' )
);
my $expected_file = File::Spec->catfile( $test_dir, 'HOME', '.m2', 'repository',
    'com', 'pastdev', 'foo', '1.0.1', 'foo-1.0.1.pom' );
my $to_file = File::Temp->new();
my $file = $agent->download( 'com.pastdev:foo:pom:1.0.1', to => $to_file );
is( $file, $to_file, 'file is to_file' );
is( do { local ( @ARGV, $/ ) = $to_file;       <> },
    do { local ( @ARGV, $/ ) = $expected_file; <> },
    'contents match'
);
my $to_dir = File::Temp->newdir();
$file = $agent->download( 'com.pastdev:foo:pom:1.0.1', to => $to_dir );
my $expected_download_file = File::Spec->catfile( $to_dir, 'foo.pom' );
is( $file, $expected_download_file, 'wrote expected file name to temp dir' );

SKIP: {
    eval { require LWP::UserAgent };

    skip "LWP::UserAgent not installed", 2 if $@;

    $agent = Maven::Agent->new(
        M2_HOME     => File::Spec->catdir( $test_dir, 'M2_HOME' ),
        'user.home' => File::Spec->catdir( $test_dir, 'HOME' )
    );

    if ( $agent->get_maven()->_default_agent( timeout => 1 )->head($maven_central_url)
        ->is_success() )
    {

        my $jta_jar = $agent->resolve('javax.transaction:jta:1.1');
        ok( $jta_jar, 'resolve jta jar' );

        my $jta_jar_file = $agent->download($jta_jar);
        ok( $jta_jar_file,    'got jta jar file' );
        ok( -s $jta_jar_file, 'jta jar file is not empty' );

        my $jta_jar_file_to = $agent->download( $jta_jar, to => File::Temp->new() );
        ok( $jta_jar_file_to,    'got jta jar to file to' );
        ok( -s $jta_jar_file_to, 'jta jar file to is not empty' );

        is( hash_file($jta_jar_file), hash_file($jta_jar_file_to), 'jta hashes match' );
    }
}

SKIP: {
    skip( 'not cygwin', 3 ) unless ( $^O eq 'cygwin' );

    # Verify local download with windows style localRepository in settings.xml
    my $winHome = File::Spec->catdir( $test_dir, 'WIN_HOME' );
    my $userHome = `cygpath -w $winHome`;
    $userHome =~ s/\n//g;
    my $agent = Maven::Agent->new(
        M2_HOME     => File::Spec->catdir( $test_dir, 'M2_HOME' ),
        'user.home' => $userHome
    );
    $expected_file = File::Spec->catfile(
        $test_dir, 'WIN_HOME', '.m2', 'repository',
        'com',     'pastdev',  'foo', '1.0.2',
        'foo-1.0.2.pom'
    );
    $to_file = File::Temp->new();
    my $file = $agent->download( 'com.pastdev:foo:pom:1.0.2', to => $to_file );
    is( $file, $to_file, 'cygwin file is to_file' );
    is( do { local ( @ARGV, $/ ) = $to_file;       <> },
        do { local ( @ARGV, $/ ) = $expected_file; <> },
        'cygwin contents match'
    );
    my $to_dir = File::Temp->newdir();
    $file = $agent->download( 'com.pastdev:foo:pom:1.0.2', to => $to_dir );
    my $expected_download_file = File::Spec->catfile( $to_dir, 'foo.pom' );
    is( $file, $expected_download_file, 'cygwin wrote expected file name to temp dir' );
}

done_testing();



( run in 1.748 second using v1.01-cache-2.11-cpan-8dfa8b56332 )