The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use File::Temp;
use Test::More;
use Test::Requires {
    'Test::TCP' => '1.18',
    'Plack' => '1.0013',
};

require Plack::Loader;
require Test::TCP;

my ($fh, $tmpfile) = File::Temp::tempfile( UNLINK => 0, EXLOCK => 0 );
close($fh);

my $app = sub {
    my $env = shift;
    open(my $afh, '>>:unix', $tmpfile) or die $!;
    print $afh $env->{PATH_INFO}."\n";
    close($afh);
    [200,["Content-Type"=>"text/html"],["OK"]];
};

Test::TCP::test_tcp(
    client => sub {
        my $port = shift;
        my $pid = fork();
        if ( $pid ) {
            for ( 1..20 ) {
                open(my $afh, $tmpfile);
                my @line = <$afh>;
                last if @line >= 2;
                sleep 1;
            }
        }
        elsif ( defined $pid ) {
            #child
            exec $^X, '-I./lib','./bin/derived', '-i', 1, '-M', 
                "GrowthForecast,api_url=http://localhost:$port/api/,service=foo,section=bar,interval=3", 
                './t/CmdsFile';
            exit;
        }
        kill 'TERM', $pid;
        waitpid($pid,0);
    },
    server => sub {
        my $port = shift;
        Plack::Loader->load(
            'Standalone',
            port => $port
        )->run($app);
        exit;
    }
);

open(my $afh, $tmpfile);
my @line = <$afh>;
ok(@line >= 2);
like( $line[0], qr/w[12]/);
like( $line[1], qr/w[12]/);
unlink($tmpfile);

done_testing();