use strict; use warnings; use Test::More; use Net::Riak; use YAML::Syck; BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } my $host = 'http://localhost:8098'; my $bucket_name = 'test4'; my $bucket_multi = 'multiBucket2'; # is alive { ok my $client = Net::Riak->new(), 'client created'; ok $client->is_alive, 'riak is alive'; } # store and get { ok my $client = Net::Riak->new(), 'client created'; ok my $bucket = $client->bucket($bucket_name), 'got bucket test'; my $content = [int(rand(100))]; ok my $obj = $bucket->new_object('foo', $content), 'created a new riak object'; ok $obj->store, 'store object foo'; is $obj->status, 200, 'valid status'; is $obj->key, 'foo', 'valid key'; is_deeply $obj->data, $content, 'valid content'; } # missing object { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->get("missing"); ok !$obj->data, 'no data'; } # delete object { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $content = [int(rand(100))]; my $obj = $bucket->new_object('foo', $content); ok $obj->store, 'object is stored'; $obj = $bucket->get('foo'); ok $obj->exists, 'object exists'; $obj->delete; $obj->load; ok !$obj->exists, "object don't exists anymore"; } # test set bucket properties { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); $bucket->allow_multiples(1); my $props = $bucket->get_properties; my $res = $bucket->allow_multiples; $bucket->n_val(3); is $bucket->n_val, 3, 'n_val is set to 3'; $bucket->set_properties({allow_mult => 0, "n_val" => 2}); $res = $bucket->allow_multiples; ok !$bucket->allow_multiples, "don't allow multiple anymore"; is $bucket->n_val, 2, 'n_val is set to 2'; } # test siblings { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_multi); $bucket->allow_multiples(1); ok $bucket->allow_multiples, 'multiples set to 1'; my $obj = $bucket->get('foo'); $obj->delete; for(1..5) { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_multi); $obj = $bucket->new_object('foo', [int(rand(100))]); $obj->store; } # check we got 5 siblings ok $obj->has_siblings, 'object has siblings'; $obj = $bucket->get('foo'); my $siblings_count = $obj->get_siblings; is $siblings_count, 5, 'got 5 siblings'; # test set/get my @siblings = $obj->siblings; my $obj3 = $obj->sibling(3); is_deeply $obj3->data, $obj->sibling(3)->data; $obj3 = $obj->sibling(3); $obj3->store; $obj->load; is_deeply $obj->data, $obj3->data; $obj->delete; } # test js source map { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object('foo', [2])->store; my $result = $client->add($bucket_name, 'foo') ->map("function (v) {return [JSON.parse(v.values[0].data)];}")->run; is_deeply $result, [[2]], 'got valid result'; } # XXX javascript named map # { # my $client = Net::Riak->new(); # my $bucket = $client->bucket($bucket_name); # my $obj = $bucket->new_object('foo', [2])->store; # my $result = $client->add("bucket", "foo")->map("Riak.mapValuesJson")->run; # use YAML; warn Dump $result; # is_deeply $result, [[2]], 'got valid result'; # } # javascript source map reduce { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object('foo', [2])->store; $obj = $bucket->new_object('bar', [3])->store; $bucket->new_object('baz', [4])->store; my $result = $client->add($bucket_name, "foo")->add($bucket_name, "bar") ->add($bucket_name, "baz")->map("function (v) { return [1]; }") ->reduce("function (v) { return [v.length]; }")->run; is $result->[0], 3, "success map reduce"; } # javascript named map reduce { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object("foo", [2])->store; $obj = $bucket->new_object("bar", [3])->store; $obj = $bucket->new_object("baz", [4])->store; my $result = $client->add($bucket_name, "foo")->add($bucket_name, "bar") ->add($bucket_name, "baz")->map("Riak.mapValuesJson") ->reduce("Riak.reduceSum")->run(); ok $result->[0]; } # javascript bucket map reduce { my $client = Net::Riak->new(); my $bucket = $client->bucket("bucket_".int(rand(10))); $bucket->new_object("foo", [2])->store; $bucket->new_object("bar", [3])->store; $bucket->new_object("baz", [4])->store; my $result = $client->add($bucket->name)->map("Riak.mapValuesJson") ->reduce("Riak.reduceSum")->run; ok $result->[0]; } # javascript map reduce from object { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); $bucket->new_object("foo", [2])->store; my $obj = $bucket->get("foo"); my $result = $obj->map("Riak.mapValuesJson")->run; is_deeply $result->[0], [2], 'valid content'; } # store and get links { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object("foo", [2]); my $obj1 = $bucket->new_object("foo1", {test => 1})->store; my $obj2 = $bucket->new_object("foo2", {test => 2})->store; my $obj3 = $bucket->new_object("foo3", {test => 3})->store; $obj->add_link($obj1); $obj->add_link($obj2, "tag"); $obj->add_link($obj3, "tag2!@&"); $obj->store; $obj = $bucket->get("foo"); my $count = $obj->count_links; is $count, 3, 'got 3 links'; } # link walking { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object("foo", [2]); my $obj1 = $bucket->new_object("foo1", {test => 1})->store; my $obj2 = $bucket->new_object("foo2", {test => 2})->store; my $obj3 = $bucket->new_object("foo3", {test => 3})->store; $obj->add_link($obj1)->add_link($obj2, "tag")->add_link($obj3, "tag2!@&"); $obj->store; $obj = $bucket->get("foo"); my $results = $obj->link($bucket_name)->run(); is scalar @$results, 3, 'got 3 links via links walking'; $results = $obj->link($bucket_name, 'tag')->run; is scalar @$results, 1, 'got one link via link walking'; } done_testing;