The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 10;

BEGIN {	use_ok( 'POE::Component::Server::NSCA' ) };

use Socket;
use POE qw(Component::Client::NSCA);

my $poco = POE::Component::Server::NSCA->spawn(
	address => '127.0.0.1',
	port => 0,
	time_out => 10,
	password => 'moocow',
	encryption => 0,
);

isa_ok( $poco, 'POE::Component::Server::NSCA' );

POE::Session->create(
  package_states => [
	'main' => [qw(
			_start 
			_stop
			_alert
			_result
	)],
  ],
);

$poe_kernel->run();
exit 0;

sub _start {
  my ($kernel,$heap) = @_[KERNEL,HEAP];
  my $port = ( unpack_sockaddr_in $poco->getsockname() )[0];
  $kernel->call( $poco->session_id(), 'register', { event => '_alert' } );
  POE::Component::Client::NSCA->send_nsca(
	host => 'localhost',
	port => $port,
	event => '_result',
	password => 'moocow',
	encryption => 0,
        message => {
          host_name => 'bovine',
          svc_description => 'chews',
          return_code => 0,
          plugin_output => 'Chewing okay',
        },
  );
  return;
}

sub _stop {
  pass("Everything went away");
  return;
}

sub _alert {
  my ($kernel,$result) = @_[KERNEL,ARG0];
  
  ok( $result->{'plugin_output'} eq 'Chewing okay', 'Chewing okay' );
  ok( $result->{'version'} == 3, 'Right version number' );
  ok( $result->{'return_code'} == 0, 'Return code is fine' );
  ok( $result->{'svc_description'} eq 'chews', 'svc description' );
  ok( $result->{'host_name'} eq 'bovine', 'Hostname is okay' );
  TODO: {
	  local $TODO = 'Vaguely flakey on some platforms';
          ok( $result->{'checksum'} == $result->{'crc32'}, 'Checksum was okay' );
  }
  $poco->shutdown();
  return;
}

sub _result {
  my ($kernel,$result) = @_[KERNEL,ARG0];
  ok( $result->{success}, 'Result was a success' );
  return;
}