#!perl -T
use 5.006;
use strict;
use warnings FATAL => 'all';
use Test::More;
use Test::Exception;
use Encode;
use lib 't';
use lib 'integ_t';
require 'iron_io_integ_tests_common.pl';
plan tests => 4; # Setup, Do, Verify, Cleanup
require IO::Iron::IronMQ::Client;
#use Log::Any::Adapter ('Stderr'); # Activate to get all log messages.
#use Data::Dumper; $Data::Dumper::Maxdepth = 1;
diag("Testing IO::Iron::IronMQ::Client, Perl $], $^X");
## Test case
## Create queue, query queue, delete queue.
## Test with multiple queues.
diag('Testing IO::Iron::IronMQ::Client');
my $iron_mq_client;
my ($unique_queue_name_01, $unique_queue_name_02, $unique_queue_name_03);
subtest 'Setup for testing' => sub {
plan tests => 1;
# Create an IronMQ client.
$iron_mq_client = IO::Iron::IronMQ::Client->new( 'config' => 'iron_mq.json' );
# Create a new queue names.
{ use utf8;
$unique_queue_name_01 = create_unique_queue_name() . '_latin1';
$unique_queue_name_02 = create_unique_queue_name() . '_räksmörgås';
$unique_queue_name_03 = create_unique_queue_name() . '_三明治';
}
is(1,1, 'ok');
};
my ($created_iron_mq_queue_01, my $created_iron_mq_queue_02, my $created_iron_mq_queue_03);
subtest 'Create the queues' => sub {
plan tests => 6;
# Create a new queue.
$created_iron_mq_queue_01 = $iron_mq_client->create_queue( 'name' => $unique_queue_name_01 );
$created_iron_mq_queue_02 = $iron_mq_client->create_queue( 'name' => $unique_queue_name_02 );
$created_iron_mq_queue_03 = $iron_mq_client->create_queue( 'name' => $unique_queue_name_03 );
isa_ok($created_iron_mq_queue_01, "IO::Iron::IronMQ::Queue", "create_queue returns a IO::Iron::IronMQ::Queue.");
is($created_iron_mq_queue_01->name(), $unique_queue_name_01, "Created queue has the given name.");
diag("Created message queue " . encode_utf8($unique_queue_name_01) . ".");
isa_ok($created_iron_mq_queue_02, "IO::Iron::IronMQ::Queue", "create_queue returns a IO::Iron::IronMQ::Queue.");
is($created_iron_mq_queue_02->name(), $unique_queue_name_02, "Created queue has the given name.");
diag("Created message queue " . encode_utf8($unique_queue_name_02) . ".");
isa_ok($created_iron_mq_queue_03, "IO::Iron::IronMQ::Queue", "create_queue returns a IO::Iron::IronMQ::Queue.");
is($created_iron_mq_queue_03->name(), $unique_queue_name_03, "Created queue has the given name.");
diag("Created message queue " . encode_utf8($unique_queue_name_03) . ".");
};
subtest 'Query the queues' => sub {
plan tests => 4;
# Query the created queue.
my $queried_iron_mq_queue_01 = $iron_mq_client->get_queue( 'name' => $unique_queue_name_01 );
isa_ok($queried_iron_mq_queue_01 , "IO::Iron::IronMQ::Queue", "create_queue returns a IO::Iron::IronMQ::Queue.");
#is($queried_iron_mq_queue_01->size(), 0, "Queried queue size is 0.");
my $queried_iron_mq_queue_info_01 = $iron_mq_client->get_info_about_queue( 'name' => $unique_queue_name_01 );
#is($queried_iron_mq_queue_01->size(), $queried_iron_mq_queue_info_01->{'size'}, "Queried queue size matches with queried info.");
diag("Queried message queue " . encode_utf8($unique_queue_name_01) . ".");
my $queried_iron_mq_queue_02 = $iron_mq_client->get_queue( 'name' => $unique_queue_name_02 );
isa_ok($queried_iron_mq_queue_02 , "IO::Iron::IronMQ::Queue", "create_queue returns a IO::Iron::IronMQ::Queue.");
#is($queried_iron_mq_queue_02->size(), 0, "Queried queue size is 0.");
my $queried_iron_mq_queue_info_02 = $iron_mq_client->get_info_about_queue( 'name' => $unique_queue_name_02 );
#is($queried_iron_mq_queue_02->size(), $queried_iron_mq_queue_info_02->{'size'}, "Queried queue size matches with queried info.");
diag("Queried message queue " . encode_utf8($unique_queue_name_02) . ".");
my $queried_iron_mq_queue_03 = $iron_mq_client->get_queue( 'name' => $unique_queue_name_03 );
isa_ok($queried_iron_mq_queue_03 , "IO::Iron::IronMQ::Queue", "create_queue returns a IO::Iron::IronMQ::Queue.");
#is($queried_iron_mq_queue_03->size(), 0, "Queried queue size is 0.");
diag("Queried message queue " . encode_utf8($unique_queue_name_03) . ".");
my $queried_iron_mq_queue_info_03 = $iron_mq_client->get_info_about_queue( 'name' => $unique_queue_name_03 );
#is($queried_iron_mq_queue_03->size(), $queried_iron_mq_queue_info_03->{'size'}, "Queried queue size matches with queried info.");
# Query all queues.
my @all_queues = $iron_mq_client->get_queues();
my @found_queues;
foreach my $queue (@all_queues) {
if($queue->name() eq $unique_queue_name_01
|| $queue->name() eq $unique_queue_name_02
|| $queue->name() eq $unique_queue_name_03
) {
push @found_queues, $queue;
}
}
is(scalar @found_queues, 3, "get_queues returned the three created queues.");
};
subtest 'Clean up.' => sub {
plan tests => 6;
# Delete queue. Confirm deletion.
my $delete_queue_ret_01 = $iron_mq_client->delete_queue( 'name' => $unique_queue_name_01 );
is($delete_queue_ret_01, 1, "Queue is deleted.");
throws_ok {
my $dummy = $iron_mq_client->get_queue( 'name' => $unique_queue_name_01 );
} '/IronHTTPCallException: status_code=404 response_message=Queue not found/',
'Throw IO::Iron::IronMQ::Exceptions::HTTPException when no message queue of given name.';
diag("Deleted message queue " . encode_utf8($created_iron_mq_queue_01->name()) . ".");
my $delete_queue_ret_02 = $iron_mq_client->delete_queue( 'name' => $unique_queue_name_02 );
is($delete_queue_ret_02, 1, "Queue is deleted.");
throws_ok {
my $dummy = $iron_mq_client->get_queue( 'name' => $unique_queue_name_02 );
} '/IronHTTPCallException: status_code=404 response_message=Queue not found/',
'Throw IO::Iron::IronMQ::Exceptions::HTTPException when no message queue of given name.';
diag("Deleted message queue " . encode_utf8($created_iron_mq_queue_02->name()) . ".");
my $delete_queue_ret_03 = $iron_mq_client->delete_queue( 'name' => $unique_queue_name_03 );
is($delete_queue_ret_03, 1, "Queue is deleted.");
throws_ok {
my $dummy = $iron_mq_client->get_queue( 'name' => $unique_queue_name_03 );
} '/IronHTTPCallException: status_code=404 response_message=Queue not found/',
'Throw IO::Iron::IronMQ::Exceptions::HTTPException when no message queue of given name.';
diag("Deleted message queue " . encode_utf8($created_iron_mq_queue_03->name()) . ".");
};