[libanyevent-rabbitmq-perl] 89/151: Added a test for multi channels.

Damyan Ivanov dmn at moszumanska.debian.org
Thu Jan 16 11:03:06 UTC 2014


This is an automated email from the git hooks/post-receive script.

dmn pushed a commit to annotated tag debian/1.12-1
in repository libanyevent-rabbitmq-perl.

commit 83f016d34d306e237e0c9de5a3712b7de14a5c3a
Author: cooldaemon <cooldaemon at gmail.com>
Date:   Fri Apr 8 18:43:28 2011 +0900

    Added a test for multi channels.
---
 xt/05_multi_channel.t | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 168 insertions(+)

diff --git a/xt/05_multi_channel.t b/xt/05_multi_channel.t
new file mode 100644
index 0000000..bdcaaa6
--- /dev/null
+++ b/xt/05_multi_channel.t
@@ -0,0 +1,168 @@
+use Test::More;
+use Test::Exception;
+
+my %conf = (
+    host  => 'localhost',
+    port  => 5672,
+    user  => 'guest',
+    pass  => 'guest',
+    vhost => '/',
+);
+
+eval {
+    use IO::Socket::INET;
+
+    my $socket = IO::Socket::INET->new(
+        Proto    => 'tcp',
+        PeerAddr => $conf{host},
+        PeerPort => $conf{port},
+        Timeout  => 1,
+    ) or die 'Error connecting to AMQP Server!';
+
+    close $socket;
+};
+
+plan skip_all => 'Connection failure: '
+               . $conf{host} . ':' . $conf{port} if $@;
+plan tests => 1;
+
+use AnyEvent::RabbitMQ;
+
+my $ar = connect_ar();
+
+my @queues = map {
+    my $ch = open_channel($ar);
+    my $queue = 'test_q' . $_;
+    declare_queue($ch, $queue,);
+
+    my $done = AnyEvent->condvar;
+    consume($ch, $queue, sub {
+        my $response = shift;
+        return if 'stop' ne $response->{body}->payload;
+        $done->send();
+    });
+    {name => $queue, cv => $done};
+} (1..5);
+
+my $ch = open_channel($ar);
+for my $queue (@queues) {
+    publish($ch, $queue->{name}, 'hello');
+    publish($ch, $queue->{name}, 'stop');
+}
+
+my $count = 0;
+for my $queue (@queues) {
+    $queue->{cv}->recv;
+    $count++;
+}
+
+is($count, 5, 'consume count');
+
+for my $queue (@queues) {
+    delete_queue($ch, $queue->{name});
+}
+
+close_ar($ar);
+
+sub connect_ar {
+    my $done = AnyEvent->condvar;
+    my $ar = AnyEvent::RabbitMQ->new()->load_xml_spec()->connect(
+        (map {$_ => $conf{$_}} qw(host port user pass vhost)),
+        timeout    => 1,
+        on_success => sub {$done->send(1)},
+        on_failure => sub {$done->send()},
+        on_close   => \&handle_close,
+    );
+    die 'Connection failure' if !$done->recv;
+    return $ar;
+}
+
+sub close_ar {
+    my ($ar,) = @_;
+
+    my $done = AnyEvent->condvar;
+    $ar->close(
+        on_success => sub {$done->send(1)},
+        on_failure => sub {$done->send()},
+    );
+    die 'Close failure' if !$done->recv;
+
+    return;
+}
+
+sub open_channel {
+    my ($ar,) = @_;
+    
+    my $done = AnyEvent->condvar;
+    $ar->open_channel(
+        on_success => sub {$done->send(shift)},
+        on_failure => sub {$done->send()},
+        on_close   => \&handle_close,
+    );
+    my $ch = $done->recv;
+    die 'Open channel failure' if !$ch;
+
+    return $ch;
+}
+
+sub declare_queue {
+    my ($ch, $queue,) = @_;
+
+    my $done = AnyEvent->condvar;
+    $ch->declare_queue(
+        queue      => $queue,
+        on_success => sub {$done->send(1)},
+        on_failure => sub {$done->send()},
+    );
+    die 'Declare queue failure' if !$done->recv;
+
+    return;
+}
+
+sub delete_queue {
+    my ($ch, $queue,) = @_;
+
+    my $done = AnyEvent->condvar;
+    $ch->delete_queue(
+        queue      => $queue,
+        on_success => sub {$done->send(1)},
+        on_failure => sub {$done->send()},
+    );
+    die 'Delete queue failure' if !$done->recv;
+
+    return;
+}
+
+sub consume {
+    my ($ch, $queue, $handle_consume,) = @_;
+
+    my $done = AnyEvent->condvar;
+    $ch->consume(
+        queue      => $queue,
+        on_success => sub {$done->send(1)},
+        on_failure => sub {$done->send()},
+        on_consume => $handle_consume,
+    );
+    die 'Consume failure' if !$done->recv;
+
+    return;
+}
+
+sub publish {
+    my ($ch, $queue, $message,) = @_;
+
+    $ch->publish(
+        routing_key => $queue,
+        body        => $message,
+        mandatory   => 1,
+        on_return   => sub {die 'Receive return'},
+    );
+
+    return;
+}
+
+sub handle_close {
+    my $method_frame = shift->method_frame;
+    die $method_frame->reply_code, $method_frame->reply_text;
+}
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libanyevent-rabbitmq-perl.git



More information about the Pkg-perl-cvs-commits mailing list