Net-QUIC
view release on metacpan or search on metacpan
t/17-transport-tuning.t view on Meta::CPAN
active_connection_id_limit => 4,
disable_active_migration => 0,
},
'transport overrides reach ngtcp2',
);
like(
dies { make_client(transport => 'not-a-hash') },
qr/transport must be a hash reference/,
'transport must be a hash reference',
);
like(
dies { make_client(transport => { mystery => 1 }) },
qr/unknown transport option: mystery/,
'unknown transport option is rejected',
);
like(
dies { make_client(transport => { handshake_timeout => 0 }) },
qr/handshake_timeout must be greater than zero/,
'zero handshake timeout is rejected',
);
like(
dies { make_client(transport => { max_bidi_streams => -1 }) },
qr/max_bidi_streams must be a non-negative integer/,
'negative stream count is rejected',
);
my $short_handshake = make_client(
transport => {
handshake_timeout => 0.02,
},
);
my $hard_deadline = time() + 1;
while (!defined($short_handshake->connection->close_info)
&& time() < $hard_deadline) {
my $after = $short_handshake->timeout_after;
if (!defined $after) {
sleep(0.001);
next;
}
sleep($after) if $after > 0;
$short_handshake->handle_timeout;
}
is(
$short_handshake->connection->close_info->{type},
'handshake',
'configured handshake timeout becomes a handshake close outcome',
);
my $server = Net::QUIC::Endpoint->server(
alpn => $alpn,
certificate_file => $cert_file,
private_key_file => $key_file,
transport => {
max_bidi_streams => 1,
max_uni_streams => 1,
},
);
my $client = make_client();
my $accepted;
sub pump_pair {
my $progress = 0;
while (my $datagram = $server->next_datagram) {
++$progress;
$client->receive_datagram(
$datagram->data,
$client_local,
$server_local,
);
}
while (my $datagram = $client->next_datagram) {
++$progress;
$server->receive_datagram(
$datagram->data,
$server_local,
$client_local,
);
}
my $server_after = $server->timeout_after;
if (defined($server_after) && $server_after <= 0) {
++$progress;
$server->handle_timeout;
}
my $client_after = $client->timeout_after;
if (defined($client_after) && $client_after <= 0) {
++$progress;
$client->handle_timeout;
}
if (!$progress) {
my @wait = sort { $a <=> $b }
grep { defined($_) && $_ > 0 }
($server_after, $client_after);
if (@wait) {
my $nap = $wait[0] > 0.01 ? 0.01 : $wait[0] + 0.001;
sleep($nap);
++$progress;
}
}
return $progress;
}
for (1 .. 500) {
pump_pair();
$accepted ||= $server->next_connection;
( run in 1.495 second using v1.01-cache-2.11-cpan-036bef1c656 )