diff options
Diffstat (limited to 't/inject.t')
-rw-r--r-- | t/inject.t | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/t/inject.t b/t/inject.t new file mode 100644 index 0000000..dfc03a2 --- /dev/null +++ b/t/inject.t @@ -0,0 +1,128 @@ +use Test::More tests => 11; + +use CPAN::Mini::Inject; +use File::Path; +use File::Copy; +use File::Basename; +use Compress::Zlib; + +rmtree( ['t/local/MYCPAN/modulelist'], 0, 1 ); +copy( + 't/local/CPAN/modules/02packages.details.txt.gz.original', + 't/local/CPAN/modules/02packages.details.txt.gz' +); +chmod oct(666), 't/local/CPAN/modules/02packages.details.txt.gz'; +chmod oct(666), "t/local/CPAN/authors/01mailrc.txt.gz" if -f "t/local/CPAN/authors/01mailrc.txt.gz"; +rmtree( ['t/local/CPAN/authors'], 0, 1 ); +mkdir( 't/local/CPAN/authors' ); +copy( + 't/local/01mailrc.txt.gz.original', + 't/local/CPAN/authors/01mailrc.txt.gz' +); +chmod oct(666), 't/local/CPAN/authors/01mailrc.txt.gz'; +mkdir( 't/local/MYCPAN' ); + +my $mcpi; +my $module = "S/SS/SSORICHE/CPAN-Mini-Inject-0.01.tar.gz"; + +$mcpi = CPAN::Mini::Inject->new; + +## add three modules (one that was already there, to make sure it isn't +## duplicated in the output) +$mcpi->loadcfg( 't/.mcpani/config' )->parsecfg->readlist->add( + module => 'CPAN::Mini::Inject', + authorid => 'SSORICHE', + version => '0.01', + file => 't/local/mymodules/CPAN-Mini-Inject-0.01.tar.gz' + )->add( + module => 'CPAN::Mini::Inject', + authorid => 'SSORICHE', + version => '0.02', + file => 't/local/mymodules/CPAN-Mini-Inject-0.01.tar.gz' + )->add( + module => 'CPAN::Mini', + authorid => 'RJBS', + version => '0.17', + file => 't/local/mymodules/CPAN-Mini-0.17.tar.gz', + )->writelist; + +ok( $mcpi->inject, 'Copy modules' ); +ok( -e "t/local/CPAN/authors/id/$module", 'Module file exists' ); +ok( -e 't/local/CPAN/authors/id/S/SS/SSORICHE/CHECKSUMS', + 'Checksum created' ); + +SKIP: { + skip "Not a UNIX system", 3 if ( $^O =~ /^MSWin/ ); + is( ( stat( "t/local/CPAN/authors/id/$module" ) )[2] & 07777, + 0664, 'Module file mode set' ); + is( + ( stat( dirname( "t/local/CPAN/authors/id/$module" ) ) )[2] & 07777, + 0775, + 'Author directory mode set' + ); + is( + ( stat( 't/local/CPAN/authors/id/S/SS/SSORICHE/CHECKSUMS' ) )[2] + & 07777, + 0664, + 'Checksum file mode set' + ); +} + +my @goodfile = <DATA>; +ok( my $gzread + = gzopen( 't/local/CPAN/modules/02packages.details.txt.gz', 'rb' ) ); + +my @packages; +my $package; +while ( $gzread->gzreadline( $package ) ) { + if ( $package =~ /^Written-By:/ ) { + push( @packages, "Written-By:\n" ); + next; + } + if ( $package =~ /^Last-Updated:/ ) { + push( @packages, "Last-Updated:\n" ); + next; + } + push( @packages, $package ); +} +$gzread->gzclose; + +is_deeply( \@goodfile, \@packages ); + +ok( my $gzauthread + = gzopen( 't/local/CPAN/authors/01mailrc.txt.gz', 'rb' ) ); + +my $author; +my $author_was_injected = 0; +while ( $gzauthread->gzreadline( $author ) ) { + if ( $author =~ /SSORICHE/ ) { + $author_was_injected++; + } +} +$gzauthread->gzclose; +ok( $author_was_injected, 'author injected into 01mailrc.txt.gz' ); +ok( $author_was_injected == 1, 'author injected exactly 1 time' ); + +unlink( 't/local/CPAN/authors/id/S/SS/SSORICHE/CHECKSUMS' ); +unlink( "t/local/CPAN/authors/id/$module" ); +unlink( 't/local/MYCPAN/modulelist' ); +unlink( 't/local/CPAN/modules/02packages.details.txt.gz' ); + +rmtree( [ 't/local/CPAN/authors', 't/local/MYCPAN' ], 0, 1 ); + +__DATA__ +File: 02packages.details.txt +URL: http://www.perl.com/CPAN/modules/02packages.details.txt +Description: Package names found in directory $CPAN/authors/id/ +Columns: package name, version, path +Intended-For: Automated fetch routines, namespace documentation. +Written-By: +Line-Count: 6 +Last-Updated: + +Acme::Code::Police 2.1828 O/OV/OVID/Acme-Code-Police-2.1828.tar.gz +BFD 0.31 R/RB/RBS/BFD-0.31.tar.gz +CPAN::Mini 0.17 R/RJ/RJBS/CPAN-Mini-0.17.tar.gz +CPAN::Mini::Inject 0.02 S/SS/SSORICHE/CPAN-Mini-Inject-0.01.tar.gz +CPAN::Nox 1.02 A/AN/ANDK/CPAN-1.76.tar.gz +CPANPLUS 0.049 A/AU/AUTRIJUS/CPANPLUS-0.049.tar.gz |