The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;
use POE qw(Wheel::SocketFactory);
use Test::More tests => 1;

POE::Session->create(
    package_states => [
        main => [qw(_start sock_up sock_down timeout)],
    ],
);

$poe_kernel->run();

sub _start {
    $_[HEAP]->{socket} = POE::Wheel::SocketFactory->new(
        SocketProtocol => 'tcp',
        RemoteAddress  => 'localhost',
        RemotePort     => 0,
        SuccessEvent   => 'sock_up',
        FailureEvent   => 'sock_down',
    );
    $_[KERNEL]->delay('timeout', 5);
}

sub sock_up {
    fail("Successful connection to an unused port?"),
    delete $_[HEAP]->{socket};
    $_[KERNEL]->delay('timeout');
}

sub sock_down {
    pass("Failed to connect as expected");
    delete $_[HEAP]->{socket};
    $_[KERNEL]->delay('timeout');
}

sub timeout {
    fail("Timed out before getting SuccessEvent or FailureEvent");
}