Packages
rocksdb
0.21.0
3.1.2
3.1.1
3.1.0
3.0.0
2.6.2
2.6.1
retired
2.6.0
retired
2.5.0
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.1
1.1.0
1.0.0
0.26.2
0.26.1
0.26.0
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
RocksDB for Erlang
Current section
Files
Jump to
Current section
Files
test/db.erl
%% Copyright (c) 2016-2018 Benoît Chesneau.
%%
%% This file is provided to you 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(db).
-include_lib("eunit/include/eunit.hrl").
open_test() -> [{open_test_Z(), l} || l <- lists:seq(1, 20)].
open_test_Z() ->
os:cmd("rm -rf /tmp/erocksdb.open.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.open.test", [{create_if_missing, true}]),
true = rocksdb:is_empty(Ref),
ok = rocksdb:put(Ref, <<"abc">>, <<"123">>, []),
false = rocksdb:is_empty(Ref),
{ok, <<"123">>} = rocksdb:get(Ref, <<"abc">>, []),
{ok, 1} = rocksdb:count(Ref),
not_found = rocksdb:get(Ref, <<"def">>, []),
ok = rocksdb:delete(Ref, <<"abc">>, []),
not_found = rocksdb:get(Ref, <<"abc">>, []),
ok = rocksdb:put(Ref, <<"abc">>, <<"123">>, []),
{ok, <<"123">>} = rocksdb:get(Ref, <<"abc">>, []),
ok = rocksdb:single_delete(Ref, <<"abc">>, []),
not_found = rocksdb:get(Ref, <<"abc">>, []),
true = rocksdb:is_empty(Ref).
open_with_snappy_test() ->
os:cmd("rm -rf /tmp/erocksdb.snapppy.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.snapppy.test", [{create_if_missing, true}, {compression, snappy}]),
ok = rocksdb:close(Ref),
rocksdb:destroy("/tmp/erocksdb.snapppy.test", []),
ok.
open_with_optimize_filters_for_hits_test() ->
os:cmd("rm -rf /tmp/erocksdb.optimize_filters_for_hits.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.optimize_filters_for_hits.test", [{create_if_missing, true}, {optimize_filters_for_hits, true}]),
ok = rocksdb:close(Ref),
rocksdb:destroy("/tmp/erocksdb.optimize_filters_for_hits.test", []),
ok.
open_new_table_reader_for_compaction_inputs_test() ->
os:cmd("rm -rf /tmp/erocksdb.new_table_reader_for_compaction_inputs.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.new_table_reader_for_compaction_inputs.test",
[{create_if_missing, true}, {new_table_reader_for_compaction_inputs, true}]),
ok = rocksdb:close(Ref),
rocksdb:destroy("/tmp/erocksdb.new_table_reader_for_compaction_inputs.test", []),
ok.
open_with_lz4_test() ->
os:cmd("rm -rf /tmp/erocksdb.lz4.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.lz4.test", [{create_if_missing, true}, {compression, lz4}]),
ok = rocksdb:close(Ref),
rocksdb:destroy("/tmp/erocksdb.lz4.test", []),
ok.
fold_test() -> [{fold_test_Z(), l} || l <- lists:seq(1, 20)].
fold_test_Z() ->
os:cmd("rm -rf /tmp/erocksdb.fold.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.fold.test", [{create_if_missing, true}]),
ok = rocksdb:put(Ref, <<"def">>, <<"456">>, []),
ok = rocksdb:put(Ref, <<"abc">>, <<"123">>, []),
ok = rocksdb:put(Ref, <<"hij">>, <<"789">>, []),
[{<<"abc">>, <<"123">>},
{<<"def">>, <<"456">>},
{<<"hij">>, <<"789">>}] = lists:reverse(rocksdb:fold(Ref,
fun({K, V}, Acc) ->
[{K, V} | Acc]
end,
[], [])).
fold_keys_test() -> [{fold_keys_test_Z(), l} || l <- lists:seq(1, 20)].
fold_keys_test_Z() ->
os:cmd("rm -rf /tmp/erocksdb.fold.keys.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.fold.keys.test", [{create_if_missing, true}]),
ok = rocksdb:put(Ref, <<"def">>, <<"456">>, []),
ok = rocksdb:put(Ref, <<"abc">>, <<"123">>, []),
ok = rocksdb:put(Ref, <<"hij">>, <<"789">>, []),
[<<"abc">>, <<"def">>, <<"hij">>] = lists:reverse(rocksdb:fold_keys(Ref,
fun(K, Acc) -> [K | Acc] end,
[], [])).
destroy_test() -> [{destroy_test_Z(), l} || l <- lists:seq(1, 20)].
destroy_test_Z() ->
os:cmd("rm -rf /tmp/erocksdb.destroy.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.destroy.test", [{create_if_missing, true}]),
ok = rocksdb:put(Ref, <<"def">>, <<"456">>, []),
{ok, <<"456">>} = rocksdb:get(Ref, <<"def">>, []),
rocksdb:close(Ref),
ok = rocksdb:destroy("/tmp/erocksdb.destroy.test", []),
{error, {db_open, _}} = rocksdb:open("/tmp/erocksdb.destroy.test", [{error_if_exists, true}]).
compression_test() -> [{compression_test_Z(), l} || l <- lists:seq(1, 20)].
compression_test_Z() ->
CompressibleData = list_to_binary([0 || _X <- lists:seq(1,20)]),
os:cmd("rm -rf /tmp/erocksdb.compress.0 /tmp/erocksdb.compress.1"),
{ok, Ref0} = rocksdb:open("/tmp/erocksdb.compress.0", [{create_if_missing, true}, {compression, none}]),
[ok = rocksdb:put(Ref0, <<I:64/unsigned>>, CompressibleData, [{sync, true}]) ||
I <- lists:seq(1,10)],
{ok, Ref1} = rocksdb:open("/tmp/erocksdb.compress.1", [{create_if_missing, true}, {compression, snappy}]),
[ok = rocksdb:put(Ref1, <<I:64/unsigned>>, CompressibleData, [{sync, true}]) ||
I <- lists:seq(1,10)],
%% Check both of the LOG files created to see if the compression option was correctly
%% passed down
MatchCompressOption =
fun(File, Expected) ->
{ok, Contents} = file:read_file(File),
case re:run(Contents, "Options.compression: " ++ Expected) of
{match, _} -> match;
nomatch -> nomatch
end
end,
Log0Option = MatchCompressOption("/tmp/erocksdb.compress.0/LOG", "0"),
Log1Option = MatchCompressOption("/tmp/erocksdb.compress.1/LOG", "1"),
?assert(Log0Option =:= match andalso Log1Option =:= match).
close_test() -> [{close_test_Z(), l} || l <- lists:seq(1, 20)].
close_test_Z() ->
os:cmd("rm -rf /tmp/erocksdb.close.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.close.test", [{create_if_missing, true}], []),
?assertEqual(ok, rocksdb:close(Ref)),
?assertEqual({error, einval}, rocksdb:close(Ref)).
close_fold_test() -> [{close_fold_test_Z(), l} || l <- lists:seq(1, 20)].
close_fold_test_Z() ->
os:cmd("rm -rf /tmp/erocksdb.close_fold.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.close_fold.test", [{create_if_missing, true}], []),
ok = rocksdb:put(Ref, <<"k">>,<<"v">>,[]),
?assertException(throw, {iterator_closed, ok}, % ok is returned by close as the acc
rocksdb:fold(Ref, fun(_,_A) -> rocksdb:close(Ref) end, undefined, [])).
fixed_prefix_extractor_test() ->
os:cmd("rm -rf /tmp/erocksdb.fixed_prefix_extractor.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.fixed_prefix_extractor.test", [{create_if_missing, true}, {prefix_extractor,
{fixed_prefix_transform, 1}}]),
ok = rocksdb:put(Ref, <<"k1">>, <<"v1">>, []),
ok = rocksdb:put(Ref, <<"k2">>, <<"v2">>, []),
[<<"k1">>, <<"k2">>] = lists:reverse(rocksdb:fold_keys(Ref,
fun(K, Acc) -> [K | Acc] end,
[], [])),
ok = rocksdb:close(Ref),
rocksdb:destroy("/tmp/erocksdb.fixed_prefix_extractor.test", []),
ok.
capped_prefix_extractor_test() ->
os:cmd("rm -rf /tmp/erocksdb.capped_prefix_extractor.test"),
{ok, Ref} = rocksdb:open("/tmp/erocksdb.capped_prefix_extractor.test", [{create_if_missing, true}, {prefix_extractor,
{capped_prefix_transform, 1}}]),
ok = rocksdb:put(Ref, <<"k1">>, <<"v1">>, []),
ok = rocksdb:put(Ref, <<"k2">>, <<"v2">>, []),
[<<"k1">>, <<"k2">>] = lists:reverse(rocksdb:fold_keys(Ref,
fun(K, Acc) -> [K | Acc] end,
[], [])),
ok = rocksdb:close(Ref),
rocksdb:destroy("/tmp/erocksdb.capped_prefix_extractor.test", []),
ok.