package tests::OldDlfAdapterTest;

use strict;

use base qw/ tests::DlfConverterProcessFixture /;

use vars qw/$converter_script/;

use Lire::OldDlfAdapter;
use Lire::DlfConverterProcess;
use File::Basename qw/dirname/;
use Cwd qw/realpath/;
use Lire::Utils qw/tempdir create_file/;

BEGIN {
    $converter_script =
      realpath( dirname(__FILE__)  . '/helpers' ) . '/oldconverter2dlf';
    chmod 0755, $converter_script;
};

sub schema_fixtures {
    return
      {
       'message' => <<EOF,
<lire:dlf-schema superservice="message" timestamp="ts"
 xmlns:lire="http://www.logreport.org/LDSML/">
<lire:field name="ts"  type="timestamp"/>
<lire:field name="host"    type="hostname"/>
<lire:field name="ipaddr"  type="ip"/>
<lire:field name="message" type="string"/>
<lire:field name="status"  type="string"/>
</lire:dlf-schema>

EOF
      };
}

sub import_job_fixtures {
    return
      {
       'test' => <<EOF,
ts=1030000000;ipaddr=127.0.0.1;host=localhost;message=Test
ts=1030000100;ipaddr=192.168.1.1;message=Ping
ts=;message=Corrupted
ignored=field;ts=1030000200;host=host.test.com;message=This is a msg.
EOF
      };
}

my %results =
  (
   'test' =>
   {
    'line_count'  => 4,
    'error_count' => 1,
    'dlf_count'   => 3,
    'ignored_count' => 0,
    'saved_count' => 0,
    'dlf' =>
    {
     'message' =>
     [
      {
       'dlf_id'  => 1,
       'dlf_source'  => 'myjob-20041202',
       'ts'      => 1030000000,
       'ipaddr'  => "127.0.0.1",
       'host'    => "localhost",
       'message' => "Test",
       'status'  => undef,
      },
      {
       'dlf_id'  => 2,
       'dlf_source'  => 'myjob-20041202',
       'ts'      => 1030000100,
       'host'    => undef,
       'ipaddr'  => "192.168.1.1",
       'message' => "Ping",
       'status'  => undef,
      },
      {
       'dlf_id'  => 3,
       'dlf_source'  => 'myjob-20041202',
       'ts'      => 1030000200,
       'host'    => "host.test.com",
       'ipaddr'  => undef,
       'message' => "This_is_a_msg.",
       'status'  => undef,
      },
     ],
    },
   },
  );



sub converter_fixtures {
    return
      [
       new Lire::OldDlfAdapter( "message", $converter_script ),
      ];
}

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

    local $ENV{'OldDlfAdapterTest'} = join( ":", @{Lire::Config->get( 'lr_schemas_path' )});
    my $p = $self->create_dlf_converter_process( "test", "oldconverter" );
    $p->{'_job_id'} = 'myjob-20041202';
    $p->run_import_job();
    $self->assert_dlf_converter_match_results( $results{'test'}, $p );
}

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

    $self->assert_dies( qr/missing \'schema\' parameter/,
                        sub { new Lire::OldDlfAdapter() } );

    $self->assert_dies( qr/invalid schema name:/,
                      sub { new Lire::OldDlfAdapter( 'unknown', $converter_script ) });

    $self->assert_dies( qr/missing \'script\' parameter/,
                        sub { new Lire::OldDlfAdapter( 'message' ) } );

    my $tmpdir = tempdir( "old_dlf_adapter_XXXXXX", 'CLEANUP' => 1 );
    create_file( $tmpdir . "oldconverter" );
    $self->assert_dies( qr/script is not executable: \'/,
                      sub { new Lire::OldDlfAdapter( 'message', "$tmpdir/old_dlf_adapter" ) } );

    my $adapter = new Lire::OldDlfAdapter( "message", $converter_script );
    $self->assert_isa( 'Lire::OldDlfAdapter', $adapter );
    $self->assert_str_equals( 'oldconverter', $adapter->name() );
    $self->assert_str_equals( $converter_script, $adapter->script() );
    $self->assert_str_equals( "message", $adapter->schemas() );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1