The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Test::More tests => 17;
Net::RabbitMQ::Java->init;
my $factory = Net::RabbitMQ::Java::Client::ConnectionFactory->new;
isa_ok($factory, 'Net::RabbitMQ::Java::Client::ConnectionFactory');
$factory->setUsername('guest');
$factory->setPassword('guest');
$factory->setHost($ENV{'MQHOST'} || "dev.rabbitmq.com");
$factory->setPort($ENV{'MQPORT'} || 5672);
ok(my $conn = eval { $factory->newConnection })
or diag($@->printStackTrace);
isa_ok($conn, 'Net::RabbitMQ::Java::Client::impl::AMQConnection');
my $channel = $conn->createChannel;
isa_ok($channel, 'Net::RabbitMQ::Java::Client::impl::ChannelN');
my $cb = $conn->addShutdownListener(sub {
my ($shutdownSignalException) = @_;
isa_ok($shutdownSignalException, 'Net::RabbitMQ::Java::Client::ShutdownSignalException');
like(
$shutdownSignalException->getReason->getMethod->getReplyText,
qr/NOT_FOUND/,
'shutdown reason'
);
ok(1, 'connection shutdown');
});
isa_ok($cb, 'Net::RabbitMQ::Java::Helper::CallbackCaller');
my $cb1 = $channel->addShutdownListener(sub {
my ($shutdownSignalException) = @_;
isa_ok($shutdownSignalException, 'Net::RabbitMQ::Java::Client::ShutdownSignalException');
like(
$shutdownSignalException->getReason->getMethod->getReplyText,
qr/NOT_FOUND/,
'shutdown reason'
);
ok(1, 'channel shutdown');
});
isa_ok($cb, 'Net::RabbitMQ::Java::Helper::CallbackCaller');
my $cb2 = $channel->addShutdownListener(sub {
ok(1, 'second channel shutdown callback');
});
isa_ok($cb2, 'Net::RabbitMQ::Java::Helper::CallbackCaller');
ok(my $txSelect_res = eval { $channel->txSelect }) or diag $@;
isa_ok($txSelect_res, 'Net::RabbitMQ::Java::Client::impl::AMQImpl::Tx::SelectOk');
for (1..3) {
ok(eval {
$channel->basicPublish(
'non-existent-exchange',
'non-existent-routing-key',
1, #mandatory
1, #immediate
undef,
"unroutable message"
);
1;
}, 'basicPublish') or diag $@;
}
my $txCommit_res = eval { $channel->txCommit };
isa_ok($@, 'Net::RabbitMQ::Java::java::io::IOException', 'commit failure');
Net::RabbitMQ::Java->processCallbacks;
1;