diff options
author | Hans Nilsson <[email protected]> | 2016-03-31 12:45:15 +0200 |
---|---|---|
committer | Hans Nilsson <[email protected]> | 2016-04-28 10:34:00 +0200 |
commit | 20b5ece81105525f89a936921ff363b24f4396ed (patch) | |
tree | 9253a342c102134760dad1c693a5dd84bdb99072 | |
parent | 1b3495077db1e60db472283352dd175cd6dd962e (diff) | |
download | otp-20b5ece81105525f89a936921ff363b24f4396ed.tar.gz otp-20b5ece81105525f89a936921ff363b24f4396ed.tar.bz2 otp-20b5ece81105525f89a936921ff363b24f4396ed.zip |
ssh: Repeated try until ssh_options_SUITE:max_sessions succedes (or timeout)
The supervisor tree need some time to count down number of workers when one dies.
With a fixed waiting time in the test, there will be spurious errors. There will also be
unnecessarily long waits on some machines.
-rw-r--r-- | lib/ssh/test/ssh_options_SUITE.erl | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/lib/ssh/test/ssh_options_SUITE.erl b/lib/ssh/test/ssh_options_SUITE.erl index 124c72846b..272e961bf8 100644 --- a/lib/ssh/test/ssh_options_SUITE.erl +++ b/lib/ssh/test/ssh_options_SUITE.erl @@ -1123,21 +1123,7 @@ max_sessions(Config, ParallelLogin, Connect0) when is_function(Connect0,2) -> %% This is expected %% Now stop one connection and try to open one more ok = ssh:close(hd(Connections)), - receive after 250 -> ok end, % sleep so the supervisor has time to count down. Not nice... - try Connect(Host,Port) - of - _ConnectionRef1 -> - %% Step 3 ok: could set up one more connection after killing one - %% Thats good. - ssh:stop_daemon(Pid), - ok - catch - error:{badmatch,{error,"Connection closed"}} -> - %% Bad indeed. Could not set up one more connection even after killing - %% one existing. Very bad. - ssh:stop_daemon(Pid), - {fail,"Does not decrease # active sessions"} - end + try_to_connect(Connect, Host, Port, Pid) end catch error:{badmatch,{error,"Connection closed"}} -> @@ -1145,6 +1131,35 @@ max_sessions(Config, ParallelLogin, Connect0) when is_function(Connect0,2) -> {fail,"Too few connections accepted"} end. + +try_to_connect(Connect, Host, Port, Pid) -> + {ok,Tref} = timer:send_after(3000, timeout_no_connection), % give the supervisors some time... + try_to_connect(Connect, Host, Port, Pid, Tref, 1). % will take max 3300 ms after 11 tries + +try_to_connect(Connect, Host, Port, Pid, Tref, N) -> + try Connect(Host,Port) + of + _ConnectionRef1 -> + %% Step 3 ok: could set up one more connection after killing one + %% Thats good. + timer:cancel(Tref), + ssh:stop_daemon(Pid), + receive % flush. + timeout_no_connection -> ok + after 0 -> ok + end + catch + error:{badmatch,{error,"Connection closed"}} -> + %% Could not set up one more connection. Try again until timeout. + receive + timeout_no_connection -> + ssh:stop_daemon(Pid), + {fail,"Does not decrease # active sessions"} + after N*50 -> % retry after this time + try_to_connect(Connect, Host, Port, Pid, Tref, N+1) + end + end. + %%-------------------------------------------------------------------- %% Internal functions ------------------------------------------------ %%-------------------------------------------------------------------- |