#!perl
use strict;
use warnings;
use IO::Prompt;
use Test::More;
use Test::Exception;
my $subscription_id;
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 60;
$subscription_id = prompt("Please enter an AWS subscription ID for testing: ");
alarm 0;
};
if ($subscription_id && length($subscription_id) == 20) {
eval 'use Test::More tests => 28;';
} else {
eval 'use Test::More plan skip_all => "Need AWS subscription ID for testing, skipping"';
}
use_ok("Net::Amazon::SimpleQueue");
my $queue_name = "Net::Amazon::SimpleQueue test suite";
my $sq = Net::Amazon::SimpleQueue->new($subscription_id);
isa_ok($sq, "Net::Amazon::SimpleQueue", "Have an object back");
my $queue_id = $sq->create_queue();
ok($queue_id, "Created an unamed queue with id $queue_id");
$sq->delete_queue(id => $queue_id);
ok(1, "Deleted queue $queue_id");
eval { $sq->delete_queue(name => $queue_name) };
if ($@ =~ /AWS.SimpleQueueService.NonEmptyQueue/) {
my @entries = $sq->read(name => $queue_name, count => 25);
$sq->dequeue(name => $queue_name, entry_id => $_->{id}) foreach @entries;
while (1) {
diag("Trying to delete queue named $queue_name (might take a few tries)");
eval { $sq->delete_queue(name => $queue_name) };
warn $@ if $@;
last unless $@;
sleep 10;
}
}
ok(1, "Preemtively deleted queue with name $queue_name");
$queue_id = $sq->create_queue(name => $queue_name);
ok($queue_id, "Created a $queue_name queue with id $queue_id");
$sq->delete_queue(name => $queue_name);
ok(1, "Deleted queue $queue_name");
$queue_id = $sq->create_queue(name => $queue_name);
ok($queue_id, "Created a $queue_name queue with id $queue_id");
throws_ok { $sq->create_queue(name => $queue_name ) } qr/AWS.SimpleQueueService.QueueNameExists/,
"Threw exception upon trying to create duplicate queue named $queue_name";
$sq->configure_queue(
name => $queue_name,
read_lock_timeout => 61,
);
ok(1, "Configured read_lock_timeout on queue named $queue_name");
$sq->configure_queue(
id => $queue_id,
read_lock_timeout => 5,
);
ok(1, "Configured read_lock_timeout on queue with id $queue_id");
my @queues = $sq->list_my_queues();
#use YAML; die Dump(\@queues);
ok(scalar(@queues), "Returned list of my queues");
ok((grep { $_->{name} eq $queue_name } @queues), "List contains queue named $queue_name");
ok((grep { $_->{id} eq $queue_id } @queues), "List contains queue with id $queue_id");
@queues = $sq->list_my_queues(prefix => "/No/Ninjas/Here/");
ok(!scalar(@queues), "Returned no queues starting with /No/Ninjas/Here/");
my $entry = $sq->read(name => $queue_name);
ok(!$entry, "Reading returned nothing on queue named $queue_name");
$entry = $sq->read(id => $queue_id);
ok(!$entry, "Reading returned nothing on queue with id $queue_id");
my $rand = rand(1000);
$sq->enqueue(
name => $queue_name,
body => "$rand testing one",
);
ok(1, "Enqueued data to queue named $queue_name");
$sq->enqueue(
id => $queue_id,
body => "$rand testing two",
);
ok(1, "Enqueued data to queue with id $queue_id");
sleep 1;
$entry = $sq->read(name => $queue_name);
ok($entry, "Reading returned entry on queue named $queue_name");
like($entry->{body}, qr{$rand testing (one|two)}, "Entry is one of our test entries");
$sq->dequeue(name => $queue_name, entry_id => $entry->{id});
ok(1, "Dequeued " . $entry->{id} . " on queue named $queue_name");
$entry = $sq->read(id => $queue_id);
ok($entry, "Reading returned entry on queue with id $queue_id");
like($entry->{body}, qr{$rand testing (one|two)}, "Entry is one of our test entries");
$sq->dequeue(id => $queue_id, entry_id => $entry->{id});
ok(1, "Dequeued " . $entry->{id} . " on queue with id $queue_id");
$entry = $sq->read(name => $queue_name);
ok(!$entry, "Reading returned nothing on queue named $queue_name");
$entry = $sq->read(id => $queue_id);
ok(!$entry, "Reading returned nothing on queue with id $queue_id");
while (1) {
diag("Trying to delete queue named $queue_name (might take a few tries)");
eval { $sq->delete_queue(name => $queue_name) };
last unless $@;
sleep 10;
}
ok(1, "Delete queue named $queue_name\n");