[libanyevent-rabbitmq-perl] 75/151: Store server properties so we can check against server product and version in tests (probably later even in the implementation itself).

Damyan Ivanov dmn at moszumanska.debian.org
Thu Jan 16 11:03:05 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 33de65eb7b486c64e834748ed46c6a9fb64f8b19
Author: Johannes Plunien <johannes.plunien at xing.com>
Date:   Thu Mar 10 10:07:27 2011 +0100

    Store server properties so we can check against server product and version in tests (probably later even in the implementation itself).
---
 Makefile.PL              |  1 +
 lib/AnyEvent/RabbitMQ.pm | 15 ++++++++---
 xt/04_anyevent.t         | 70 ++++++++++++++++++++++++++++--------------------
 3 files changed, 53 insertions(+), 33 deletions(-)

diff --git a/Makefile.PL b/Makefile.PL
index e90a74c..c446f63 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -22,6 +22,7 @@ install_share;
 
 build_requires 'Test::More';
 build_requires 'Test::Exception';
+build_requires 'version';
 install_script 'rabbit_foot';
 auto_install;
 WriteAll;
diff --git a/lib/AnyEvent/RabbitMQ.pm b/lib/AnyEvent/RabbitMQ.pm
index 705997f..635a8fc 100644
--- a/lib/AnyEvent/RabbitMQ.pm
+++ b/lib/AnyEvent/RabbitMQ.pm
@@ -20,11 +20,12 @@ our $VERSION = '1.02';
 sub new {
     my $class = shift;
     return bless {
-        verbose   => 0,
+        verbose            => 0,
         @_,
-        _is_open  => 0,
-        _queue    => AnyEvent::RabbitMQ::LocalQueue->new,
-        _channels => {},
+        _is_open           => 0,
+        _queue             => AnyEvent::RabbitMQ::LocalQueue->new,
+        _channels          => {},
+        _server_properties => {},
     }, $class;
 }
 
@@ -100,6 +101,10 @@ sub connect {
     return $self;
 }
 
+sub server_properties {
+    return shift->{_server_properties};
+}
+
 sub _read_loop {
     my ($self, $close_cb, $failure_cb,) = @_;
 
@@ -192,6 +197,8 @@ sub _start {
             return $args{on_failure}->('en_US is not found in locales')
                 if none {$_ eq 'en_US'} @locales;
 
+            $self->{_server_properties} = $frame->method_frame->server_properties;
+
             $self->_push_write(
                 Net::AMQP::Protocol::Connection::StartOk->new(
                     client_properties => {
diff --git a/xt/04_anyevent.t b/xt/04_anyevent.t
index 96ce051..baa59ec 100644
--- a/xt/04_anyevent.t
+++ b/xt/04_anyevent.t
@@ -3,8 +3,13 @@ use Test::Exception;
 
 use FindBin;
 use JSON::XS;
+use version;
 
 my $json_text;
+my %server = (
+    product => undef,
+    version => undef,
+);
 open my $fh, '<', $FindBin::Bin . '/../config.json' or die $!;
 {undef $/; $json_text = <$fh>;}
 close $fh;
@@ -43,6 +48,8 @@ $ar->connect(
     on_success => sub {
         my $ar = shift;
         isa_ok($ar, 'AnyEvent::RabbitMQ');
+        $server{product} = $ar->server_properties->{product};
+        $server{version} = version->parse($ar->server_properties->{version});
         $done->send;
     },
     on_failure => failure_cb($done),
@@ -277,39 +284,44 @@ publish($ch, 'RabbitMQ is powerful.', $done,);
 $done->recv;
 pass('recover');
 
-$done = AnyEvent->condvar;
-my $reject_count = 0;
-$ch->consume(
-    queue      => 'test_q',
-    no_ack     => 0,
-    on_consume => sub {
-        my $response = shift;
+# This only works for RabbitMQ >= 2.0.0
+my $can_reject = $server{product} eq 'RabbitMQ' && $server{version} >= version->parse('2.0.0');
+SKIP: {
+    skip 'We need RabbitMQ >= 2.0.0 for the reject test', 1 unless $can_reject;
+    $done = AnyEvent->condvar;
+    my $reject_count = 0;
+    $ch->consume(
+        queue      => 'test_q',
+        no_ack     => 0,
+        on_consume => sub {
+            my $response = shift;
 
-        if ( 5 > ++$reject_count ) {
-            $ch->reject(
-                delivery_tag => $response->{deliver}->method_frame->delivery_tag,
+            if ( 5 > ++$reject_count ) {
+                $ch->reject(
+                    delivery_tag => $response->{deliver}->method_frame->delivery_tag,
 
-                # requeue! Else the server does not deliver the message again to this client.
-                requeue => 1,
-            );
-            return;
-        }
+                    # requeue! Else the server does not deliver the message again to this client.
+                    requeue => 1,
+                );
+                return;
+            }
 
-        $ch->ack( delivery_tag => $response->{deliver}->method_frame->delivery_tag );
+            $ch->ack( delivery_tag => $response->{deliver}->method_frame->delivery_tag );
 
-        $ch->cancel(
-            consumer_tag => $response->{deliver}->method_frame->consumer_tag,
-            on_success   => sub {
-                $done->send;
-            },
-            on_failure => failure_cb($done),
-        );
-    },
-    on_failure => failure_cb($done),
-);
-publish( $ch, 'RabbitMQ is powerful.', $done, );
-$done->recv;
-pass('reject');
+            $ch->cancel(
+                consumer_tag => $response->{deliver}->method_frame->consumer_tag,
+                on_success   => sub {
+                    $done->send;
+                },
+                on_failure => failure_cb($done),
+            );
+        },
+        on_failure => failure_cb($done),
+    );
+    publish( $ch, 'RabbitMQ is powerful.', $done, );
+    $done->recv;
+    pass('reject');
+};
 
 $done = AnyEvent->condvar;
 $ch->select_tx(

-- 
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