Current section

Files

Jump to
rocksdb test get_property.erl
Raw

test/get_property.erl

-module(get_property).
-compile([export_all/1]).
-include_lib("eunit/include/eunit.hrl").
-define(DB, "test_getproperty.db").
%% Test get_property/2 (default CF) works
default_cf_test() ->
destroy_and_rm(?DB, []),
{ok, Db} = rocksdb:open(?DB, [{create_if_missing, true}]),
ok = rocksdb:put(Db, <<"k1">>, <<"v1">>, []),
{ok, Val} = rocksdb:get_property(Db, <<"rocksdb.estimate-num-keys">>),
?assert(binary_to_integer(Val) >= 1),
rocksdb:close(Db),
destroy_and_rm(?DB, []),
ok.
%% Test get_property/3 returns correct per-CF count (the core bug)
cf_property_test() ->
destroy_and_rm(?DB, []),
CFs = [{"default", []}, {"data", []}],
{ok, Db, [DefaultH, DataH]} = rocksdb:open(?DB,
[{create_if_missing, true}, {create_missing_column_families, true}], CFs),
%% Write 5 keys to "data" CF, nothing to "default"
[ok = rocksdb:put(Db, DataH, <<"k", (N + $0)>>, <<"v">>, [])
|| N <- lists:seq(1, 5)],
ok = rocksdb:flush(Db, DataH, [{wait, true}]),
%% get_property/3 on "data" CF must reflect the 5 keys
{ok, DataCount} = rocksdb:get_property(Db, DataH, <<"rocksdb.estimate-num-keys">>),
?assert(binary_to_integer(DataCount) >= 5),
%% get_property/3 on "default" CF should be 0
{ok, DefaultCount} = rocksdb:get_property(Db, DefaultH, <<"rocksdb.estimate-num-keys">>),
?assertEqual(0, binary_to_integer(DefaultCount)),
rocksdb:close(Db),
destroy_and_rm(?DB, []),
ok.
destroy_and_rm(Dir, Options) ->
rocksdb:destroy(Dir, Options),
rocksdb_test_util:rm_rf(Dir).