aboutsummaryrefslogtreecommitdiffstats
path: root/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_timetrap_SUITE.erl
blob: f274fb91123173bae3ef7e99077c5f504e4e7ac6 (plain) (blame)
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
-module(ct_telnet_timetrap_SUITE).

-compile(export_all).

-include_lib("common_test/include/ct.hrl").

-define(name,erl_telnet_server).

%%--------------------------------------------------------------------
%% TEST SERVER CALLBACK FUNCTIONS
%%--------------------------------------------------------------------

init_per_suite(Config) ->
    Config.

end_per_suite(_Config) ->
    ok.

suite() -> [{require,?name,{unix,[telnet]}},
	    {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.