Couchbase
view release on metacpan or search on metacpan
lib/Couchbase/Test/ClientSync.pm view on Meta::CPAN
multi_ok(\@docs, "Multi upsert OK");
$batch = $o->batch();
map {$batch->get($_)} @docs;
$batch->wait_all();
multi_ok(\@docs, "Multi get OK");
is(scalar grep($_->value eq $_->id, @docs), scalar @docs, "get_multi: Got expected values");
$batch = $o->batch();
map{$batch->remove($_)} @docs;
$batch->wait_all();
multi_ok(\@docs, "Multi remove OK");
}
sub T07_stats :Test(no_plan) {
my $self = shift;
my $o = $self->cbo;
my $rv = $o->stats();
ok($rv->is_ok);
my $stats = $rv->value;
ok($stats && ref $stats eq 'HASH', "Got a hashref");
ok(scalar keys %$stats, "stats not empty");
if($self->mock && $self->mock->nodes) {
ok(scalar keys %$stats == $self->mock->nodes, "Got expected stat count");
} else {
diag "Cannot determine expected stat count for real cluster";
}
}
sub T08_iterator :Test(no_plan) {
my $self = shift;
my $o = $self->cbo;
my @docs = map { Couchbase::Document->new("T08_NonExistent_$_") } (1..200);
my $batch = $o->batch;
map {$batch->get($_)} @docs;
my %khash = ();
while ((my $doc = $batch->wait_one)) {
if (exists $khash{$doc->id}) {
fail("Document returned twice!");
}
if (!$doc->is_not_found) {
fail("Expected NOT_FOUND");
}
$khash{$doc->id} = 1;
}
is(200, scalar values %khash)
}
sub T10_locks :Test(no_plan) {
my $self = shift;
my $o = $self->cbo;
my $doc = Couchbase::Document->new("GETL", "value");
$o->remove($doc); # Ensure it's gone
$o->insert($doc);
ok($o->get_and_lock($doc, {lock_duration=>10}), "Locked OK");
ok($o->unlock($doc), "Unlocked OK");
#ok($o->unlock($doc), "Unlock again fails");
#
#print Dumper($doc);
#
#is(COUCHBASE_ETMPFAIL, $doc->errnum, "Temporary failure returned for re-locking");
# Unlock while locked, but with bad CAS
my $doc2 = $doc->copy();
ok($o->get_and_lock($doc2, {lock_duration=>10}));
$doc->_cas(0xdeadbeef);
ok((!$o->unlock($doc)), "Can't unlock with stale CAS");
ok($o->unlock($doc2), "Unlock with good CAS ok");
# Lock without a timeout (should fail)
eval { $o->get_and_lock($doc) };
ok($@, "Can't lock without explicit duration");
eval { $o->unlock(Couchbase::Document->new("dummy"))};
ok($@, "Can't unlock with no CAS");
$o->get_and_lock($doc, {lock_duration=>5});
ok($o->upsert($doc), "Implicit unlock with CAS ok");
$o->remove($doc); # Clean up
}
sub wait_for_exp {
my ($o,$doc,$limit) = @_;
my $begin_time = time();
while (time() - $begin_time < $limit) {
sleep(1);
$o->get($doc);
if ($doc->errnum == COUCHBASE_KEY_ENOENT) {
return 1;
}
diag("Sleeping again..");
}
return 0;
}
sub T11_expiry :Test(no_plan) {
my $self = shift;
my $o = $self->cbo;
my $doc = Couchbase::Document->new("exp_key", "exp_val", {expiry=>1});
ok($o->upsert($doc), "Inserted document with expiry");
ok(wait_for_exp($o, $doc, 3), "Document is no longer here (expired!)");
$doc->expiry("bad-expiry");
eval { $o->upsert($doc) };
ok($@, "Set with bad expiry raises error ($@)");
$doc->expiry(-1);
eval { $o->upsert($doc) };
ok($@, "Set with negative expiry raises error ($@)");
# Restore the expiry:
$doc->expiry(1);
}
sub T12_observe :Test(no_plan) {
my $self = shift;
my $cb = $self->cbo;
my $doc = Couchbase::Document->new("Hello", "World");
$cb->upsert($doc);
my $obsret = $cb->observe($doc);
my @m = grep { $_->{master} } @{$obsret->value};
( run in 0.440 second using v1.01-cache-2.11-cpan-483215c6ad5 )