blob: 106695c9eac2fe7f7aeffedb937a8c5bbfb1f4b9 [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(erlfdb_03_transaction_options_test).
-include_lib("eunit/include/eunit.hrl").
get_approximate_tx_size_test() ->
Db1 = erlfdb_util:get_test_db(),
erlfdb:transactional(Db1, fun(Tx) ->
ok = erlfdb:set(Tx, gen(10), gen(5000)),
TxSize1 = erlfdb:wait(erlfdb:get_approximate_size(Tx)),
?assert(TxSize1 > 5000 andalso TxSize1 < 6000),
ok = erlfdb:set(Tx, gen(10), gen(5000)),
TxSize2 = erlfdb:wait(erlfdb:get_approximate_size(Tx)),
?assert(TxSize2 > 10000)
end).
size_limit_test() ->
Db1 = erlfdb_util:get_test_db(),
?assertError({erlfdb_error, 2101}, erlfdb:transactional(Db1, fun(Tx) ->
erlfdb:set_option(Tx, size_limit, 10000),
erlfdb:set(Tx, gen(10), gen(11000))
end)).
writes_allowed_test() ->
Db1 = erlfdb_util:get_test_db(),
?assertError(writes_not_allowed, erlfdb:transactional(Db1, fun(Tx) ->
?assert(erlfdb:get_writes_allowed(Tx)),
erlfdb:set_option(Tx, disallow_writes),
?assert(not erlfdb:get_writes_allowed(Tx)),
erlfdb:set_option(Tx, allow_writes),
?assert(erlfdb:get_writes_allowed(Tx)),
erlfdb:set_option(Tx, disallow_writes),
erlfdb:set(Tx, gen(10), gen(10))
end)).
once_writes_happend_cannot_disallow_them_test() ->
Db1 = erlfdb_util:get_test_db(),
?assertError(badarg, erlfdb:transactional(Db1, fun(Tx) ->
ok = erlfdb:set(Tx, gen(10), gen(10)),
erlfdb:set_option(Tx, disallow_writes)
end)).
has_watches_test() ->
Db1 = erlfdb_util:get_test_db(),
{Before, After, AfterReset} = (erlfdb:transactional(Db1, fun(Tx) ->
Before = erlfdb:has_watches(Tx),
erlfdb:watch(Tx, gen(10)),
After = erlfdb:has_watches(Tx),
erlfdb:reset(Tx),
AfterReset = erlfdb:has_watches(Tx),
{Before, After, AfterReset}
end)),
?assert(not Before),
?assert(After),
?assert(not AfterReset).
cannot_set_watches_if_writes_disallowed_test() ->
Db1 = erlfdb_util:get_test_db(),
?assertError(writes_not_allowed, erlfdb:transactional(Db1, fun(Tx) ->
erlfdb:set_option(Tx, disallow_writes),
erlfdb:watch(Tx, gen(10))
end)).
size_limit_on_db_handle_test() ->
Db1 = erlfdb_util:get_test_db(),
erlfdb:set_option(Db1, size_limit, 10000),
?assertError({erlfdb_error, 2101}, erlfdb:transactional(Db1, fun(Tx) ->
erlfdb:set(Tx, gen(10), gen(11000))
end)).
gen(Size) when is_integer(Size), Size > 1 ->
RandBin = crypto:strong_rand_bytes(Size - 1),
<<0, RandBin/binary>>.