#!/usr/bin/env perl
BEGIN { use_ok(
'HTML::OSM'
) }
RATE_LIMIT: {
{
our
$REQUEST_COUNT
= 0;
our
@REQUEST_TIMES
;
sub
get {
my
(
$self
,
$url
) =
@_
;
push
@REQUEST_TIMES
,
time
();
$REQUEST_COUNT
++;
my
$content
=
'{"lon":"20","lat":"-20"}'
;
return
HTTP::Response->new(200,
'OK'
, [],
$content
);
}
}
my
$min_interval
= 1;
my
$ua
= MyTestUA->new();
my
$cache
= CHI->new(
driver
=>
'Memory'
,
global
=> 1,
expires_in
=>
'1 hour'
,
);
my
$osm
= HTML::OSM->new(
cache
=>
$cache
,
min_interval
=>
$min_interval
,
ua
=>
$ua
);
ok(
$osm
->add_marker(
point
=>
'New York'
,
html
=>
'New York'
));
ok(
$osm
->add_marker(
point
=>
'San Francisco'
,
html
=>
'San Francisco'
));
ok(
$osm
->add_marker(
point
=>
'San Francisco'
,
html
=>
'San Francisco'
));
my
$num_requests
=
scalar
@MyTestUA::REQUEST_TIMES
;
ok(
$num_requests
>= 2,
'At least two API requests have been made'
);
cmp_ok(
$num_requests
,
'=='
,
$MyTestUA::REQUEST_COUNT
);
if
(
$num_requests
>= 2) {
my
$elapsed
=
$MyTestUA::REQUEST_TIMES
[1] -
$MyTestUA::REQUEST_TIMES
[0];
cmp_ok(
$elapsed
,
'>='
,
$min_interval
,
"Rate limiting enforced: elapsed time >= $min_interval sec"
);
}
diag(
join
(
', '
,
$cache
->get_keys()))
if
(
$ENV
{
'TEST_VERBOSE'
});
cmp_ok(
ref
(
$cache
->get(
'osm:New%20York'
)),
'eq'
,
'HASH'
);
}