1use strict; 2use warnings; 3use Test::More tests => 8; 4use POE::Component::Server::IRC::Backend; 5use POE::Component::IRC; 6use POE; 7 8my $pocosi = POE::Component::Server::IRC::Backend->create( 9 auth => 0, 10 antiflood => 0, 11 plugin_debug => 1, 12); 13my $pocoirc = POE::Component::IRC->spawn(flood => 1); 14 15if ($pocosi && $pocoirc) { 16 isa_ok($pocosi, 'POE::Component::Server::IRC::Backend'); 17 POE::Session->create( 18 package_states => [ 19 'main' => [qw( 20 _start 21 _shutdown 22 ircd_connection 23 ircd_cmd_nick 24 ircd_cmd_user 25 ircd_registered 26 ircd_listener_add 27 ircd_listener_del 28 )], 29 ], 30 options => { trace => 0 }, 31 heap => { irc => $pocoirc, ircd => $pocosi }, 32 ); 33 $poe_kernel->run(); 34} 35 36exit 0; 37 38sub _start { 39 my ($kernel, $heap) = @_[KERNEL, HEAP]; 40 41 $heap->{irc}->yield('register', 'all'); 42 $heap->{ircd}->yield('register', 'all'); 43 $heap->{ircd}->add_listener(); 44 $kernel->delay('_shutdown', 20); 45} 46 47sub _shutdown { 48 my ($kernel, $heap) = @_[KERNEL, HEAP]; 49 50 $kernel->delay('_shutdown'); 51 $heap->{irc}->yield('unregister', 'all'); 52 $heap->{irc}->yield('shutdown'); 53 $heap->{ircd}->yield('shutdown'); 54} 55 56sub ircd_registered { 57 my ($heap, $object) = @_[HEAP, ARG0]; 58 my $backend = $_[SENDER]->get_heap(); 59 isa_ok($object, 'POE::Component::Server::IRC::Backend'); 60 isa_ok($backend, 'POE::Component::Server::IRC::Backend'); 61} 62 63sub ircd_listener_add { 64 my ($heap, $port) = @_[HEAP, ARG0]; 65 66 pass("Started a listener on $port"); 67 $heap->{port} = $port; 68 $heap->{irc}->yield( 69 connect => { 70 server => 'localhost', 71 port => $port, 72 nick => __PACKAGE__, 73 }, 74 ); 75} 76 77sub ircd_listener_del { 78 my ($heap, $port) = @_[HEAP, ARG0]; 79 is($port, $heap->{port}, "Stopped listener on $port"); 80 $_[KERNEL]->yield('_shutdown'); 81} 82 83sub ircd_connection { 84 pass('ircd_backend_connection'); 85} 86 87sub ircd_cmd_nick { 88 pass('ircd_backend_cmd_nick'); 89 $_[HEAP]->{result}++; 90 if ($_[HEAP]->{result} >= 2) { 91 $_[HEAP]->{ircd}->del_listener('port', $_[HEAP]->{port}); 92 } 93} 94 95sub ircd_cmd_user { 96 pass('ircd_backend_cmd_user'); 97 $_[HEAP]->{result}++; 98 if ($_[HEAP]->{result} >= 2) { 99 $_[HEAP]->{ircd}->del_listener('port', $_[HEAP]->{port}); 100 } 101} 102 103 104