use strict; use warnings; use Test::More; use Net::Riak; use YAML::Syck; my $host = 'http://localhost:8098'; my $bucket_name = 'test4'; my $bucket_multi = 'multiBucket1'; # 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; } # test set bucket properties { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); $bucket->allow_multiples('True'); 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 => "False", "n_val" => 2}); ok !$bucket->allow_multiples; 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); my $rand = int(rand(100)); $obj = $bucket->new_object('foo', [$rand]); $obj->store; } # my $siblings_count = $obj->get_siblings; # is $siblings_count, 5, 'got 5 siblings'; # my $obj3 = $obj->sibling(3); # XXX FIXME # $obj3 = $obj3->sibling(3); # $obj3->store; # $obj->reload; # is_deeply $obj3->data, $obj->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]); $obj->store; my $map_reduce = $client->add($bucket_name, 'foo'); $map_reduce->map("function (v) {return [JSON.parse(v.values[0].data)];}"); my $result = $map_reduce->run(); is_deeply $result, [[2]], 'got valid result'; } # javascript named map { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object('foo', [2]); my $map_reduce = $client->add("bucket", "foo"); $map_reduce->map("Riak.mapValuesJson"); my $result = $map_reduce->run; use YAML::Syck; warn Dump $result; } # javascript source map reduce { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object('foo', [2]); $obj->store; $obj = $bucket->new_object('bar', [3]); $obj->store; $bucket->new_object('baz', [4]); $obj->store; my $map_reduce = $client->add($bucket_name, "foo"); $map_reduce->add($bucket_name, "bar"); $map_reduce->add($bucket_name, "baz"); $map_reduce->map("function (v) { return [1]; }"); $map_reduce->reduce("function (v) { return [v.length]; }"); my $result = $map_reduce->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]); $obj->store; $obj = $bucket->new_object("bar", [3]); $obj->store; $obj = $bucket->new_object("baz", [4]); $obj->store; my $map_reduce = $client->add($bucket_name, "foo"); $map_reduce->add($bucket_name, "bar"); $map_reduce->add($bucket_name, "baz"); $map_reduce->map("Riak.mapValuesJson"); $map_reduce->reduce("Riak.reduceSum"); my $result = $map_reduce->run(); # is $result->[0], 243; # ???? } # javascript bucket map reduce { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object("foo", [2]); $obj->store; $obj = $bucket->new_object("bar", [3]); $obj->store; $obj = $bucket->new_object("baz", [4]); $obj->store; my $map_reduce = $client->add($bucket->name); $map_reduce->map("Riak.mapValuesJson"); $map_reduce->reduce("Riak.reduceSum"); my $result = $map_reduce->run; ok 1, "ici"; # is $result->[0], 243; } # javascript map reduce from object { my $client = Net::Riak->new(); my $bucket = $client->bucket($bucket_name); my $obj = $bucket->new_object("foo", [2]); $obj->store; $obj = $bucket->get("foo"); my $map_reduce = $obj->map("Riak.mapValuesJson"); my $result = $map_reduce->run(); is_deeply $result->[0], [2]; } # 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}); $obj1->store; my $obj2 = $bucket->new_object("foo2", {test => 2}); $obj2->store; my $obj3 = $bucket->new_object("foo3", {test => 3}); $obj3->store; $obj->add_link($obj1); $obj->add_link($obj2, "tag"); $obj->add_link($obj3, "tag2!@&"); $obj->store; $obj = $bucket->get("foo"); my $mr = $obj->link("bucket"); my $results = $mr->run(); # XXX fixme !! use YAML::Syck; warn Dump $results; } # 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}); $obj1->store; my $obj2 = $bucket->new_object("foo2", {test => 2}); $obj2->store; my $obj3 = $bucket->new_object("foo3", {test => 3}); $obj3->store; $obj->add_link($obj1); $obj->add_link($obj2, "tag"); $obj->add_link($obj3, "tag2!@&"); $obj->store; $obj = $bucket->get("foo"); my $mr = $obj->link("bucket"); my $results = $mr->run(); use YAML::Syck; warn Dump $results; } done_testing;