blob: 3ce6a1a8772582070f29b3674d106387bfe23185 [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>>.