aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorZoffix Znet <zoffixznet@users.noreply.github.com>2016-07-26 08:50:02 -0400
committerGitHub <noreply@github.com>2016-07-26 08:50:02 -0400
commite0478c07e2096d85e20764c08c83a3d16c002e94 (patch)
tree592510005886adaadb49848d289c5c712279ecee /t
parente997c1b0b5ad796425abfc9f81b91947357172ce (diff)
parentcc19189ff6b74bea5211d521a59dbff0c71a0749 (diff)
Merge Rewrite 2.0 version into master
Old version should not be used anymore and 2.0 is ready to go, sans some bugs
Diffstat (limited to 't')
-rw-r--r--t/meta.t7
-rw-r--r--t/release/01-basic.t62
-rw-r--r--t/release/02-multi-server.t75
-rw-r--r--t/release/Test/IRC/Server.pm620
-rw-r--r--t/release/servers/01-basic.pl62
5 files changed, 226 insertions, 0 deletions
diff --git a/t/meta.t b/t/meta.t
new file mode 100644
index 0000000..6e2447d
--- /dev/null
+++ b/t/meta.t
@@ -0,0 +1,7 @@
+#!perl6
+
+use lib 'lib';
+use Test;
+use Test::META;
+meta-ok;
+done-testing;
diff --git a/t/release/01-basic.t b/t/release/01-basic.t
new file mode 100644
index 0000000..114f4c4
--- /dev/null
+++ b/t/release/01-basic.t
@@ -0,0 +1,62 @@
+use lib <lib t/release>;
+use Test;
+use Test::Notice;
+use IRC::Client;
+use Test::IRC::Server;
+
+my $Wait = (%*ENV<IRC_CLIENT_TEST_WAIT>//1) * 5;
+
+notice 'Testing connection to one server and joining two channels';
+
+diag 'Starting IRC Server';
+my $s = Test::IRC::Server.new;
+END { $s.kill };
+
+loop {
+ last if $s.out.elems >= 2;
+ sleep 0.5;
+}
+
+diag 'Starting IRC Client';
+start {
+ my $irc = IRC::Client.new(
+ :debug(%*ENV<IRC_CLIENT_DEBUG>//0)
+ :nick<IRCBot>
+ :channels<#perl6 #perl7>
+ :servers(
+ meow => { :port<5000> }
+ )
+ ).run;
+}
+
+diag 'Waiting for things to happen...';
+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")
+ },
+ {
+ :args($[["IRCBot!~Perl6IRC\@simple.poco.server.irc", "#perl7"],]), :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;
diff --git a/t/release/02-multi-server.t b/t/release/02-multi-server.t
new file mode 100644
index 0000000..d234c0b
--- /dev/null
+++ b/t/release/02-multi-server.t
@@ -0,0 +1,75 @@
+use lib <lib t/release>;
+use Test;
+use Test::Notice;
+use IRC::Client;
+use Test::IRC::Server;
+
+my $Wait = (%*ENV<IRC_CLIENT_TEST_WAIT>//1) * 5;
+
+notice 'Testing connection to four servers and joining two channels in each';
+
+diag 'Starting IRC Servers';
+my $s1 = Test::IRC::Server.new: :port<5020>;
+my $s2 = Test::IRC::Server.new: :port<5021>;
+my $s3 = Test::IRC::Server.new: :port<5022>;
+my $s4 = Test::IRC::Server.new: :port<5023>;
+END { $s1.kill; $s2.kill; $s3.kill; $s4.kill; };
+
+loop {
+ last if $s1.out.elems & $s2.out.elems & $s3.out.elems & $s4.out.elems >= 2;
+ sleep 0.5;
+}
+
+diag 'Starting IRC Client';
+start {
+ my $irc = IRC::Client.new(
+ :debug(%*ENV<IRC_CLIENT_DEBUG>//0)
+ :nick<IRCBot>
+ :channels<#perl6 #perl7>
+ :servers(
+ s1 => { :port<5020> },
+ s2 => { :port<5021>, :nick<OtherBot>, :channels<#perl7 #perl9> },
+ s3 => { :port<5022>, :channels<#perl10 #perl11> },
+ s4 => { :port<5023>, :nick<YetAnotherBot> },
+ )
+ ).run;
+}
+
+diag 'Waiting for things to happen...';
+Promise.in($Wait).then: { $s1.kill; $s2.kill; $s3.kill; $s4.kill; }
+await Promise.allof: ($s1, $s2, $s3, $s4).map: *.promise;
+
+dd $s1.out;
+diag '----';
+dd $s2.out;
+diag '----';
+dd $s3.out;
+diag '----';
+dd $s4.out;
+diag '----';
+
+#
+# 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;
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
new file mode 100644
index 0000000..086e213
--- /dev/null
+++ b/t/release/servers/01-basic.pl
@@ -0,0 +1,62 @@
+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,
+ network => 'SimpleNET'
+);
+
+my $pocosi = POE::Component::Server::IRC->spawn( config => \%config );
+
+POE::Session->create(
+ package_states => [
+ 'main' => [qw(_start _default)],
+ ],
+ heap => { ircd => $pocosi },
+);
+
+$poe_kernel->run();
+
+sub _start {
+ my ($kernel, $heap) = @_[KERNEL, HEAP];
+
+ $heap->{ircd}->yield('register', 'all');
+ $heap->{ircd}->add_auth(mask => '*@*');
+ $heap->{ircd}->add_listener(port => $Port);
+ $heap->{ircd}->add_operator({
+ username => 'moo',
+ password => 'fishdont',
+ });
+}
+
+sub _default {
+ my ($event, @args) = @_[ARG0 .. $#_];
+ 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";
+ }