From 140959e4f170d732d990e69b9a0ca129b89e3ac4 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sun, 5 Jun 2016 21:39:47 -0400 Subject: First working test --- t/release/01-basic.t | 68 +++++++++++++++++++++++++++++++++++++++++++ t/release/Test/IRC/Server.pm6 | 20 +++++++++++++ t/release/servers/01-basic.pl | 67 ++++++++++++++++++++---------------------- 3 files changed, 119 insertions(+), 36 deletions(-) create mode 100644 t/release/01-basic.t create mode 100644 t/release/Test/IRC/Server.pm6 (limited to 't') diff --git a/t/release/01-basic.t b/t/release/01-basic.t new file mode 100644 index 0000000..e6a2cd7 --- /dev/null +++ b/t/release/01-basic.t @@ -0,0 +1,68 @@ +use lib ; +use Test; +use IRC::Client; +use Test::IRC::Server; + +my $Wait = (%*ENV//1) * 5; + +my $s = Test::IRC::Server.new; +# $s.start; +END { $s.kill }; + +loop { + last if $s.out.elems >= 2; + sleep 0.5; +} + +start { + my $irc = IRC::Client.new( + :debug(%*ENV//0) + :nick + :channels<#perl6 #perl7> + :servers( + meow => { :port<5000> } + ) + ).run; +} + +Promise.in($Wait).then: {$s.kill} +await $s.promise; + +my $out = [ + {:args($[[Any],]), :event("ircd_registered")}, + {:args($[[5000, 1, "0.0.0.0"],]), :event("ircd_listener_add")}, + { + :args( + $[["IRCBot", 1, 'time', "+i", "~Perl6IRC", + "simple.poco.server.irc", "simple.poco.server.irc", + "Perl6 IRC Client"],] + ), + :event("ircd_daemon_nick")}, + { + :args($[["IRCBot!~Perl6IRC\@simple.poco.server.irc", "#perl6"],]), :event("ircd_daemon_join") + } +]; + +# Fix time signature; +for $s.out { + next unless . eq 'ircd_daemon_nick'; + .[0][2] = 'time'; +} + +is-deeply $s.out, $out, 'Server output looks right'; + +done-testing; + +# sleep 10; + +# dd $s.out; +# +# [ +# {:args($[[Any],]), :event("ircd_registered") }, +# {:args($[[5000, 1, "0.0.0.0"],]), :event("ircd_listener_add")} +# ] + + +# ok 1; +# done-testing; +# diff --git a/t/release/Test/IRC/Server.pm6 b/t/release/Test/IRC/Server.pm6 new file mode 100644 index 0000000..fed3d66 --- /dev/null +++ b/t/release/Test/IRC/Server.pm6 @@ -0,0 +1,20 @@ +unit class Test::IRC::Server; + +use JSON::Fast; + +has $!port; +has $!proc; +has Promise $.promise; +has @.out; + +submethod BUILD (:$!port = 5000, :$server = 't/release/servers/01-basic.pl') { + $!proc = Proc::Async.new: 'perl', $server, $!port; + $!proc.stdout.tap: { + %*ENV and dd .lines; + @!out.append: |.linesĀ».&from-json + }; + $!proc.stderr.tap: { warn $_ }; + $!promise = $!proc.start; +} + +method kill { $!proc.kill; } diff --git a/t/release/servers/01-basic.pl b/t/release/servers/01-basic.pl index fe5ea06..086e213 100644 --- a/t/release/servers/01-basic.pl +++ b/t/release/servers/01-basic.pl @@ -1,8 +1,13 @@ -# A fairly simple example: use strict; use warnings; +use JSON::Meth; +use 5.020; use POE qw(Component::Server::IRC); +$|++; + +my ($Port) = @ARGV; + my %config = ( servername => 'simple.poco.server.irc', nicklen => 15, @@ -24,44 +29,34 @@ sub _start { my ($kernel, $heap) = @_[KERNEL, HEAP]; $heap->{ircd}->yield('register', 'all'); - - # Anyone connecting from the loopback gets spoofed hostname - # $heap->{ircd}->add_auth( - # mask => '*@localhost', - # spoof => 'm33p.com', - # no_tilde => 1, - # ); - - # We have to add an auth as we have specified one above. $heap->{ircd}->add_auth(mask => '*@*'); - - # Start a listener on the 'standard' IRC port. - $heap->{ircd}->add_listener(port => 5667); - - # Add an operator who can connect from localhost - $heap->{ircd}->add_operator( - { - username => 'moo', - password => 'fishdont', - } - ); + $heap->{ircd}->add_listener(port => $Port); + $heap->{ircd}->add_operator({ + username => 'moo', + password => 'fishdont', + }); } sub _default { my ($event, @args) = @_[ARG0 .. $#_]; - - print "$event: "; - for my $arg (@args) { - if (ref($arg) eq 'ARRAY') { - print "[", join ( ", ", @$arg ), "] "; - } - elsif (ref($arg) eq 'HASH') { - print "{", join ( ", ", %$arg ), "} "; - } - else { - print "'$arg' "; - } - } - - print "\n"; + say { + event => $event, + args => \@args, + }->$j; + + + # print "$event: "; + # for my $arg (@args) { + # if (ref($arg) eq 'ARRAY') { + # print "[", join ( ", ", @$arg ), "] "; + # } + # elsif (ref($arg) eq 'HASH') { + # print "{", join ( ", ", %$arg ), "} "; + # } + # else { + # print "'$arg' "; + # } + # } + # + # print "\n"; } -- cgit v1.1