EV-Etcd
view release on metacpan or search on metacpan
t/binary_data.t view on Meta::CPAN
#!/usr/bin/env perl
use strict;
use warnings;
use lib 'blib/lib', 'blib/arch';
use Test::More;
use Encode qw(encode_utf8);
# Skip if EV not available
BEGIN {
eval { require EV };
plan skip_all => 'EV required' if $@;
}
use EV;
use EV::Etcd;
# Check if etcd is available
my $etcd_available = 0;
eval {
my $client = EV::Etcd->new(
endpoints => ['127.0.0.1:2379'],
timeout => 2,
);
$client->status(sub {
my ($resp, $err) = @_;
$etcd_available = 1 if !$err;
EV::break;
});
my $t = EV::timer(3, 0, sub { EV::break });
EV::run;
};
plan skip_all => 'etcd not available on 127.0.0.1:2379' unless $etcd_available;
plan tests => 18;
my $client = EV::Etcd->new(
endpoints => ['127.0.0.1:2379'],
);
my $prefix = "/test-binary-$$-" . time();
# Test 1-3: UTF-8 key and value
{
my $utf8_key = "$prefix/utf8-\x{4e2d}\x{6587}"; # Chinese characters
my $utf8_value = "value-\x{65e5}\x{672c}\x{8a9e}"; # Japanese characters
my $put_ok = 0;
$client->put(encode_utf8($utf8_key), encode_utf8($utf8_value), sub {
my ($resp, $err) = @_;
$put_ok = !$err && $resp->{header};
EV::break;
});
my $t1 = EV::timer(5, 0, sub { EV::break });
EV::run;
ok($put_ok, 'put with UTF-8 key and value succeeded');
my $get_value;
$client->get(encode_utf8($utf8_key), sub {
my ($resp, $err) = @_;
if (!$err && $resp->{kvs} && @{$resp->{kvs}}) {
$get_value = $resp->{kvs}[0]{value};
}
EV::break;
});
my $t2 = EV::timer(5, 0, sub { EV::break });
EV::run;
ok(defined $get_value, 'get UTF-8 key succeeded');
is($get_value, encode_utf8($utf8_value), 'UTF-8 value round-trips correctly');
diag("UTF-8 test: stored and retrieved CJK characters");
}
# Test 4-6: Binary data with null bytes
{
my $binary_key = "$prefix/binary-key";
my $binary_value = "before\x00middle\x00after"; # Contains null bytes
my $put_ok = 0;
$client->put($binary_key, $binary_value, sub {
my ($resp, $err) = @_;
$put_ok = !$err && $resp->{header};
EV::break;
});
my $t3 = EV::timer(5, 0, sub { EV::break });
EV::run;
ok($put_ok, 'put with binary value (null bytes) succeeded');
my $get_value;
$client->get($binary_key, sub {
my ($resp, $err) = @_;
if (!$err && $resp->{kvs} && @{$resp->{kvs}}) {
$get_value = $resp->{kvs}[0]{value};
}
EV::break;
});
( run in 1.410 second using v1.01-cache-2.11-cpan-524268b4103 )