Amazon-S3
view release on metacpan or search on metacpan
# list keys in the bucket
foreach my $v ( 1 .. 2 ) {
if ( $v eq '2' ) {
$response = $bucket_obj->list_v2( { 'fetch-owner' => 'true' } );
}
else {
$response = $bucket_obj->list;
}
if ( !$response ) {
BAIL_OUT( $s3->err . ': ' . $s3->errstr );
}
is( $response->{bucket}, $bucket_name_raw, sprintf 'list(%s) - %s', $v, $bucket_name );
ok( !$response->{prefix}, "list($v) - prefix empty" )
or diag( Dumper [$response] );
ok( !$response->{marker}, "list($v) - marker empty" );
is( $response->{max_keys}, 1_000, "list($v) - max keys 1000 " );
is( $response->{is_truncated}, 0, "list($v) - is_truncated 0" )
or diag( Dumper [$response] );
my @keys = @{ $response->{keys} };
is( @keys, 1, "list($v) - keys == 1 " )
or diag( Dumper \@keys );
my $key = $keys[0];
is( $key->{key}, $keyname, "list($v) - keyname" );
# the etag is the MD5 of the value
is( $key->{etag}, 'b9ece18c950afbfa6b0fdbfa4ff731d3', "list($v) - etag" );
is( $key->{size}, 1, "list($v) - size == 1" );
SKIP: {
if ( $ENV{AMAZON_S3_SKIP_OWNER_ID_TEST} ) {
skip 'mocking service has different owner for bucket', 1;
}
is( $key->{owner_id}, $OWNER_ID, "list($v) - owner id " )
or diag( Dumper [$key] );
}
is( $key->{owner_displayname}, $OWNER_DISPLAYNAME, "list($v) - owner display name" );
}
# You can't delete a bucket with things in it
ok( !$bucket_obj->delete_bucket(), 'delete bucket' );
$bucket_obj->delete_key($keyname);
# now play with the file methods
my ( $fh, $lorem_ipsum ) = tempfile();
print {$fh} <<'EOT';
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
EOT
close $fh;
my $lorem_ipsum_md5 = file_md5_hex($lorem_ipsum);
my $lorem_ipsum_size = -s $lorem_ipsum;
$keyname .= '2';
$bucket_obj->add_key_filename(
$keyname,
$lorem_ipsum,
{ content_type => 'text/plain',
'x-amz-meta-colour' => 'orangy',
}
);
$response = $bucket_obj->get_key($keyname);
is( $response->{content_type}, 'text/plain', 'get_key - content_type' );
like( $response->{value}, qr/Lorem\sipsum/xsm, 'get_key - Lorem ipsum' );
is( $response->{etag}, $lorem_ipsum_md5, 'get_key - etag' )
or diag( Dumper [$response] );
is( $response->{'x-amz-meta-colour'}, 'orangy', 'get_key - metadata' );
is( $response->{content_length}, $lorem_ipsum_size, 'get_key - content_type' );
eval { unlink $lorem_ipsum };
$response = $bucket_obj->get_key_filename( $keyname, undef, $lorem_ipsum );
is( $response->{content_type}, 'text/plain', 'get_key_filename - content_type' );
is( $response->{value}, $EMPTY, 'get_key_filename - value empty' );
is( $response->{etag}, $lorem_ipsum_md5, 'get_key_filename - etag == md5' );
is( file_md5_hex($lorem_ipsum), $lorem_ipsum_md5, 'get_key_filename - file md5' );
is( $response->{'x-amz-meta-colour'}, 'orangy', 'get_key_filename - metadata' );
is( $response->{content_length}, $lorem_ipsum_size, 'get_key_filename - content_length' );
# before we delete this key...
my $copy_result = $bucket_obj->copy_object(
key => "$keyname.bak",
source => "$keyname",
);
isa_ok( $copy_result, 'HASH', 'copy_object returns a hash reference' );
( run in 1.415 second using v1.01-cache-2.11-cpan-99c4e6809bf )