%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 1996-2018. All Rights Reserved. %% %% 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. %% %% %CopyrightEnd% %% %% -define(log(Format,Args),mnesia_test_lib:log(Format,Args,?FILE,?LINE)). -define(warning(Format,Args),?log("<>WARNING<>~n " ++ Format,Args)). -define(error(Format,Args), mnesia_test_lib:error(Format,Args,?FILE,?LINE)). -define(verbose(Format,Args),mnesia_test_lib:verbose(Format,Args,?FILE,?LINE)). -define(fatal(Format,Args), ?error(Format, Args), exit({test_case_fatal, Format, Args, ?FILE, ?LINE})). -define(skip(Format,Args), ?warning(Format, Args), exit({skipped, ?flat_format(Format, Args)})). -define(flat_format(Format,Args), lists:flatten(io_lib:format(Format, Args))). -define(sort(What), mnesia_test_lib:sort(What)). -define(ignore(Expr), fun() -> AcTuAlReS = (catch (Expr)), ?verbose("ok, ~n Result as expected:~p~n",[AcTuAlReS]), AcTuAlReS end()). -define(match(ExpectedRes,Expr), fun() -> try Expr of _AR_0 = ExpectedRes -> ?verbose("ok, ~n Result as expected:~p~n",[_AR_0]), {success,_AR_0}; _AR_0 -> ?error("Not Matching Actual result was:~n ~p~n",[_AR_0]), {fail,_AR_0} catch exit:{aborted, _ER_1}:Stacktrace when element(1, _ER_1) =:= node_not_running; element(1, _ER_1) =:= bad_commit; element(1, _ER_1) =:= cyclic -> %% Need to re-raise these to restart transaction erlang:raise(exit, {aborted, _ER_1}, Stacktrace); exit:_AR_1:Stacktrace -> case fun(_AR_EXIT_) -> {'EXIT', _AR_EXIT_} end(_AR_1) of _AR_2 = ExpectedRes -> ?verbose("ok, ~n Result as expected:~p~n",[_AR_2]), {success,_AR_2}; _AR_2 -> ?error("Not Matching Actual result was:~n ~p~n ~p~n", [_AR_2, Stacktrace]), {fail,_AR_2} end; _T1_:_AR_1:Stacktrace -> ?error("Not Matching Actual result was:~n ~p~n ~p~n", [{_T1_,_AR_1}, Stacktrace]), {fail,{_T1_,_AR_1}} end end()). -define(match_inverse(NotExpectedRes,Expr), fun() -> AcTuAlReS = (catch (Expr)), case AcTuAlReS of NotExpectedRes -> ?error("Not matching Actual result was:~n ~p~n", [AcTuAlReS]), {fail,AcTuAlReS}; _ -> ?verbose("ok, ~n Result as expected: ~p~n",[AcTuAlReS]), {success,AcTuAlReS} end end()). -define(match_receive(ExpectedMsg), ?match(ExpectedMsg,mnesia_test_lib:pick_msg())). %% ExpectedMsgs must be completely bound -define(match_multi_receive(ExpectedMsgs), fun() -> TmPeXpCtEdMsGs = lists:sort(ExpectedMsgs), ?match(TmPeXpCtEdMsGs, lists:sort(lists:map(fun(_) -> mnesia_test_lib:pick_msg() end, TmPeXpCtEdMsGs))) end()). -define(start_activities(Nodes), mnesia_test_lib:start_activities(Nodes)). -define(start_transactions(Pids), mnesia_test_lib:start_transactions(Pids)). -define(acquire_nodes(N, Config), mnesia_test_lib:prepare_test_case([{init_test_case, [mnesia]}, delete_schema, create_schema, {start_appls, [mnesia]}], N, Config, ?FILE, ?LINE)). -define(activate_debug_fun(I, F, C), mnesia_lib:activate_debug_fun(I, F, C, ?FILE, ?LINE)). -define(remote_activate_debug_fun(N, I, F, C), ?match(ok, mnesia_test_lib:remote_activate_debug_fun(N, I, F, C, ?FILE, ?LINE))). -define(deactivate_debug_fun(I), mnesia_lib:deactivate_debug_fun(I, ?FILE, ?LINE)). -define(remote_deactivate_debug_fun(N, I), rpc:call(N, mnesia_lib, deactivate_debug_fun, [I, ?FILE, ?LINE])). -define(is_debug_compiled, case mnesia_lib:is_debug_compiled() of false -> ?skip("Mnesia is not debug compiled, test case ignored.~n", []); _OhTeR -> ok end). -define(needs_disc(Config), case mnesia_test_lib:diskless(Config) of false -> ok; true -> ?skip("Must have disc, test case ignored.~n", []) end). -define(verify_mnesia(Ups, Downs), mnesia_test_lib:verify_mnesia(Ups, Downs, ?FILE, ?LINE)). -define(BACKEND, [{backend_types, [{ext_ets, ext_test},{ext_dets, ext_test}]}]).