aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorZoffix Znet <cpan@zoffix.com>2016-06-05 21:39:47 -0400
committerZoffix Znet <cpan@zoffix.com>2016-06-05 21:39:47 -0400
commit140959e4f170d732d990e69b9a0ca129b89e3ac4 (patch)
treec96d92c8eba8af28eea21585c1c0e5c8a18f69d7 /t
parent16056e8af837a4d982d23728adf24b4cc406576c (diff)
First working test
Diffstat (limited to 't')
-rw-r--r--t/release/01-basic.t68
-rw-r--r--t/release/Test/IRC/Server.pm620
-rw-r--r--t/release/servers/01-basic.pl67
3 files changed, 119 insertions, 36 deletions
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 <lib t/release>;
+use Test;
+use IRC::Client;
+use Test::IRC::Server;
+
+my $Wait = (%*ENV<IRC_CLIENT_TEST_WAIT>//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<IRC_CLIENT_DEBUG>//0)
+ :nick<IRCBot>
+ :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 .<event> eq 'ircd_daemon_nick';
+ .<args>[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<IRC_CLIENT_DEBUG> 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";
}