The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use 5.010;
use strict;
use warnings;

use bytes;
use lib 'lib';

use Test::More tests => 10;

use Kafka::IO;

use Kafka::Mock;


my %requests = (
    0   =>
         '00000006'                             # REQUEST_LENGTH
        .'0000'                                 # REQUEST_TYPE
        .'00000000',                            # body
    );

my %responses = (
    0   =>
        '00000004'                              # RESPONSE_LENGTH
        .'ffffff0a',                            # body
    );

my $server;

$server = Kafka::Mock->new(
    requests    => \%requests,
    responses   => \%responses,
    timeout     => 0.1,
    );
isa_ok( $server, 'Kafka::Mock');

my $port = $server->port;
ok $port, "server port = $port";

my $io;
my $ret;

$io = Kafka::IO->new(
    host        => "localhost",
    port        => $port,
    timeout     => 1.0,
    RaiseError  => 0
    );
isa_ok( $io, 'Kafka::IO');

# arguments
foreach my $len ( ( undef, "", [], $io, -1 ) )
{
    $io->receive( $len );
    ok( defined( $io->last_error ), "last_error = ".$io->last_error." (".( $len || "" ).")" );
}

my $msg = pack( "H*", $requests{0} );
is( $ret = $io->send( $msg ), bytes::length( $msg ), "sent bytes = $ret" );
my $len = bytes::length( pack( "H*", $responses{0} ) );
is( bytes::length( ${ $ret = $io->receive( $len ) } ), $len, "receive = ".( $ret ? unpack( "H*", $ret ) : "" ) );

$io->close;
$server->close;