summaryrefslogtreecommitdiff
path: root/t/inject.t
diff options
context:
space:
mode:
Diffstat (limited to 't/inject.t')
-rw-r--r--t/inject.t128
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