From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
use lib 't/lib';
use PH2Test qw(fake_connect);
subtest 'client POST' => sub {
plan tests => 6;
my $body = "DATA" x 10_000;
my $location = "https://www.example.com/";
my $on_done = sub {
my ( $headers, $data ) = @_;
my %h = (@$headers);
is $h{location}, $location, "correct redirect";
};
my %common = (
':scheme' => 'http',
':authority' => 'localhost:8000',
':path' => '/',
headers => [],
on_done => $on_done,
);
my $server;
$server = Protocol::HTTP2::Server->new(
on_request => sub {
my ( $stream_id, $headers, $data ) = @_;
my %h = (@$headers);
if ( $h{':method'} eq 'POST' ) {
is $body, $data, 'received correct POST body';
}
elsif ( $h{':method'} eq 'PUT' ) {
is $body, $data, 'received correct PUT body';
}
elsif ( $h{':method'} eq 'OPTIONS' ) {
is $data, undef, 'no body for OPTIONS';
}
$server->response_stream(
':status' => 302,
stream_id => $stream_id,
headers => [
location => $location
],
);
},
);
my $client = Protocol::HTTP2::Client->new;
$client->request(
%common,
':method' => 'POST',
data => $body,
)->request( %common, ':method' => 'OPTIONS', )->request(
%common,
':method' => 'PUT',
data => $body,
);
fake_connect( $server, $client );
};
done_testing;