2008-12-12 17:14:03 +00:00
|
|
|
%% -------------------------------------------------------------------
|
|
|
|
%%
|
|
|
|
%% bdberl: DB API Tests
|
|
|
|
%% Copyright (c) 2008 The Hive. All rights reserved.
|
|
|
|
%%
|
|
|
|
%% -------------------------------------------------------------------
|
2008-12-12 18:39:51 +00:00
|
|
|
-module(bdberl_SUITE).
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
-compile(export_all).
|
|
|
|
|
|
|
|
-include_lib("ct.hrl").
|
|
|
|
|
|
|
|
all() ->
|
|
|
|
[open_should_create_database_if_none_exists,
|
|
|
|
get_should_fail_when_getting_a_nonexistant_record,
|
|
|
|
get_should_return_a_value_when_getting_a_valid_record,
|
|
|
|
transaction_should_commit_on_success,
|
|
|
|
transaction_should_abort_on_exception,
|
|
|
|
transaction_should_abort_on_user_abort,
|
|
|
|
update_should_save_value_if_successful].
|
|
|
|
|
|
|
|
|
|
|
|
init_per_testcase(_TestCase, Config) ->
|
2008-12-12 18:39:51 +00:00
|
|
|
{ok, Db} = bdberl:open("api_test.db", btree, [create, exclusive]),
|
|
|
|
[{db, Db}|Config].
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
end_per_testcase(_TestCase, Config) ->
|
2008-12-12 18:39:51 +00:00
|
|
|
ok = bdberl:close(?config(db, Config)),
|
2008-12-12 17:14:03 +00:00
|
|
|
ok = file:delete("api_test.db").
|
|
|
|
|
|
|
|
|
|
|
|
open_should_create_database_if_none_exists(_Config) ->
|
|
|
|
true = filelib:is_file("api_test.db").
|
|
|
|
|
|
|
|
get_should_fail_when_getting_a_nonexistant_record(Config) ->
|
2008-12-12 18:39:51 +00:00
|
|
|
not_found = bdberl:get(?config(db, Config), bad_key).
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
get_should_return_a_value_when_getting_a_valid_record(Config) ->
|
|
|
|
Db = ?config(db, Config),
|
2008-12-12 18:39:51 +00:00
|
|
|
ok = bdberl:put(Db, mykey, avalue),
|
|
|
|
{ok, avalue} = bdberl:get(Db, mykey).
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
transaction_should_commit_on_success(Config) ->
|
|
|
|
Db = ?config(db, Config),
|
2008-12-12 18:39:51 +00:00
|
|
|
F = fun() -> bdberl:put(Db, mykey, avalue) end,
|
|
|
|
{ok, ok} = bdberl:transaction(F),
|
|
|
|
{ok, avalue} = bdberl:get(Db, mykey).
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
transaction_should_abort_on_exception(Config) ->
|
|
|
|
Db = ?config(db, Config),
|
|
|
|
|
|
|
|
F = fun() ->
|
2008-12-12 18:39:51 +00:00
|
|
|
bdberl:put(Db, mykey, should_not_see_this),
|
2008-12-12 17:14:03 +00:00
|
|
|
throw(testing)
|
|
|
|
end,
|
|
|
|
|
2008-12-12 18:39:51 +00:00
|
|
|
{error, {transaction_failed, testing}} = bdberl:transaction(F),
|
|
|
|
not_found = bdberl:get(Db, mykey).
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
transaction_should_abort_on_user_abort(Config) ->
|
|
|
|
Db = ?config(db, Config),
|
|
|
|
|
|
|
|
F = fun() ->
|
2008-12-12 18:39:51 +00:00
|
|
|
bdberl:put(Db, mykey, should_not_see_this),
|
2008-12-12 17:14:03 +00:00
|
|
|
abort
|
|
|
|
end,
|
|
|
|
|
2008-12-12 18:39:51 +00:00
|
|
|
{error, transaction_aborted} = bdberl:transaction(F),
|
|
|
|
not_found = bdberl:get(Db, mykey).
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
update_should_save_value_if_successful(Config) ->
|
|
|
|
Db = ?config(db, Config),
|
2008-12-12 18:39:51 +00:00
|
|
|
ok = bdberl:put(Db, mykey, avalue),
|
2008-12-12 17:14:03 +00:00
|
|
|
|
|
|
|
F = fun(Key, Value) ->
|
|
|
|
mykey = Key,
|
|
|
|
avalue = Value,
|
|
|
|
newvalue
|
|
|
|
end,
|
|
|
|
|
2008-12-12 18:39:51 +00:00
|
|
|
{ok, newvalue} = bdberl:update(Db, mykey, F),
|
|
|
|
{ok, newvalue} = bdberl:get(Db, mykey).
|
2008-12-12 17:14:03 +00:00
|
|
|
|