1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
-module(ct_telnet_timetrap_SUITE).
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
-define(name, telnet_server_conn1).
%%--------------------------------------------------------------------
%% TEST SERVER CALLBACK FUNCTIONS
%%--------------------------------------------------------------------
init_per_suite(Config) ->
Config.
end_per_suite(_Config) ->
ok.
suite() -> [{require,?name,{unix,[telnet]}},
{require,ct_conn_log},
{ct_hooks, [{cth_conn_log,[]}]},
{timetrap,{seconds,7}}].
all() ->
[expect_timetrap,
expect_success].
groups() ->
[].
init_per_group(_GroupName, Config) ->
Config.
end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_,Config) ->
ct:log("init_per_testcase: opening telnet connection...",[]),
{ok,_} = ct_telnet:open(?name),
ct:log("...done",[]),
Config.
end_per_testcase(_,_Config) ->
ct:log("end_per_testcase: closing telnet connection...",[]),
_ = ct_telnet:close(?name),
ct:log("...done",[]),
ok.
%% OTP-10648
%% This test case should fail with timetrap timeout.
%%
%% The long timetrap timeout and timeout option in the expect call
%% also causes the telnet client to hang so long that the attempt at
%% closing it (in end_per_testcase) will time out (close timeout is 5
%% sec) without a timetrap timeout occuring in end_per_testcase.
%%
%% The point is to see that the connection is thoroughly removed and
%% unregistered anyway so that the next test case can successfully
%% open a connection with the same name.
%%
%% Note!!! that if end_per_testcase reaches a timetrap timeout before
%% the connection is closed, then the connection will survive until
%% the hanging expect times out, after which it will be closed in a
%% seemingly normal way due to the close message which was sent by the
%% close attempt. This could happen any time during the subsequent
%% test cases and cause confusion... There is however not much to do
%% about this, except writing test cases with timetrap timeout longer
%% than the close timeout (as this test case does)
expect_timetrap(_) ->
{error,timeout} = ct_telnet:expect(?name, ["ayt"], [{timeout,20000}]),
ok.
%% This should succeed
expect_success(_) ->
ok = ct_telnet:send(?name, "echo ayt"),
{ok,["ayt"]} = ct_telnet:expect(?name, ["ayt"]),
ok.
|