aboutsummaryrefslogtreecommitdiffstats
path: root/lib/common_test/src/ct_telnet.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common_test/src/ct_telnet.erl')
-rw-r--r--lib/common_test/src/ct_telnet.erl59
1 files changed, 40 insertions, 19 deletions
diff --git a/lib/common_test/src/ct_telnet.erl b/lib/common_test/src/ct_telnet.erl
index c19d312f01..c6f5fd7df4 100644
--- a/lib/common_test/src/ct_telnet.erl
+++ b/lib/common_test/src/ct_telnet.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2003-2010. 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%
%%
@@ -21,27 +21,28 @@
%%%
%%% <p>Use this module to set up telnet connections, send commands and
%%% perform string matching on the result.
-%%% (See the <code>unix_telnet</code> manual page for information
-%%% about how ct_telnet may be used specifically with unix hosts.)</p>
+%%% See the <c>unix_telnet</c> manual page for information about how to use
+%%% ct_telnet, and configure connections, specifically for unix hosts.</p>
%%% <p>The following default values are defined in ct_telnet:</p>
%%% <pre>
%%% Connection timeout = 10 sec (time to wait for connection)
%%% Command timeout = 10 sec (time to wait for a command to return)
%%% Max no of reconnection attempts = 3
%%% Reconnection interval = 5 sek (time to wait in between reconnection attempts)
-%%% </pre>
+%%% Keep alive = true (will send NOP to the server every 10 sec if connection is idle)</pre>
%%% <p>These parameters can be altered by the user with the following
%%% configuration term:</p>
%%% <pre>
%%% {telnet_settings, [{connect_timeout,Millisec},
%%% {command_timeout,Millisec},
%%% {reconnection_attempts,N},
-%%% {reconnection_interval,Millisec}]}.
-%%% </pre>
+%%% {reconnection_interval,Millisec},
+%%% {keep_alive,Bool}]}.</pre>
%%% <p><code>Millisec = integer(), N = integer()</code></p>
%%% <p>Enter the <code>telnet_settings</code> term in a configuration
%%% file included in the test and ct_telnet will retrieve the information
-%%% automatically.</p>
+%%% automatically. Note that <c>keep_alive</c> may be specified per connection if
+%%% required. See <c>unix_telnet</c> for details.</p></doc>
%%% @type connection_type() = telnet | ts1 | ts2
@@ -88,7 +89,9 @@
buffer=[],
prompt=false,
name,
- target_mod,extra,
+ target_mod,
+ keep_alive,
+ extra,
conn_to=?DEFAULT_TIMEOUT,
com_to=?DEFAULT_TIMEOUT,
reconns=?RECONNS,
@@ -150,7 +153,7 @@ open(KeyOrName,ConnType,TargetMod) ->
%%% name can only be closed with the handle value.</p>
%%%
%%% <p><code>TargetMod</code> is a module which exports the functions
-%%% <code>connect(Ip,Port,Extra)</code> and <code>get_prompt_regexp()</code>
+%%% <code>connect(Ip,Port,KeepAlive,Extra)</code> and <code>get_prompt_regexp()</code>
%%% for the given <code>TargetType</code> (e.g. <code>unix_telnet</code>).</p>
open(KeyOrName,ConnType,TargetMod,Extra) ->
case ct:get_config({KeyOrName,ConnType}) of
@@ -169,9 +172,18 @@ open(KeyOrName,ConnType,TargetMod,Extra) ->
P -> {IP,P}
end
end,
+ KeepAlive =
+ case ct:get_config({KeyOrName,keep_alive}) of
+ undefined ->
+ case ct:get_config({telnet_settings,keep_alive}) of
+ undefined -> true;
+ Bool -> Bool
+ end;
+ Bool -> Bool
+ end,
log(heading(open,{KeyOrName,ConnType}),"Opening connection to: ~p",[Addr1]),
ct_gen_conn:start(KeyOrName,full_addr(Addr1,ConnType),
- {TargetMod,Extra},?MODULE)
+ {TargetMod,KeepAlive,Extra},?MODULE)
end.
%%%-----------------------------------------------------------------
@@ -373,14 +385,14 @@ expect(Connection,Patterns,Opts) ->
%%%=================================================================
%%% Callback functions
%% @hidden
-init(Name,{Ip,Port,Type},{TargetMod,Extra}) ->
+init(Name,{Ip,Port,Type},{TargetMod,KeepAlive,Extra}) ->
S0 = case ct:get_config(telnet_settings) of
undefined ->
#state{};
Settings ->
set_telnet_defaults(Settings,#state{})
end,
- case catch TargetMod:connect(Ip,Port,S0#state.conn_to,Extra) of
+ case catch TargetMod:connect(Ip,Port,S0#state.conn_to,KeepAlive,Extra) of
{ok,TelnPid} ->
log(heading(init,{Name,Type}),
"Opened telnet connection\n"
@@ -389,13 +401,15 @@ init(Name,{Ip,Port,Type},{TargetMod,Extra}) ->
"Command timeout: ~p\n"
"Reconnection attempts: ~p\n"
"Reconnection interval: ~p\n"
- "Connection timeout: ~p",
+ "Connection timeout: ~p\n"
+ "Keep alive: ~w",
[Ip,Port,S0#state.com_to,S0#state.reconns,
- S0#state.reconn_int,S0#state.conn_to]),
+ S0#state.reconn_int,S0#state.conn_to,KeepAlive]),
{ok,TelnPid,S0#state{teln_pid=TelnPid,
type=type(Type),
name={Name,Type},
target_mod=TargetMod,
+ keep_alive=KeepAlive,
extra=Extra,
prx=TargetMod:get_prompt_regexp()}};
{'EXIT',Reason} ->
@@ -415,6 +429,12 @@ set_telnet_defaults([{reconnection_attempts,Rs}|Ss],S) ->
set_telnet_defaults(Ss,S#state{reconns=Rs});
set_telnet_defaults([{reconnection_interval,RInt}|Ss],S) ->
set_telnet_defaults(Ss,S#state{reconn_int=RInt});
+set_telnet_defaults([{keep_alive,_}|Ss],S) ->
+ set_telnet_defaults(Ss,S);
+set_telnet_defaults([Unknown|Ss],S) ->
+ log(heading(set_telnet_defaults,{telnet_settings,Unknown}),
+ "Bad element in telnet_settings: ~p",[Unknown]),
+ set_telnet_defaults(Ss,S);
set_telnet_defaults([],S) ->
S.
@@ -527,10 +547,11 @@ handle_msg({expect,Pattern,Opts},State) ->
reconnect({Ip,Port,_Type},State) ->
reconnect(Ip,Port,State#state.reconns,State).
reconnect(Ip,Port,N,State=#state{target_mod=TargetMod,
+ keep_alive=KeepAlive,
extra=Extra,
conn_to=ConnTo,
reconn_int=ReconnInt}) ->
- case TargetMod:connect(Ip,Port,ConnTo,Extra) of
+ case TargetMod:connect(Ip,Port,ConnTo,KeepAlive,Extra) of
{ok, NewPid} ->
{ok, NewPid, State#state{teln_pid=NewPid}};
Error when N==0 ->