package tests::ImportJobTest;
use strict;
use base qw/ Lire::Test::TestCase /;
use Lire::ImportJob;
use POSIX qw/strftime/;
use Lire::I18N qw/set_fh_encoding/;
use Lire::Utils qw/tempfile/;
use Lire::PluginManager;
use Lire::DlfStore;
use Lire::DlfConverter;
use Lire::Test::Mock;
sub new {
my $self = shift()->SUPER::new( @_ );
$self->{'spec'} = $self->lire_default_config_spec();
$self->{'www_plugin'} = new_proxy Lire::Test::Mock( 'Lire::DlfConverter' );
$self->{'www_plugin'}->set_result( 'name' => 'www' );
return $self;
}
sub set_up {
my $self = $_[0];
$self->SUPER::set_up();
$self->{'cfg'}{'_lr_config_spec'} = $self->{'spec'};
$self->set_up_plugin_mgr();
Lire::PluginManager->register_plugin( $self->{'www_plugin'} );
return;
}
sub tear_down {
my $self = $_[0];
Lire::Test::Mock->reset_factories();
unlink $self->{'tmpfile'}
if $self->{'tmpfile'};
$self->SUPER::tear_down();
return;
}
sub test_new {
my $self = $_[0];
my %args = ( 'period' => "unique",
'pattern' => "/var/log/messages",
'converter' => "www",
'encoding' => 'ISO-8859-1',
'filter' => 'cat',
'name' => "test",
);
my $job = new Lire::ImportJob( "test", %args,
'converter_config' => {} );
$self->assert_isa( 'Lire::ImportJob', $job );
foreach my $a ( keys %args ) {
no strict 'refs';
$self->assert_str_equals( $args{$a}, $job->$a() );
}
$self->assert_deep_equals( {}, $job->converter_config() );
}
sub test_file {
my $self = $_[0];
my $job = new Lire::ImportJob( "test" );
$self->assert( UNIVERSAL::isa( $job, "Lire::ImportJob"),
"constructor didn't returned an instance of Lire::ImportJob"
);
$job->pattern( '/var/log/messages%Y%m' );
my $file = $job->file;
$self->assert_not_null( $file, "file() returned undef" );
$self->assert_equals( strftime( '/var/log/messages%Y%m', localtime ),
$file );
}
sub test_new_from_config {
my $self = $_[0];
my $job = $self->{'spec'}->get( 'import_jobs' )->get( 'import_job' )->instance();
$job->get( 'name' )->set( 'aJob' );
$job->get( 'filter' )->set( '' );
$job->get( 'log_encoding' )->set( 'UTF-8' );
$job->get( 'log_file' )->set( 'a file' );
$job->get( 'period' )->set( 'hourly' );
$job->get( 'service' )->set_plugin( 'www' );
my $jobObject = $job->as_value();
$self->assert_isa( 'Lire::ImportJob', $jobObject );
$self->assert_str_equals( 'aJob', $jobObject->{'_name'} );
$self->assert_str_equals( 'UTF-8', $jobObject->{'_encoding'} );
$self->assert_str_equals( 'www', $jobObject->{'_converter'} );
$self->assert_str_equals( 'a file', $jobObject->{'_pattern'} );
$self->assert_str_equals( 'hourly', $jobObject->{'_period'} );
$self->assert_deep_equals( {}, $jobObject->{'_converter_config'} );
$self->assert_null( $jobObject->{'_filter'} );
}
sub test_log_fh_filter {
my $self = $_[0];
my ( $fh, $name ) = tempfile( "log-utf8XXXXXX" );
$self->{'tmpfile'} = $name;
print $fh "Line 1\nLine 2\n";
close $fh;
my $job = new Lire::ImportJob( 'test', 'converter' => 'line',
'pattern' => $name,
'filter' => 'grep "Line 1"' );
my $job_fh = $job->log_fh();
$self->assert_deep_equals( [ "Line 1\n" ], [ <$job_fh> ] );
$job->filter( 'cat | grep "Line"' );
$job_fh = $job->log_fh();
$self->assert_deep_equals( [ "Line 1\n", "Line 2\n" ], [ <$job_fh> ] );
}
sub test_log_fh_encoding {
my $self = $_[0];
my $unistr = "This an A with a bar: \x{0100}\n";
my ( $fh, $name ) = tempfile( "log-utf8XXXXXX" );
$self->{'tmpfile'} = $name;
set_fh_encoding( $fh, 'utf8' );
print $fh $unistr;
close $fh;
my $job = new Lire::ImportJob( "test", converter => 'line',
'pattern' => $name,
'encoding' => 'utf8' );
my $job_fh = $job->log_fh();
my $string = <$job_fh>;
$self->assert_str_equals( $unistr, $string );
}
sub test_run {
my $self = $_[0];
$self->set_up_plugin_mgr();
my $line = new_proxy Lire::Test::Mock( 'Lire::DlfConverter' );
$line->set_result('name' => 'line',
'schemas' => sub { ( 'test', 'test-extended' ) } );
Lire::PluginManager->register_plugin( $line );
my $job = new Lire::ImportJob( "test", converter => 'line',
'pattern' => "test.log" );
my $store = new Lire::Test::Mock( 'Lire::DlfStore',
'has_dlf_stream' => sub { $_[1] eq 'test' } );
Lire::Test::Mock->set_mock_factory( 'Lire::DlfConverterProcess',
'run_import_job' => '',
'job_id' => 'my_id',
);
$job->run( $store );
my $process = Lire::Test::Mock->mock_instances( 'Lire::DlfConverterProcess' );
$self->assert_num_equals( 1, scalar @$process );
$self->assert_str_equals( $store, $process->[0]->dlf_store() );
$self->assert_num_equals( 1, $process->[0]->invocation_count( 'run_import_job' ) );
$self->assert_num_equals( 1, $store->invocation_count( 'run_analysers' ) );
$self->assert_deep_equals( [ $store, 'test', 'my_id' ],
$store->get_invocation( 'run_analysers', 0 ) );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1