AnyEvent-WebSocket-Client
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
t/anyevent_websocket_client__server_initial_data_shutdown.t view on Meta::CPAN
use lib 't/lib';
use Test2::Require::SSL ();
use Test2::Plugin::EV;
use Test2::Plugin::AnyEvent::Timeout;
use Test2::V0 -no_srand => 1;
use Test2::Tools::WebSocket::Server qw( start_server );
use AnyEvent::WebSocket::Client;
my @test_cases = (
{ label => 'without TLS', tls => 0, },
{ label => 'with TLS', tls => 1, tls_cert => do { local $/; <DATA> } },
);
foreach my $test_case (@test_cases)
{
subtest $test_case->{label}, sub {
if($test_case->{tls})
{
my $reason = Test2::Require::SSL->skip;
skip_all $reason if $reason;
}
my %server_args = (
handshake => sub {
my $opt = { @_ };
$opt->{hdl}->push_write(Protocol::WebSocket::Frame->new("initial message from server")->to_bytes);
$opt->{hdl}->push_shutdown();
},
message => sub {
fail("server should not receive a message");
},
);
if($test_case->{tls})
{
$server_args{tls} = AnyEvent::TLS->new(cert => $test_case->{tls_cert});
}
my $url = start_server(%server_args);
my $cv_finish = AnyEvent->condvar;
my $conn = eval { AnyEvent::WebSocket::Client->new(ssl_no_verify => 1)->connect($url)->recv };
if($@)
{
my $error = $@;
die $error;
}
my @received_messages = ();
$conn->on(each_message => sub {
my ($conn, $message) = @_;
push(@received_messages, $message->body);
});
$conn->on(finish => sub {
$cv_finish->send;
});
$cv_finish->recv;
is(
\@received_messages, ["initial message from server"],
"client should receive the initial message sent from the server, even if the server immediately shuts down."
);
};
}
done_testing;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.512 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )