The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 3;
use POE qw(Component::Win32::EventLog);
use Win32::EventLog;

my $eventlog = POE::Component::Win32::EventLog->spawn( source => 'System', debug => 0, options => { trace => 0 } );

POE::Session->create(
  package_states => [
  	'main' => [ qw(_start _getoldest _getnumber _event_logs) ],
  ],
  options => { trace => 0 },
);

$poe_kernel->run();
exit 0;

sub _start {
  $eventlog->yield( getoldest => { event => '_getoldest' } );
  return;
}

sub _getoldest {
  my $heap = $_[HEAP];
  my ($hashref) = $_[ARG0];
  unless ( $hashref->{result} ) {
    $eventlog->yield( 'shutdown' );
    return;
  }
  pass("Got oldest");
  $heap->{oldest} = $hashref->{result};
  $eventlog->yield( getnumber => { event => '_getnumber' } );
  return;
}

sub _getnumber {
  my $heap = $_[HEAP];
  my ($hashref) = $_[ARG0];
  unless ( $hashref->{result} ) {
    $eventlog->yield( 'shutdown' );
    return;
  }
  pass("Got number");
  $eventlog->yield( read => { event => '_event_logs', args => [ EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ, $heap->{oldest} ] } );
  return;
}

sub _event_logs {
  my $heap = $_[HEAP];
  my ($hashref) = $_[ARG0];
  ok( $hashref->{result}, 'Got a record' );
  $eventlog->yield( 'shutdown' );
  return;
}