The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use Test;
BEGIN { $| = 1; plan(tests => 53); chdir 't' if -d 't'; }
require 'savelogs.pl';

use vars qw(
	    $tar
            @dirs
	    $log1
            %contents
	   );

$tar    = `which gtar 2>/dev/null | grep -v 'no '`; chomp $tar;
unless( $tar ) {
    $tar = `which tar 2>/dev/null | grep -v 'no '`; chomp $tar;
}

unless( $tar ) {
    die "No tar or gtar found.\n";
}

## test many log files in a common directory in a single archive
for my $i ( 1..5 ) {
    $log1 = make_log( 1024, "test_log.$i" );
    system( "$savelogs --home=. --process=archive --archive='test_log.tar' $log1" );
    unlink( $log1 );
}
ok( -f 'test_log.tar' );
ok( -s _ > 5120 );

## check the contents
%contents = map { chomp; $_ => 8 } `$tar -tf test_log.tar`;
ok( scalar(keys %contents), 5 );
for my $i ( 1..5 ) {
    ok( $contents{"test_log.$i"}, 8 );
}
ok( unlink( 'test_log.tar' ) );


## test many logs in disjoint directory hierarchies with unique names
@dirs = qw( foo bar baz );
system( 'mkdir', '-p', @dirs );
for my $dir ( @dirs ) {
    for my $i ( 1..5 ) {
	$log1 = make_log( 1024, "$dir/test_log.$dir.$i" );
	system( "$savelogs --home=. --process=archive --archive='./test_log.tar' $log1" );
	unlink( $log1 );
    }
    ok( system( 'rm', '-r', $dir ), 0 );
}
ok( -f 'test_log.tar' );
ok( -s _ > 15360 );

## check the contents
%contents = map { chomp; $_ => 4 } `$tar -tf test_log.tar`;
ok( scalar(keys %contents), (scalar(@dirs)*5) );
for my $dir ( @dirs ) {
    for my $i ( 1..5 ) {
	ok( $contents{"test_log.$dir.$i"}, 4 );
    }
}
ok( unlink( 'test_log.tar' ) );


## test many logs in disjoint directory hierarchies with common names
@dirs = qw( foo bar baz );
system( 'mkdir', '-p', @dirs );
for my $dir ( @dirs ) {
    for my $i ( 1..5 ) {
	$log1 = make_log( 1024, "$dir/test_log.$i" );
	system( "$savelogs --home=. --process=archive --archive='./test_log.tar' --full-path $log1" );
	unlink( $log1 );
    }
    ok( system( 'rm', '-r', $dir ), 0 );
}
ok( -f 'test_log.tar' );
ok( -s _ > 15360 );

## check the contents
%contents = map { chomp; $_ => 2 } `$tar -tf test_log.tar`;
ok( scalar(keys %contents), (scalar(@dirs)*5) );
for my $dir ( @dirs ) {
    for my $i ( 1..5 ) {
	ok( $contents{"$dir/test_log.$i"}, 2 );
    }
}
ok( unlink( 'test_log.tar' ) );


exit;