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

use File::Temp;
use Plack::Builder;
use Plack::Loader;
use Plack::VCR;
use Test::Exception;
use Test::More tests => 1;
use Test::TCP;

my $tempfile = File::Temp->new;
close $tempfile;

my $server = Test::TCP->new(
    code => sub {
        my ( $port ) = @_;

        my $app = builder {
            enable 'Recorder', output => $tempfile->filename;
            sub {
                return [
                    200,
                    ['Content-Type' => 'text/plain'],
                    ['OK'],
                ];
            };
        };

        Plack::Loader->auto(port => $port, host => '127.0.0.1')->run($app);
    },
);

my $pid = fork;

if($pid) {
    waitpid $pid, 0;
} else {
    require LWP::UserAgent;

    my $ua = LWP::UserAgent->new;
    $ua->request(HTTP::Request->new('GET' =>
        'http://localhost:' . $server->port . '/'));
    exit 0;
}

undef $server;

my $vcr         = Plack::VCR->new(filename => $tempfile->filename);
my $interaction = $vcr->next;
my $request     = $interaction->request;
lives_ok {
    $request->method;
};