aboutsummaryrefslogtreecommitdiffstats
path: root/lib/megaco/test/megaco_appup_mg.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/megaco/test/megaco_appup_mg.erl')
-rw-r--r--lib/megaco/test/megaco_appup_mg.erl198
1 files changed, 198 insertions, 0 deletions
diff --git a/lib/megaco/test/megaco_appup_mg.erl b/lib/megaco/test/megaco_appup_mg.erl
new file mode 100644
index 0000000000..f6060e406b
--- /dev/null
+++ b/lib/megaco/test/megaco_appup_mg.erl
@@ -0,0 +1,198 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+%%----------------------------------------------------------------------
+%% Purpose: Used when performing testing appup tests
+%%
+%% {ok, P} = megaco_appup_mg:start().
+%% megaco_appup_mg:stop(P).
+%% megaco_appup_mg:verbosity(P,silence).
+%% megaco_appup_mg:verbosity(P,debug).
+%% megaco_appup_mg:timeout(P,100).
+%% megaco_appup_mg:aam(P,10).
+%% megaco_appup_mg:aam(P,15).
+%% megaco_appup_mg:aat(P,2000).
+%% megaco_appup_mg:aat(P,10000).
+%%
+%%----------------------------------------------------------------------
+
+-module(megaco_appup_mg).
+
+%% API
+-export([start1/0, start2/0, start3/0, start4/0]).
+-export([start/0, start/1, start/2]).
+-export([verbosity/2, timeout/2]).
+-export([aat/2, aam/2]).
+
+%% Internal
+-export([main/4]).
+
+%% Constants:
+-define(TIMEOUT,1000).
+-define(MAXCOUNT,1).
+
+%% Wrapper macros
+-define(START(Mid, Enc, Transp, Conf, Verb),
+ megaco_test_mg:start(node(), Mid, Enc, Transp, Conf, Verb)).
+-define(STOP(Pid), megaco_test_mg:stop(Pid)).
+-define(SERV_CHANGE(Pid), megaco_test_mg:service_change(Pid)).
+-define(NOTIF_RAR(Pid), megaco_test_mg:notify_request_and_reply(Pid)).
+-define(GRP_REQ(Pid,N), megaco_test_mg:group_requests(Pid,N)).
+-define(VERBOSITY(Pid,V), megaco_test_mg:verbosity(Pid,V)).
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+start1() -> start(text, tcp).
+start2() -> start(text, udp).
+start3() -> start(binary, tcp).
+start4() -> start(binary, udp).
+
+start() ->
+ start(text, tcp).
+
+start(tcp) ->
+ start(text, tcp);
+start(udp) ->
+ start(text, udp).
+
+start(Encoding, Transport) ->
+ proc_lib:start_link(?MODULE, main, [self(), Encoding, Transport, 1]).
+
+stop(Pid) ->
+ Pid ! stop.
+
+verbosity(Pid, V) ->
+ Pid ! {verbosity, V}.
+
+timeout(Pid, T) ->
+ Pid ! {timeout, T}.
+
+aat(Pid, Val) ->
+ uci(Pid, accu_ack_timer, Val).
+
+aam(Pid, Val) ->
+ uci(Pid, accu_ack_maxcount, Val).
+
+uci(Pid, Item, Val) ->
+ Pid ! {update_conn_info, Item, Val}.
+
+
+%% -------------------------------------------------------------------------
+
+%% - start function -
+main(Parent, Encoding, Transport, MaxCount) ->
+ Mg = init(Encoding, Transport, MaxCount),
+ proc_lib:init_ack(Parent, {ok, self()}),
+ loop(Mg, ?TIMEOUT, ?TIMEOUT).
+
+%% - init -
+init(Encoding, Transport, MaxCount) ->
+ verify_encoding(Encoding),
+ verify_transport(Transport),
+
+ Mid = {deviceName, "mg"},
+ Config = [{auto_ack, true} %,
+ %{trans_timer, 2000},
+ %{trans_ack_maxcount, MaxCount}
+ ],
+
+ d("start MG"),
+ {ok, Mg} = ?START(Mid, Encoding, Transport, Config, debug),
+
+ d("service change"),
+ ok = ?SERV_CHANGE(Mg),
+
+ ?GRP_REQ(Mg, MaxCount),
+
+ Mg.
+
+%% - main loop -
+loop(Mg, Timeout, To) when To =< 0 ->
+ ?NOTIF_RAR(Mg),
+ loop(Mg, Timeout, Timeout);
+loop(Mg, Timeout, To) ->
+ Start = t(),
+ receive
+ stop ->
+ d("stop"),
+ megaco_test_mg:stop(Mg),
+ exit(normal);
+
+ {update_conn_info, Item, Val} ->
+ d("update_conn_info -> ~p:~p", [Item, Val]),
+ megaco_test_mg:update_conn_info(Mg, Item, Val),
+ loop(Mg, Timeout, To - (t() - Start));
+
+ {request_group_size, Size} when Size > 1 ->
+ d("request_group_size -> ~p", [Size]),
+ ?GRP_REQ(Mg, Size),
+ loop(Mg, Timeout, To - (t() - Start));
+
+ {verbosity, V} ->
+ d("verbosity: ~p", [V]),
+ ?VERBOSITY(Mg, V),
+ loop(Mg, Timeout, To - (t() - Start));
+
+ {timeout, T} ->
+ d("timeout: ~p", [T]),
+ T1 = T - Timeout,
+ loop(Mg, T, To - (t() - Start) + T1);
+
+ Any ->
+ error("received unknown request: ~n~p", [Any]),
+ loop(Mg, Timeout, To - (t() - Start))
+
+ after To ->
+ ?NOTIF_RAR(Mg),
+ loop(Mg, Timeout, Timeout)
+ end.
+
+
+
+%% -------------------------------------------------------------------------
+
+verify_encoding(text) -> ok;
+verify_encoding(binary) -> ok;
+verify_encoding(Encoding) -> exit({invalid_encoding, Encoding}).
+
+verify_transport(tcp) -> ok;
+verify_transport(udp) -> ok;
+verify_transport(Transport) -> exit({invalid_transport, Transport}).
+
+%% -
+
+sleep(X) -> receive after X -> ok end.
+
+t() ->
+ {A,B,C} = erlang:now(),
+ A*1000000000+B*1000+(C div 1000).
+
+
+%% -
+
+error(F, A) ->
+ d("ERROR: " ++ F, A).
+
+d(F) ->
+ d(F, []).
+
+d(F, A) ->
+ io:format("~pAMG-" ++ F ++ "~n", [self()|A]).