Thread-Pool-Resolve

 view release on metacpan or  search on metacpan

t/resolveit  view on Meta::CPAN

 $filtered
);
isa_ok( $resolve,'Thread::Pool::Resolve', 'check object type' );
ok( $resolve->read( $log ),		'read from opened IO::File' );
$resolve->shutdown;
ok( check( $resolved,$filtered ),	'check result of opened IO::File' );
ok( close( $log ),			'close IO::File log file' );

diag( "Test resolving from a SCALAR handle ($optimize)" );
ok( open( $log,'<',$unresolved ),	'check opening unresolved file' );
my $scalar;
{local $/; $scalar = <$log>}
ok( close( $log ),			'check closing unresolved file' );

ok( open( $log,'<',\$scalar ),		'check SCALAR handle' );
my $output;
$resolve = Thread::Pool::Resolve->new(
 {
  optimize => $optimize,
  pre => sub { open( $output,'>',$filtered ) or die "$filtered: $!" },
  monitor => sub { print $output $_[0] },
  post => sub { close( $output ) },
  resolver => 'gethostbyaddr',
 }
);
isa_ok( $resolve,'Thread::Pool::Resolve', 'check object type' );
ok( $resolve->read( $log ),		'read from opened SCALAR' );
$resolve->shutdown;
ok( check( $resolved,$filtered ),	'check result of opened SCALAR' );
ok( close( $log ),			'close IO::File log file' );

diag( "Test resolving from a list ($optimize)" );
ok( open( $log,'<',$unresolved ),	'check opening unresolved file' );
my @array = <$log>;
ok( close( $log ),			'check closing unresolved file' );
$resolve = Thread::Pool::Resolve->new(
 {
  optimize => $optimize,
  resolver => 'gethostbyaddr',
 },
 $filtered
);
isa_ok( $resolve,'Thread::Pool::Resolve', 'check object type' );
ok( $resolve->lines( @array ),		'check object returned from lines' );
$resolve->shutdown;
ok( check( $resolved,$filtered ),	'check result from lines' );

diag( "Test resolving from different threads ($optimize)" );
@shared = @array;
$resolve = Thread::Pool::Resolve->new(
 {
  optimize => $optimize,
  resolver => 'gethostbyaddr',
 },
 $filtered
);
isa_ok( $resolve,'Thread::Pool::Resolve', 'check object type' );
my @thread;
push( @thread,threads->new( \&bythread ) ) foreach 1..10;
$_->join foreach @thread;
$resolve = undef; # needed to finalize streaming in time
ok( check( $resolved,$filtered ),	'check result different threads' );

diag( "Test resolving from Thread::Queue ($optimize)" );
@shared = (@array,undef);
my $queue = bless \@shared,'Thread::Queue';
isa_ok( $queue,'Thread::Queue',		'check object type' );
$resolve = Thread::Pool::Resolve->new(
 {
  status => \%status,
  optimize => $optimize,
  resolver => 'gethostbyaddr',
 },
 $filtered
);
isa_ok( $resolve,'Thread::Pool::Resolve', 'check object type' );
ok( $resolve->read( $queue ),		'check result of reading with queue' );
$resolve = undef;
ok( check( $resolved,$filtered ),	'check result Thread::Queue' );

diag( "Test resolving using Thread::Conveyor ($optimize)" );
my $belt = Thread::Conveyor->new( {optimize => $optimize} );
isa_ok( $belt,'Thread::Conveyor',	'check object type' );
$belt->put( $_ ) foreach @array,undef;
$resolve = Thread::Pool::Resolve->new(
 {
  optimize => $optimize,
  resolved => retrieve( $ip2domain ),
  resolver => 'gethostbyaddr',
 },
 $filtered
);
isa_ok( $resolve,'Thread::Pool::Resolve', 'check object type' );
ok( $resolve->read( $belt ),		'check result of reading with belt' );
$resolve = undef;
ok( check( $resolved,$filtered ),	'check result Thread::Conveyor' );

ok( unlink( $unresolved,$resolved,$filter,$filtered ), 'remove created files' );

#=======================================================================

# necessary subroutines

# adding resolve lines by shared array per thread

sub bythread {
  local ($_);
  READ: while (1) {
    {lock( @shared );
     my $line = shift( @shared );
     last READ unless defined( $line );
     $resolve->line( $line );
    }
  }
}

# resolve from the dummy hash

sub gethostbyaddr { select( undef,undef,undef,rand() ); $ip2domain{$_[0]} }

# check two files and return true if they are the same



( run in 1.595 second using v1.01-cache-2.11-cpan-804bf51f3ce )