use Test::More tests => 7; use POE; use Net::DHCP::Packet; use Socket; require_ok( 'POE::Component::DHCP::Monitor' ); POE::Session->create( package_states => [ 'main' => [qw(_default _start _stop dhcp_monitor_registered dhcp_monitor_socket)], ], options => { trace => 0 }, heap => { ports => 2 }, ); $poe_kernel->run(); exit 0; sub _start { my ($kernel,$heap) = @_[KERNEL,HEAP]; $heap->{monitor} = POE::Component::DHCP::Monitor->spawn( port => 0, # default shown port2 => 0, options => { trace => 0 }, ); isa_ok( $heap->{monitor}, 'POE::Component::DHCP::Monitor' ); return; } sub _stop { pass("Poco shutdown and let our refcount go"); return; } sub _default { my ($event, $args) = @_[ARG0 .. $#_]; return 0 unless $event =~ /^dhcp_monitor_/; diag("$event:" . join(' ', @$args) . "\n"); return 0; } sub dhcp_monitor_registered { pass($_[STATE]); isa_ok( $_[ARG0], 'POE::Component::DHCP::Monitor' ); return; } sub dhcp_monitor_socket { pass($_[STATE]); my ($port, $myaddr) = sockaddr_in($_[ARG0]); diag("Bound to $port\n"); $_[HEAP]->{ports}--; $_[HEAP]->{monitor}->shutdown() if $_[HEAP]->{ports} <= 0; return; }