The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::TCP;

eval q{use AnyEvent::MPRPC::Server; 1};
if ($@) {
    plan skip_all
        => "AnyEvent::MPRPC is required to run this test";
}

use Net::MPRPC::Client;

test_tcp(
    server => sub {
        my $port = shift;
        my $w = AnyEvent->signal( signal => 'PIPE', cb => sub { warn "SIGPIPE" } );

        my $server = AnyEvent::MPRPC::Server->new(host => '127.0.0.1', port => $port);
        $server->reg_cb(
            sum => sub {
                my ($res_cv, $args) = @_;
                my $i = 0;
                $i += $_ for @$args;
                $res_cv->result( $i );
            },
        );
        AnyEvent->condvar->recv;
    },
    client => sub {
        my $port = shift;
        my $client = Net::MPRPC::Client->new(
            host => '127.0.0.1',
            port => $port,
        );

        my $res = $client->call( sum => [qw/1 2 3/] );
        is $res, 6;
        done_testing;
    },
);