Amazon-S3-Lite

 view release on metacpan or  search on metacpan

t/03-lock.t  view on Meta::CPAN

#!/usr/bin/env perl

use strict;
use warnings;

use English qw(-no_match_vars);
use JSON qw(encode_json decode_json);
use Test::More;

use Amazon::S3::Lite::Lock;

########################################################################
# Test doubles
########################################################################
{
  package Local::Logger;

  sub new { return bless {}, shift }
  sub trace { return }
  sub debug { return }
  sub info  { return }
  sub warn  { return }
  sub error { return }
}

{
  package Local::S3;

  sub new {
    my ( $class, %args ) = @_;

    return bless {
      last_status => q{},
      logger      => Local::Logger->new,
      puts        => [],
      deletes     => [],
      put_queue   => $args{put_queue}  || [],
      head_queue  => $args{head_queue} || [],
      get_queue   => $args{get_queue}  || [],
    }, $class;
  }

  sub logger      { return $_[0]->{logger} }
  sub last_status { return $_[0]->{last_status} }
  sub puts        { return $_[0]->{puts} }
  sub deletes     { return $_[0]->{deletes} }

  sub put_object {
    my ( $self, $bucket, $key, $body, %options ) = @_;

    push @{ $self->{puts} }, {
      bucket  => $bucket,
      key     => $key,
      body    => $body,
      options => { %options },
    };

    my $response = shift @{ $self->{put_queue} };
    die "unexpected put_object call\n"
      if !$response;

    $self->{last_status} = $response->{status};

    die( $response->{error} // "put_object failed\n" )
      if $response->{status} !~ /\A2/;

    return $response->{etag};
  }

  sub head_object {
    my ( $self, $bucket, $key ) = @_;

    my $response = shift @{ $self->{head_queue} };
    die "unexpected head_object call\n"
      if !$response;

    $self->{last_status} = $response->{status};

    die( $response->{error} // "head_object failed\n" )
      if $response->{status} !~ /\A2/ && $response->{status} != 404;



( run in 0.438 second using v1.01-cache-2.11-cpan-062aa07a564 )