The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::TCP;
use IO::Socket::INET;
use HTTP::Request;
use HTTP::Response;
use Plack::Loader;
use Test::More;

$ENV{PLACK_SERVER} = 'Starman';

test_tcp(
    client => sub {
        my $port = shift;

        my $socket = IO::Socket::INET->new(
            PeerAddr => 'localhost',
            PeerPort => $port,
            Proto => 'tcp'
        ) or die "Failed to connect to server: $!";

        my $request = HTTP::Request->new(
            HEAD => '/', [ Host => 'localhost' ]
        );
        $request->protocol('HTTP/1.1');

        $socket->send($request->as_string("\r\n"));
        $socket->shutdown(1);

        my $data;
        while ($socket->connected) {
            my $buf;
            $socket->recv($buf, 1024);
            $data .= $buf;
        }

        my $res = HTTP::Response->parse($data);

        is $res->content, '';
    },
    server => sub {
        my $port = shift;
        my $server = Plack::Loader->auto(port => $port, host => '127.0.0.1');

        $server->run(sub { return [ 200, [], [] ] });
    }
);

done_testing;