AnyEvent-Twitter-Stream
view release on metacpan or search on metacpan
t/timeout.t view on Meta::CPAN
use strict;
use warnings;
use AnyEvent::Twitter::Stream;
use AnyEvent::Util qw(guard);
use Data::Dumper;
use JSON;
use Test::More;
use Test::TCP;
use Test::Requires qw(Plack::Builder Plack::Handler::Twiggy Try::Tiny);
use Test::Requires { 'Plack::Request' => '0.99' };
my %pattern = (
wait_0_0_0 => 3,
wait_5_0_0 => 0,
wait_0_5_0 => 0,
wait_0_0_5 => 1,
);
test_tcp(
client => sub {
my $port = shift;
$AnyEvent::Twitter::Stream::STREAMING_SERVER = "localhost:$port";
$AnyEvent::Twitter::Stream::PROTOCOL = 'http'; # real world API uses https
foreach my $w (keys %pattern) {
my $destroyed;
my $received = 0;
{
my $done = AE::cv;
my $streamer = AnyEvent::Twitter::Stream->new(
username => 'test',
password => 's3cr3t',
method => 'filter',
track => $w,
timeout => 2,
on_tweet => sub {
my $tweet = shift;
$done->send, return if $tweet->{count} > 2;
note(Dumper $tweet);
$received++;
},
on_error => sub {
my $msg = $_[2] || $_[0];
note("on_error: $msg");
$done->send;
}
);
$streamer->{_guard_for_testing} = guard { $destroyed = 1 };
$done->recv;
}
is($destroyed, 1, "$w: destroyed");
is($received, $pattern{$w}, "received");
}
},
server => sub {
my $port = shift;
run_streaming_server($port);
},
);
( run in 0.743 second using v1.01-cache-2.11-cpan-39bf76dae61 )