%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2001-2019. 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% %% %% %%---------------------------------------------------------------------- %% Purpose: Test application config %%---------------------------------------------------------------------- -module(megaco_examples_test). -compile(export_all). -include("megaco_test_lib.hrl"). -include_lib("megaco/include/megaco.hrl"). -include_lib("megaco/include/megaco_message_v1.hrl"). t() -> megaco_test_lib:t(?MODULE). t(Case) -> megaco_test_lib:t({?MODULE, Case}). %% Test server callbacks init_per_testcase(Case, Config) -> put(dbg,true), purge_examples(), load_examples(), megaco:enable_trace(max, io), megaco_test_lib:init_per_testcase(Case, Config). end_per_testcase(Case, Config) -> purge_examples(), erase(dbg), megaco:disable_trace(), megaco_test_lib:end_per_testcase(Case, Config). example_modules() -> [megaco_simple_mg, megaco_simple_mgc]. load_examples() -> case code:lib_dir(megaco) of {error, Reason} -> {error, Reason}; Dir -> [code:load_abs(filename:join([Dir, examples, simple, M])) || M <- example_modules()] end. purge_examples() -> case code:lib_dir(megaco) of {error, Reason} -> {error, Reason}; _Dir -> [code:purge(M) || M <- example_modules()] end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Top test case %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% all() -> [simple]. groups() -> []. init_per_group(_GroupName, Config) -> Config. end_per_group(_GroupName, Config) -> Config. simple(suite) -> []; simple(Config) when is_list(Config) -> ?ACQUIRE_NODES(1, Config), d("simple -> proxy start"), ProxyPid = megaco_test_lib:proxy_start({?MODULE, ?LINE}), d("simple -> start megaco"), ?VERIFY(ok, megaco:start()), start_mgc(ProxyPid), ?SLEEP(1000), % This is just to make it easier to read the test logs start_mg(ProxyPid), ?SLEEP(1000), % This is just to make it easier to read the test logs d("simple -> verify info()"), info(), d("simple -> verify system_info(users)"), users(), d("simple -> stop mgc"), ?VERIFY(5, length(megaco_simple_mgc:stop())), ?SLEEP(1000), % This is just to make it easier to read the test logs d("simple -> verify system_info(users)"), users(), d("simple -> stop megaco"), ?VERIFY(ok, megaco:stop()), ?SLEEP(1000), % This is just to make it easier to read the test logs d("simple -> kill (exit) ProxyPid: ~p", [ProxyPid]), exit(ProxyPid, shutdown), % Controlled kill of transport supervisors ok. start_mgc(ProxyPid) -> d("start_mgc -> start"), ?APPLY(ProxyPid, fun() -> megaco_simple_mgc:start() end), receive {res, _, {ok, MgcAll}} when is_list(MgcAll) -> ?SLEEP(1000), % This is just to make it easier to read the test logs d("start_mgc -> received MGC response: " "~n ~p", [MgcAll]), MgcBad = [MgcRes || MgcRes <- MgcAll, element(1, MgcRes) /= ok], ?VERIFY([], MgcBad), ok; Error -> ?ERROR(Error) end. start_mg(ProxyPid) -> d("start_mg -> start"), ?APPLY(ProxyPid, fun() -> megaco_simple_mg:start() end), receive {res, _, MgList} when is_list(MgList) andalso (length(MgList) =:= 4) -> ?SLEEP(1000), % This is just to make it easier to read the test logs d("start_mg -> received MG response: " "~n ~p", [MgList]), Verify = fun({_MgMid, {TransId, Res}}) when TransId =:= 1 -> case Res of {ok, [AR]} when is_record(AR, 'ActionReply') -> case AR#'ActionReply'.commandReply of [{serviceChangeReply, SCR}] -> case SCR#'ServiceChangeReply'.serviceChangeResult of {serviceChangeResParms, MgcMid} when MgcMid =/= asn1_NOVALUE -> ok; Error -> d("start_mg -> " "invalid service " "change parms: " "~n ~p", [SCR]), ?ERROR(Error) end; Error -> d("start_mg -> " "invalid service change reply: " "~n ~p", [Error]), ?ERROR(Error) end; Error -> d("start_mg -> " "invalid result: " "~n ~p", [Error]), ?ERROR(Error) end; (Error) -> d("start_mg -> " "invalid reply: " "~n ~p", [Error]), ?ERROR(Error) end, lists:map(Verify, MgList); Error -> d("start_mg -> " "invalid result: " "~n ~p", [Error]), ?ERROR(Error) end. info() -> case (catch megaco:info()) of {'EXIT', _} = Error -> ?ERROR(Error); Info -> ?LOG("Ok, ~p~n", [Info]) end. users() -> case (catch megaco:system_info(users)) of {'EXIT', _} = Error -> ?ERROR(Error); Users -> ?LOG("Ok, ~p~n", [Users]) end. d(F) -> d(F, []). d(F, A) -> d(get(dbg), F, A). d(true, F, A) -> io:format("DBG: ~s " ++ F ++ "~n", [?FT() | A]); d(_, _F, _A) -> ok.