Coro-Amazon-SimpleDB

 view release on metacpan or  search on metacpan

t/02-live.t  view on Meta::CPAN

#!perl -T
use common::sense;

use lib '..';
use Test::More;

use Coro::Amazon::SimpleDB;
use List::Util qw(first max);


sub untaint {
    my $value = shift;
    my $regexp = shift or die 'regexp required to untaint';
    my @cleaned = $value =~ /$regexp/;
    return @cleaned;
}


sub hash_to_requests {
    my $request_type = shift;
    my %items = @_;
    my @requests = map {
        my $item_name = $_;
        {
            RequestType => $request_type,
            ItemName => $item_name,
            Attribute => [ map { { Name => $_, Value => $items{$item_name}{$_} } } keys %{ $items{$item_name} } ],
        };
    } keys %items;
    return @requests;
}


sub expected_response_types {
    my $responses = shift;
    my $expected_types = shift;
    return (@{$responses} && @{$expected_types}) and not first {
        ref $responses->[$_] ne $expected_types->[$_];
    } $[ .. max($#{$responses}, $#{$expected_types});
}


sub expected_response_type {
    my $responses = shift;
    my $expected_type = shift;
    my $count = shift;
    return expected_response_types($responses, [ map { $expected_type } 1 .. $count ]);
}


my $untaint_regexp = qr{\A ([[:word:]+-]+) : ([[:word:]+-]+) : ([[:word:]+-]+) \z}xms;
my ($key, $secret_key, $domain)
    = untaint join(':', @ENV{qw(AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SIMPLEDB_DOMAIN)}), $untaint_regexp;

if ($key and $secret_key and $domain) {
    plan tests => 8;
}
else {
    plan(skip_all => "missing key or domain for live test");
}

my $sdb = Coro::Amazon::SimpleDB->new;
$sdb->aws_access_key($key);
$sdb->aws_secret_access_key($secret_key);
$sdb->domain_name($domain);

# Remove the test domain.  Don't make this a test since it might not
# even be there, so who knows what will happen.  We'll delete this
# domain when we're done with it and we can test things then.
$sdb->async_requests({ RequestType => 'deleteDomain' });


my $results = $sdb->async_requests({ RequestType => 'createDomain' });
ok(
    expected_response_type($results, 'Amazon::SimpleDB::Model::CreateDomainResponse', 1),
    "createDomain",
);


my %items = map { sprintf('item%03d', $_) => { constant => 'mu', num => $_ } } 0..9;

$results = $sdb->async_requests(hash_to_requests(putAttributes => %items));
ok(
    expected_response_type($results, 'Amazon::SimpleDB::Model::PutAttributesResponse', 10),
    "async_requests putAttributes",
);


$results = $sdb->async_get_items(keys %items);
is_deeply($results, \%items, "async_get_items");


$results = $sdb->async_requests(
    {
        RequestType => 'deleteAttributes',
        ItemName => 'item000',
        Attribute => [ { Name => 'constant' }, { Name => 'num' } ],
    },
    {



( run in 0.458 second using v1.01-cache-2.11-cpan-14f38c9f855 )