EV-Websockets

 view release on metacpan or  search on metacpan

t/18-new-features.t  view on Meta::CPAN

            my ($c, $data) = @_;
            $srv_msg_count++;
            $c->send("echo:$data");
            if ($srv_msg_count == 1) {
                # Send retry immediately — the client's die in on_message
                # is caught by G_EVAL, so the connection stays alive
                $c->send("retry");
            }
        },
        on_close => sub { delete $keep{srv} },
    );

    my $phase = 0;
    $keep{cli} = $ctx->connect(
        url => "ws://127.0.0.1:$port",
        on_connect => sub { $_[0]->send("first") },
        on_message => sub {
            my ($c, $data) = @_;
            if ($phase == 0) {
                $phase = 1;
                die "test exception in on_message";
            } elsif ($phase == 1) {
                $msg_after_die = $data;
                $connection_survived = 1;
                $c->close(1000);
            }
        },
        on_close => sub {
            delete $keep{cli};
            EV::break;
        },
        on_error => sub { delete $keep{cli}; EV::break },
    );

    my $to = EV::timer(10, 0, sub { diag "Timeout!"; EV::break });
    EV::run;

    ok($connection_survived, "connection survived die inside on_message");
    is($msg_after_die, "retry", "received message after die in callback");
}

# 8. Server protocol parameter
{
    my $ctx = EV::Websockets::Context->new();
    my $listen_ok;

    eval {
        my $port = $ctx->listen(
            port     => 0,
            protocol => 'my-protocol',
            on_connect => sub { },
            on_message => sub { },
        );
        $listen_ok = $port > 0;
    };

    ok($listen_ok, "listen() with protocol parameter succeeds");
    ok(!$@, "no error setting protocol on listen()");
}

# 9. X-Forwarded-For -- requires proxy, skip
SKIP: {
    skip "X-Forwarded-For test requires proxy setup", 1;
    ok(0, "placeholder");
}

done_testing;

POSIX::_exit(Test::More->builder->is_passing ? 0 : 1);



( run in 0.724 second using v1.01-cache-2.11-cpan-13bb782fe5a )