Amazon-S3-Lite
view release on metacpan or search on metacpan
t/01-s3-lite.t view on Meta::CPAN
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use File::Temp qw(tempfile);
use Data::Dumper;
use Digest::MD5 qw(md5_hex);
use MIME::Base64 qw(encode_base64);
use Digest::MD5 qw(md5);
use JSON::PP;
use Amazon::S3::Lite;
use Amazon::S3::Lite::Logger;
use Amazon::S3::Lite::Credentials;
########################################################################
# Helpers
########################################################################
my $LOCALSTACK = 'http://localhost:4566';
sub localstack_available {
# Require explicit opt-in to avoid hitting unrelated services on port 4566
return 0 if !$ENV{TEST_LOCALSTACK};
require HTTP::Tiny;
my $res = eval { HTTP::Tiny->new( timeout => 2 )->get("$LOCALSTACK/_localstack/health"); };
return 0 if $@ || !$res;
# Verify it's actually LocalStack by checking the response body
return 0 if $res->{status} != 200;
my $status = JSON::PP->new->decode( $res->{content} );
return $status->{services}{s3} =~ /^(?:available|running)$/xsm;
}
sub new_s3 {
return Amazon::S3::Lite->new(
{ region => 'us-east-1',
aws_access_key_id => 'test',
aws_secret_access_key => 'test',
@_,
}
);
}
sub new_localstack_s3 {
return new_s3(
host => 'localhost:4566',
secure => 0,
);
}
# Returns a mock _request sub that captures calls and returns a canned response
sub mock_request {
my (%args) = @_;
my $status = $args{status} // 200;
my $content = $args{content} // '';
my $headers = $args{headers} // {};
my $captured = $args{capture};
return sub {
my ( $self, $method, $url, $req_headers, $body, $extra, $region ) = @_;
if ($captured) {
( run in 0.534 second using v1.01-cache-2.11-cpan-80ec619307d )