The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use lib 't/lib';

use Test::More tests => 3;
use Test::HexString;

use IO::Async::Loop;
use IO::Async::Test;

use Net::Async::FastCGI;

use TestFCGI;

my ( $S, $selfaddr ) = make_server_sock;

my $loop = IO::Async::Loop->new();
testing_loop( $loop );

my $fcgi = Net::Async::FastCGI->new(
   handle => $S,
   on_request => sub {}, # ignore, we're not really going to start any
);

$loop->add( $fcgi );

my $C = connect_client_sock( $selfaddr );

$C->syswrite(
   # FCGI_GET_VALUES
   fcgi_trans( 
      type => 9,
      id   => 0,
      data => "\x0f\0FCGI_MPXS_CONNS"
   )
);

my $expect;

$expect =
   # FCGI_GET_VALUES_RESULT
   fcgi_trans(
      type => 10,
      id   => 0,
      data => "\x0f\1FCGI_MPXS_CONNS1"
   );

my $buffer;

$buffer = "";

wait_for_stream { length $buffer >= length $expect } $C => $buffer;

is_hexstr( $buffer, $expect, 'FastCGI end request record for FCGI_MPXS_CONNS' );

$C->syswrite(
   # FCGI_GET_VALUES
   fcgi_trans( 
      type => 9,
      id   => 0,
      data => "\x0e\0FCGI_MAX_CONNS"
   )
);

$expect =
   # FCGI_GET_VALUES_RESULT
   fcgi_trans(
      type => 10,
      id   => 0,
      data => "\x0e\4FCGI_MAX_CONNS1024"
   );

$buffer = "";

wait_for_stream { length $buffer >= length $expect } $C => $buffer;

is_hexstr( $buffer, $expect, 'FastCGI end request record for FCGI_MAX_CONNS' );

$C->syswrite(
   # FCGI_GET_VALUES
   fcgi_trans( 
      type => 9,
      id   => 0,
      data => "\x0d\0FCGI_MAX_REQS"
   )
);

$expect =
   # FCGI_GET_VALUES_RESULT
   fcgi_trans(
      type => 10,
      id   => 0,
      data => "\x0d\4FCGI_MAX_REQS1024"
   );

$buffer = "";

wait_for_stream { length $buffer >= length $expect } $C => $buffer;

is_hexstr( $buffer, $expect, 'FastCGI end request record for FCGI_MAX_REQS' );