Skip to content

Commit

Permalink
Add test to check persistence of disc_copies table when converting fr…
Browse files Browse the repository at this point in the history
…om ext
  • Loading branch information
Mikaka27 committed Sep 18, 2024
1 parent 1e513c8 commit 4b8ea2d
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 3 deletions.
3 changes: 2 additions & 1 deletion lib/mnesia/test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ MODULES= \
mnesia_cost \
mnesia_dbn_meters \
ext_test \
mnesia_index_plugin_test
mnesia_index_plugin_test \
mnesia_external_backend_test

DocExamplesDir := ../doc/src/

Expand Down
5 changes: 3 additions & 2 deletions lib/mnesia/test/mnesia_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]}].

all() ->
[app, appup, {group, light}, {group, medium}, {group, heavy},
clean_up_suite].
clean_up_suite, {group, external}].

groups() ->
%% The 'light' test suite runs a selected set of test suites and is
Expand Down Expand Up @@ -123,7 +123,8 @@ groups() ->
{mnesia_dirty_access_test,
dirty_index_update_set_disc_only},
{mnesia_evil_coverage_test,
create_live_table_index_disc_only}]}].
create_live_table_index_disc_only}]},
{external, [], [{mnesia_external_backend_test, all}]}].

init_per_group(_GroupName, Config) ->
Config.
Expand Down
79 changes: 79 additions & 0 deletions lib/mnesia/test/mnesia_external_backend_test.erl
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
-module(mnesia_external_backend_test).

-export([init_per_testcase/2, end_per_testcase/2,
init_per_group/2, end_per_group/2,
suite/0, all/0, groups/0]).

-export([conversion_from_external_to_disc_copies_results_in_data_loss_after_node_restart/1]).

-include("mnesia_test_lib.hrl").

-record(some_rec, {some_id :: atom(), some_int :: number(), some_string :: string()}).

-define(acquire(N, Config),
mnesia_test_lib:prepare_test_case([{init_test_case, [mnesia]},
delete_schema],
N, Config, ?FILE, ?LINE)).

all() ->
[conversion_from_external_to_disc_copies_results_in_data_loss_after_node_restart].

groups() ->
[].

init_per_testcase(Func, Conf) ->
mnesia_test_lib:init_per_testcase(Func, Conf).

end_per_testcase(Func, Conf) ->
mnesia_test_lib:end_per_testcase(Func, Conf).

init_per_group(_GroupName, Config) ->
Config.

end_per_group(_GroupName, Config) ->
Config.

suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,1}]}]}].

conversion_from_external_to_disc_copies_results_in_data_loss_after_node_restart(Config) when is_list(Config) ->
Node = node(),
Data = [
#some_rec{some_id = a, some_int = 1, some_string = "something" },
#some_rec{some_id = b, some_int = 2, some_string = "anything" },
#some_rec{some_id = c, some_int = 3, some_string = "everything"},
#some_rec{some_id = d, some_int = 4, some_string = "nothing" }
],

[Node] = ?acquire(1, Config),
ok = mnesia:create_schema([Node]),
ok = mnesia:start(),
{atomic, ok} = mnesia:add_backend_type(ext_ets, ext_test),
{atomic, ok} = mnesia:add_backend_type(ext_dets, ext_test),
{atomic, ok} = mnesia:create_table(table, [
{type, ordered_set},
{record_name, some_rec},
{attributes, record_info(fields, some_rec)},
{disc_copies, [Node]}
]),

ok = mnesia:activity(transaction, fun() ->
lists:foreach(fun(Elem) -> mnesia:write(table, Elem, write) end, Data)
end),

{atomic, ok} = mnesia:change_table_copy_type(table, Node, ext_ets),
Data = mnesia:activity(transaction, fun() ->
mnesia:match_object(table, #some_rec{_ = '_'}, read) end
),

{atomic, ok} = mnesia:change_table_copy_type(table, Node, disc_copies),
Data = mnesia:activity(transaction, fun() ->
mnesia:match_object(table, #some_rec{_ = '_'}, read) end
),

stopped = mnesia:stop(),
ok = mnesia:start(),
ok = mnesia:wait_for_tables([schema, table], 10000),

Data = mnesia:activity(transaction, fun() ->
mnesia:match_object(table, #some_rec{_ = '_'}, read) end
).
1 change: 1 addition & 0 deletions lib/mnesia/test/mt.erl
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ alias(registry) -> mnesia_registry_test;
alias(suite) -> mnesia_SUITE;
alias(trans) -> mnesia_trans_access_test;
alias(ixp) -> mnesia_index_plugin_test;
alias(external) -> mnesia_external_backend_test;
alias(Other) -> Other.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Expand Down

0 comments on commit 4b8ea2d

Please sign in to comment.