use strict;
use warnings;
BEGIN {
unless ( $ENV{RIAK_PBC_HOST} ) {
require Test::More;
Test::More::plan(
skip_all => 'variable RIAK_PBC_HOST is not defined' );
}
}
use Test::More;
use Test::Exception;
use AnyEvent::Riak;
plan tests => 2;
my ( $host, $port ) = split ':', $ENV{RIAK_PBC_HOST};
my @buckets_to_cleanup = ( qw(foo) );
subtest "connection" => sub {
plan tests => 2;
my $cv1 = AE::cv;
my $client = AnyEvent::Riak->new(
host => $host,
port => $port,
on_connect => sub { pass("client connected"); $cv1->send },
on_connect_error => sub { fail("client not connected"); $cv1->croak($_[1])},
);
$cv1->recv;
ok($client, "client created");
};
subtest "simple get/set/delete test" => sub {
plan tests => 1;
my $cv1 = AE::cv;
my $client = AnyEvent::Riak->new(
host => $host,
port => $port,
on_connect => sub { $cv1->send },
on_connect_error => sub { $cv1->croak($_[1]) },
);
$cv1->recv;
my $scalar = '3.14159';
# make sure we run stuff with callbacks as well
my $cv2 = AE::cv;
$client->put({ bucket => 'bucket_name',
key => 'bar',
return_body => 1,
content => { value => "plop", content_type => 'text/plain' } },
sub {
my ($result, $err) = @_;
$err and $cv2->croak($err->{error_message});
$cv2->send;
ok("put plop");
} );
$cv2->recv();
# is($client->get( foo => 'bar' ), $hash, "fetch hashref" );
# ok( $client->put_raw( foo => "bar2" , $scalar ), "store raw scalar");
# is( $client->get_raw( foo => 'bar2' ), $scalar, "fetch raw scalar");
# ok( $client->exists( foo => 'bar' ), "should exists" );
# ok( $client->del( foo => 'bar' ), "delete hashref" );
# ok( !$client->get( foo => 'bar' ), "fetches nothing" );
# ok( !$client->exists( foo => 'bar' ), "should not exists" );
# ok( $client->put( foo => "baz", 'TEXT', 'plain/text' ),
# "should store the text in Riak"
# );
# is( $client->get( foo => "baz" ), 'TEXT',
# "should fetch the text from Riak"
# );
# #ok(!$@, "should has no error - foo => bar is undefined");
};
# subtest "get keys" => sub {
# plan tests => 5;
# my $bucket = "foo_" . int( rand(1024) ) . "_" . int( rand(1024) );
# push @buckets_to_cleanup, $bucket;
# my ( $host, $port ) = split ':', $ENV{RIAK_PBC_HOST};
# my $client = Riak::Client->new(
# host => $host, port => $port,
# );
# my @keys;
# $client->get_keys( $bucket => sub { push @keys, $_[0] } );
# foreach my $key (@keys) {
# $client->del( $bucket => $key );
# }
# my $hash = { a => 1 };
# $client->put( $bucket => "bar", $hash );
# $client->put( $bucket => "baz", $hash );
# $client->put( $bucket => "bam", $hash );
# @keys = ();
# $client->get_keys( $bucket => sub { push @keys, $_[0] } );
# my @keys_without_callback = @{ $client->get_keys( $bucket ) // [] };
# @keys = sort @keys;
# is( scalar @keys, 3 );
# is( scalar @keys_without_callback, 3 );
# is( $keys[0], 'bam' );
# is( $keys[1], 'bar' );
# is( $keys[2], 'baz' );
# };
# my $nb = 10;
# subtest "sequence of $nb get/set" => sub {
# plan tests => $nb;
# my ( $host, $port ) = split ':', $ENV{RIAK_PBC_HOST};
# my $client = Riak::Client->new(
# host => $host, port => $port,
# );
# my $hash = {
# foo => bar => baz => 123,
# something => very => complex => [ 1, 2, 3, 4, 5 ]
# };
# my ( $bucket, $key );
# for ( 1 .. $nb ) {
# ( $bucket, $key ) =
# ( "bucket" . int( rand(1024) ), "key" . int( rand(1024) ) );
# push @buckets_to_cleanup, $bucket;
# $hash->{random} = int( rand(1024) );
# $client->put( $bucket => $key => $hash );
# my $got_complex_structure = $client->get( $bucket => $key );
# is_deeply(
# $got_complex_structure, $hash,
# "get($bucket=>$key)should got the same structure"
# );
# }
# };
# subtest "get buckets" => sub {
# plan tests => 4;
# my ( $host, $port ) = split ':', $ENV{RIAK_PBC_HOST};
# my $client = Riak::Client->new(
# host => $host, port => $port,
# );
# my @new_buckets = (
# "foo_" . int( rand(1024) ) . "_" . int( rand(1024) ),
# "foo_" . int( rand(1024) ) . "_" . int( rand(1024) ),
# "foo_" . int( rand(1024) ) . "_" . int( rand(1024) ),
# );
# push @buckets_to_cleanup, @new_buckets;
# my @exp_buckets = ( @{ $client->get_buckets() // [] }, @new_buckets);
# my $key = "key" . int( rand(1024) );
# my $hash = { a => 1 };
# $client->put( $_ => $key => $hash ) foreach (@new_buckets);
# my @buckets = @{ $client->get_buckets() // [] };
# is( scalar @buckets, scalar @exp_buckets );
# foreach my $bucket (@new_buckets) {
# is(grep( $bucket eq $_, @buckets), 1, "bucket $bucket is found");
# }
# };
# subtest "get/set buckets props" => sub {
# plan tests => 4;
# my ( $host, $port ) = split ':', $ENV{RIAK_PBC_HOST};
# my $client = Riak::Client->new(
# host => $host, port => $port,
# );
# my @buckets = (
# "foo_" . int( rand(1024) ) . "_" . int( rand(1024) ),
# "foo_" . int( rand(1024) ) . "_" . int( rand(1024) ),
# "foo_" . int( rand(1024) ) . "_" . int( rand(1024) ),
# );
# push @buckets_to_cleanup, @buckets;
# my $key = "key" . int( rand(1024) );
# my $hash = { a => 1 };
# my $exp_props = { n_val => 1, allow_mult => 0 };
# foreach (@buckets) {
# $client->put( $_ => $key => $hash );
# $client->set_bucket_props($_, $exp_props);
# }
# my @props = map { $client->get_bucket_props($_) } @buckets;
# is( scalar @props, scalar @buckets);
# is_deeply($_, $exp_props, "wrong props structure") foreach (@props);
# };
# END {
# diag "\ncleaning up...";
# my $client = Riak::Client->new(
# host => $host, port => $port,
# );
# my $another_client = Riak::Client->new(
# host => $host, port => $port,
# );
# my $c = 0;
# foreach my $bucket (@buckets_to_cleanup) {
# $client->get_keys($bucket => sub{
# my $key = $_; # also in $_[0]
# # { local $| = 1; print "."; }
# $c++;
# $another_client->del($bucket => $key);
# });
# }
# diag "done (deleted $c keys).";
# }