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

test_tcp(
    client => sub {
        my ($port, $server_pid) = @_;
        my $client = Clutch::Client->new(
            servers => ['127.0.0.1:'.$port]
        );

        my $res;
        {
            $res = $client->request('function_name', 'args');
            note $res;
            is_deeply $res, +{response => 'args'};
        }

        {
            $res = $client->request('function_name', +{name => 'nekokak'});
            note $res;
            is_deeply $res, +{response => +{name => 'nekokak'}};
        }

        {
            $res = $client->request('foo', 'args');
            note $res;
            ok not $res;
        }

        {
            $res = $client->request('func', 'not_found');
            note $res;
            is $res, 'ERROR: unknow function';
        }

        kill 'TERM', $server_pid;
    },
    server => sub {
        my $port = shift;
        Worker->new(
            {
                address => '127.0.0.1:'.$port,
            }
        )->run();
    },
);

done_testing;