The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use Test::More;
use blib;
use lib 't'; use Utils;
BEGIN {
    plan skip_all => "Need Plack >= 0.9950 to run this test"
        unless eval 'require Plack; $Plack::VERSION >= 0.995';
    plan skip_all => "Need Test::TCP 1.06 to run this test"
        unless eval 'require Test::TCP; $Test::TCP::VERSION >= 1.06';
}

plan tests => 6;
use Test::TCP;
use Config;

test_tcp(
    client => sub {
        my $port = shift;
        my $cv = AE::cv;
        $cv->begin;
        my $cli = simple_client GET => '/',
            port => $port,
            name => 'feersum runner',
            sub {
                my ($body,$headers) = @_;
                is $headers->{Status}, 200, "script http success";
                like $body, qr/^Hello customer number 0x[0-9a-f]+$/;
                $cv->end;
            };
        $cv->recv;
    },
    server => sub {
        my $port = shift;
        exec "$^X -Mblib blib/script/feersum --listen localhost:$port ".
            "eg/app.psgi";
   },
);

my $plackup;
for my $key (qw(bin scriptdir sitebin sitescript vendbin vendscript)) {
    my $dir = $Config{$key.'exp'};
    next unless $dir;

    my $pu = "$dir/plackup";
    next unless (-e $pu && -x _);

    my $plackup_ver = `$^X $pu --version`;
    next unless ($plackup_ver =~ /Plack (\d.\d+)/ && $1 >= 0.995);

    $plackup = $pu;
    chomp $plackup_ver;
    diag "found plackup: $plackup ($plackup_ver)";
    last;
}

SKIP: {
    skip "can't locate plackup in script/bin dirs", 3
        unless $plackup;
    test_tcp(
        client => sub {
            my $port = shift;
            my $cv = AE::cv;
            $cv->begin;
            my $cli = simple_client GET => '/',
                port => $port,
                name => 'plackup runner',
                sub {
                    my ($body,$headers) = @_;
                    is $headers->{Status}, 200, "script http success";
                    like $body, qr/^Hello customer number 0x[0-9a-f]+$/;
                    $cv->end;
                };
            $cv->recv;
        },
        server => sub {
            my $port = shift;
            exec "$^X -Mblib $plackup -E deployment ".
                "-s Feersum --listen localhost:$port eg/app.psgi";
       },
    );
}