#########################
# Signature Test
#########################
use warnings;
use strict;
use Test::More tests => 6;
BEGIN { use_ok('Net::Amazon'); use_ok('Log::Log4perl'); }
my $log_file = "025cache.log";
use IO::File;
use Net::Amazon::Request::ASIN;
use Net::Amazon::Response::ASIN;
use Log::Log4perl::Level;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init({level => $ALL, file => ">>$log_file"});
################################################################
# Setup
################################################################
my($TESTDIR) = map { -d $_ ? $_ : () } qw(t ../t .);
require "$TESTDIR/init.pl";
SKIP: {
eval { require Cache::MemoryCache };
skip "Cache::File not installed", 4 if $@;
if (!defined($ENV{AMAZON_TOKEN}) || !defined($ENV{AMAZON_SECRET_KEY})) {
skip "Cannot run live cache test because environment variables are missing.", 4;
}
my $cache = Cache::MemoryCache->new({
'namespace' => 'Net::Amazon Unit Test',
'default_expires_in' => 600
});
my $ua = Net::Amazon->new(
associate_tag => 'YOUR_AMZN_ASSOCIATE_TAG',
token => $ENV{AMAZON_TOKEN},
secret_key => $ENV{AMAZON_SECRET_KEY},
cache => $cache,
);
my $req = Net::Amazon::Request::ASIN->new(
asin => '0201360683'
);
# not cached
my $resp = $ua->request($req);
ok($resp->is_success, "check first request status");
# sufficient space the requests apart to ensure the timestamps are different.
sleep(2);
# cached
$resp = $ua->request($req);
ok($resp->is_success, "check second request status");
my $finh = IO::File->new($log_file) or
die "Error $!";
my $cache_miss = 0;
my $cache_hit = 0;
while (defined (my $line = $finh->getline())) {
$cache_miss++ if $line =~ /Cache miss/;
$cache_hit++ if $line =~ /Serving from cache/;
}
$finh->close();
ok(($cache_miss == 1), "verfiying first request missed the cache");
ok(($cache_hit == 1), "verfiying second request hit the cache");
unlink($log_file) if -f $log_file;
}