aboutsummaryrefslogtreecommitdiff
path: root/t/release
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/release
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/release')
-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
4 files changed, 219 insertions, 0 deletions
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";
+ }