The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl -w

use strict;
use lib 't/lib';

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

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

use Net::Async::FastCGI;

use TestFCGI;

my $request;

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 { $request = $_[1] },
);

$loop->add( $fcgi );

my $C = connect_client_sock( $selfaddr );

$C->syswrite(
   # Some unknown value
   fcgi_trans( type => 0x14, id => 0, data => "" )
);
my $expect;

$expect =
   # FCGI_UNKNOWN_TYPE
   fcgi_trans( type => 11, id => 0, data => "\x14\0\0\0\0\0\0\0" );

my $buffer;

$buffer = "";

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

is_hexstr( $buffer, $expect, 'FastCGI unknown type' );

$C->syswrite(
   # Begin
   fcgi_trans( type => 1, id => 1, data => "\0\4\0\0\0\0\0\0" )
);

$expect =
   # End request
   fcgi_trans( type => 3, id => 1, data => "\0\0\0\0\3\0\0\0" );

$buffer = "";

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

is_hexstr( $buffer, $expect, "FastCGI end request record with unknown role" );