The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More;
use Test::Requires qw(Server::Starter);
use Test::TCP;
use LWP::UserAgent;
use Server::Starter qw(start_server);

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

        start_server(
            exec => [ $^X, '-Mblib', '-MPlack::Loader', '-e',
                q|Plack::Loader->load('Twiggy', host => '127.0.0.1')->run(sub { [ '200', ['Content-Type' => 'text/plain'], [ 'Hello, Twiggy!' ] ] })| ],
            port => [ $port ]
        );
        exit 1;
    },
    client => sub {
        my $port = shift;

        # XXX LWP is implied by plack
        my $ua = LWP::UserAgent->new();
        my $res = $ua->get("http://127.0.0.1:$port/");
        ok $res->is_success, "request ok";
        is $res->content, "Hello, Twiggy!";
    }
);

done_testing;