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

use AnyEvent;
use AnyEvent::Socket;
use AnyEvent::Handle;
use AnyEvent::APNS;

my $cv;
my $port = empty_port;

my $server = tcp_server undef, $port, sub {
    my ($fh) = @_
        or die $!;

    # close immediately
    close $fh;
};

# without on_eof
$cv = AnyEvent->condvar;

my $apns; $apns = AnyEvent::APNS->new(
    debug_port  => $port,
    certificate => \'',
    private_key => \'',
    on_error    => sub {
        my ($h, $fatal, $msg) = @_;

        like $msg, qr/^Unexpected end-of-file/, 'eof ok';
        $cv->send;
    },
);
$apns->connect;

$cv->recv;


# on_eof
$cv = AnyEvent->condvar;

$apns = AnyEvent::APNS->new(
    debug_port  => $port,
    certificate => \'',
    private_key => \'',
    on_error    => sub {
        my ($h, $fatal, $msg) = @_;
        fail 'on_eof not called: ' . $msg;
        $cv->send;
    },
    on_eof => sub {
        my ($h) = @_;
        pass 'on_eof called ok';
        $cv->send;
    },
);
$apns->connect;

$cv->recv;

done_testing;