# tests for basic memcached_set & memcached_get
# documented in memcached_set.pod and memcached_get.pod
# test for the other functions are performed elsewhere
use strict;
use warnings;
use Test::More;
use Memcached::libmemcached
# functions explicitly tested by this file
qw(
memcached_set
memcached_get
),
# other functions used by the tests
qw(
memcached_errstr
memcached_version
MEMCACHED_NOTFOUND
);
use lib 't/lib';
use libmemcached_test;
my $memc = libmemcached_test_create();
plan tests => 14;
diag "Testing using memcached version ".memcached_version($memc);
my ($rv, $rc, $flags, $tmp);
my $t1= time();
my $k1= "$0-test-key-$t1"; # can't have spaces
my $v1= "$0 test value $t1";
# get (presumably non-existant) key
is scalar memcached_get($memc, $k1, $flags=0, $rc=0), undef,
'should not exist yet and so should return undef';
# test set with expiry and flags
ok memcached_set($memc, $k1, $v1, 1, 0xDEADCAFE);
is memcached_errstr($memc), 'SUCCESS';
is memcached_get($memc, $k1, $flags=0, $rc=0), $v1;
ok $rc;
if ($flags == 0xCAFE) {
warn "You're limited to 16 bit flags\n";
$flags = 0xDEADCAFE;
}
if ($flags == 0 && not libmemcached_version_ge($memc, "1.2.4")) {
warn "You're old memcached version doesn't support flags!\n";
$flags = 0xDEADCAFE;
}
is sprintf("0x%X",$flags), '0xDEADCAFE', 'flags should be unchanged';
sleep 1;
ok not defined memcached_get($memc, $k1, $flags=0, $rc=0);
ok !$rc;
cmp_ok memcached_errstr($memc), '==', MEMCACHED_NOTFOUND();
# repeat for value with a null byte to check value_length works
my $smiley = "\x{263A}";
ok memcached_set($memc, $k1, $tmp = $smiley);
is length $tmp, length $smiley, 'utf8 arg length should not be altered';
is $tmp, $smiley, 'utf8 arg should not be altered';
$tmp = memcached_get($memc, $k1, $flags, $rc=0);
ok $rc;
{
local $TODO = "support utf8";
# XXX is $tmp, $smiley;
pass "no inbuilt utf8 support\n";
}