1use strict; 2use warnings FATAL => 'all'; 3use lib 't/inc'; 4use POE; 5use POE::Component::IRC; 6use POE::Component::Server::IRC; 7use Test::More tests => 14; 8 9my $bot1 = POE::Component::IRC->spawn(Flood => 1); 10my $bot2 = POE::Component::IRC->spawn(Flood => 1); 11my $ircd = POE::Component::Server::IRC->spawn( 12 Auth => 0, 13 AntiFlood => 0, 14); 15 16POE::Session->create( 17 package_states => [ 18 main => [qw( 19 _start 20 ircd_listener_add 21 ircd_listener_failure 22 _shutdown 23 irc_registered 24 irc_connected 25 irc_001 26 irc_error 27 irc_disconnected 28 irc_shutdown 29 )], 30 ], 31); 32 33$poe_kernel->run(); 34 35sub _start { 36 my ($kernel) = $_[KERNEL]; 37 38 $ircd->yield('register', 'all'); 39 $ircd->yield('add_listener'); 40 $kernel->delay(_shutdown => 60, 'Timed out'); 41} 42 43sub ircd_listener_failure { 44 my ($kernel, $op, $reason) = @_[KERNEL, ARG1, ARG3]; 45 $kernel->yield('_shutdown', "$op: $reason"); 46} 47 48sub ircd_listener_add { 49 my ($kernel, $heap, $session, $port) = @_[KERNEL, HEAP, SESSION, ARG0]; 50 $kernel->signal($kernel, 'POCOIRC_REGISTER', $session, 'all'); 51 $heap->{nickcounter} = 0; 52 $heap->{port} = $port; 53} 54 55sub irc_registered { 56 my ($heap, $irc) = @_[HEAP, ARG0]; 57 58 $heap->{nickcounter}++; 59 pass('Registered ' . $heap->{nickcounter}); 60 isa_ok($irc, 'POE::Component::IRC'); 61 62 $irc->yield(connect => { 63 nick => 'TestBot' . $heap->{nickcounter}, 64 server => '127.0.0.1', 65 port => $heap->{port}, 66 }); 67} 68 69sub irc_connected { 70 pass('Connected'); 71} 72 73sub irc_001 { 74 my ($sender,$text) = @_[SENDER, ARG1]; 75 my $irc = $sender->get_heap(); 76 pass('Logged in'); 77 $irc->yield('quit'); 78} 79 80sub irc_error { 81 pass('irc_error'); 82} 83 84sub irc_disconnected { 85 my ($kernel, $heap) = @_[KERNEL, HEAP]; 86 pass('irc_disconnected'); 87 $heap->{count}++; 88 $kernel->yield('_shutdown') if $heap->{count} == 2; 89} 90 91sub _shutdown { 92 my ($kernel, $error) = @_[KERNEL, ARG0]; 93 fail($error) if defined $error; 94 95 $kernel->alarm_remove_all(); 96 $kernel->signal($kernel, 'POCOIRC_SHUTDOWN'); 97 $ircd->yield('shutdown'); 98} 99 100sub irc_shutdown { 101 pass('irc_shutdown'); 102} 103