1use strict; 2use warnings; 3use Test::More tests => 20; 4use POE::Component::Server::IRC; 5use POE::Component::IRC; 6use POE; 7 8my $pocosi = POE::Component::Server::IRC->spawn( 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'); 17 POE::Session->create( 18 package_states => [ 19 main => [qw( 20 _start 21 _shutdown 22 _default 23 ircd_registered 24 ircd_daemon_nick 25 ircd_listener_add 26 ircd_listener_del) ], 27 ], 28 options => { trace => 0 }, 29 heap => { irc => $pocoirc, ircd => $pocosi }, 30 ); 31 $poe_kernel->run(); 32} 33 34exit 0; 35 36sub _start { 37 my ($kernel,$heap) = @_[KERNEL,HEAP]; 38 $heap->{irc}->yield('register', 'all'); 39 $heap->{ircd}->yield('register', 'all'); 40 $heap->{ircd}->add_listener(); 41 $kernel->delay('_shutdown', 20); 42} 43 44sub _shutdown { 45 my $heap = $_[HEAP]; 46 $_[KERNEL]->delay('_shutdown'); 47 $heap->{irc}->yield('unregister', 'all'); 48 $heap->{irc}->yield('shutdown'); 49 $heap->{ircd}->yield('shutdown'); 50 delete $heap->{irc}; 51 delete $heap->{ircd}; 52} 53 54sub ircd_registered { 55 my ($heap, $object) = @_[HEAP, ARG0]; 56 my $backend = $_[SENDER]->get_heap(); 57 isa_ok($object, 'Object::Pluggable' ); 58 isa_ok($object, 'POE::Component::Server::IRC'); 59 isa_ok($backend, 'POE::Component::Server::IRC'); 60 isa_ok($backend->pipeline, 'Object::Pluggable::Pipeline'); 61} 62 63sub ircd_listener_add { 64 my ($heap, $port) = @_[HEAP, ARG0]; 65 pass("Started a listener on $port"); 66 $heap->{port} = $port; 67 $heap->{irc}->yield( 68 connect => { 69 server => 'localhost', 70 port => $port, 71 nick => __PACKAGE__, 72 }, 73 ); 74} 75 76sub ircd_listener_del { 77 my ($heap, $port) = @_[HEAP, ARG0]; 78 pass("Stopped listener on $port"); 79 $_[KERNEL]->yield('_shutdown'); 80} 81 82sub ircd_backend_connection { 83 pass('ircd_backend_connection'); 84} 85 86sub ircd_backend_auth_done { 87 pass('ircd_backend_auth_done'); 88} 89 90sub ircd_daemon_nick { 91 pass('ircd_daemon_nick'); 92} 93 94sub ircd_backend_cmd_user { 95 pass('ircd_backend_cmd_user'); 96} 97 98sub _default { 99 my $event = $_[ARG0]; 100 101 if ($event =~ /^irc_(00[1234]|25[15]|422)/ || $event eq 'irc_isupport') { 102 pass($event); 103 } 104 if ($event eq 'irc_mode') { 105 pass($event); 106 $_[HEAP]->{irc}->yield('nick', 'moo'); 107 } 108 if ($event eq 'irc_nick') { 109 pass($event); 110 $_[HEAP]->{irc}->yield('quit', 'moo'); 111 } 112 if ($event eq 'irc_error') { 113 pass($event); 114 $_[HEAP]->{ircd}->del_listener('port', $_[HEAP]->{port}); 115 } 116} 117