The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

BEGIN {
    use Test::More;
    plan skip_all => 'Plack and Twiggy are required to run this test'
      unless eval { require Plack; require Twiggy; 1 };
}

use PocketIO::Test;

use AnyEvent;
use Plack::Builder;
use PocketIO;
use Data::Dumper;

use AnyEvent::PocketIO::Client;

{
    no warnings;

    my $orig_func = \&PocketIO::Resource::_dispatch_handshake;

    *PocketIO::Resource::_dispatch_handshake = sub {
        sleep (5);
        return $orig_func->(@_);
    };
}

my $app = builder {
    mount '/socket.io' => PocketIO->new(
        handler => sub {
            my $self = shift;
            ok(1, 'server handler runs');
        }
    );
};


my $server = '127.0.0.1';


test_pocketio(
    $app => \&_test
);

sub _test {
    my $port   = shift;
    my $client = AnyEvent::PocketIO::Client->new( handshake_timeout => 2 );

    my $cv  = AnyEvent->condvar;

    $client->handshake( $server, $port, sub {
        my ( $error, $self ) = @_;
        ok( $error, "error" );
        is_deeply( $error, { code => 500, message => 'Handshake timeout.' } );
        $cv->send;
    } );

    $cv->wait;
}

done_testing;