package tests::functional::ReportsWithoutWarningsTest;

use strict;

use base qw/Lire::Test::FunctionalTestCase/;
use Lire::Config::Build qw/ac_info/;
use File::Basename qw/dirname/;
use Cwd 'realpath';
use Carp;

sub suite {
    my $suite =
      Test::Unit::TestSuite->empty_new( 'ReportsWithoutWarnings Test Suite' );

    my $logsdir = $ENV{'LR_TEST_LOGS_DIR'};
    my $reportsdir = $ENV{'LR_TEST_REPORTS_DIR'};

    croak "non-existent 'LR_TEST_LOGS_DIR': $logsdir"
      if defined $logsdir && ! -d $logsdir;

    croak "non-existent 'LR_TEST_REPORTS_DIR': $reportsdir"
      if defined $reportsdir && ! ( -d $reportsdir && -w $reportsdir );

    return $suite
      unless defined $logsdir;

    opendir DIR, $logsdir
      or die "opendir( '$logsdir' ) failed: $!\n";
    while ( my $file = readdir DIR ) {
        next unless $file =~ /^(\w+)(-.*?)?\.log(\.gz|\.bz2)?$/;

        $suite->add_test( new tests::functional::ReportsWithoutWarningsTest( $1, $logsdir, $file, $reportsdir ) );

    }
    closedir DIR;

    return $suite;
}


sub new {
    my $self = shift->SUPER::new(@_);

    my ( $service, $logsdir, $logfile, $reportsdir ) = @_;

    $self->{'service'} = $service;
    $self->{'logfile'} = $logsdir . "/" . $logfile;
    if ( $reportsdir ) {
        $logfile =~ /(.*?)\.log(\.gz|\.bz2)?$/;
        $self->{'reportfile'} = $reportsdir . "/" . $1 . ".txt";
    } else {
        $self->{'reportfile'} = '/dev/null';
    }
    return $self;
}

sub run_test {
    my $self = $_[0];

    my $result = $self->lire_run( "lr_log2report $self->{'service'} < $self->{'logfile'} > $self->{'reportfile'}" );
    $self->annotate( $result->stderr() );
    $self->assert_equals( 0, $result->status() );
    $self->assert( !$result->stdout(), "stdout should be empty" );
    $self->assert_does_not_match( qr/(ERROR|WARNING)/, $result->stderr(),
                                  "There were warnings or error messages." );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1