aboutsummaryrefslogtreecommitdiffstats
path: root/lib/eldap/test/eldap_connections_SUITE.erl
diff options
context:
space:
mode:
authorHans Nilsson <[email protected]>2014-12-15 15:47:10 +0100
committerHans Nilsson <[email protected]>2014-12-17 10:24:35 +0100
commit4357a70e152c65b00a010540230d5abf3688035e (patch)
tree025aced566b37fe053fca21d940375c3be80ee70 /lib/eldap/test/eldap_connections_SUITE.erl
parentc60f63c717eb488abfe9afacf6e1b6461e521aae (diff)
downloadotp-4357a70e152c65b00a010540230d5abf3688035e.tar.gz
otp-4357a70e152c65b00a010540230d5abf3688035e.tar.bz2
otp-4357a70e152c65b00a010540230d5abf3688035e.zip
eldap: Merge eldap_connections_SUITE into eldab_basic_SUITE
Diffstat (limited to 'lib/eldap/test/eldap_connections_SUITE.erl')
-rw-r--r--lib/eldap/test/eldap_connections_SUITE.erl304
1 files changed, 0 insertions, 304 deletions
diff --git a/lib/eldap/test/eldap_connections_SUITE.erl b/lib/eldap/test/eldap_connections_SUITE.erl
deleted file mode 100644
index fb859c009b..0000000000
--- a/lib/eldap/test/eldap_connections_SUITE.erl
+++ /dev/null
@@ -1,304 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2012-2014. 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%
-%%
-
--module(eldap_connections_SUITE).
-
--compile(export_all).
-
--include_lib("common_test/include/ct.hrl").
-%-include_lib("eldap/include/eldap.hrl").
-
-
-all() ->
- [
- {group, v4},
- {group, v6}
- ].
-
-
-init_per_group(v4, Config) ->
- [{listen_opts, []},
- {listen_host, "localhost"},
- {connect_opts, []}
- | Config];
-init_per_group(v6, Config) ->
- {ok, Hostname} = inet:gethostname(),
- case lists:member(list_to_atom(Hostname), ct:get_config(ipv6_hosts,[])) of
- true ->
- [{listen_opts, [inet6]},
- {listen_host, "::"},
- {connect_opts, [{tcpopts,[inet6]}]}
- | Config];
- false ->
- {skip, io_lib:format("~p is not an ipv6_host",[Hostname])}
- end.
-
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-groups() ->
- [{v4, [], tests()},
- {v6, [], tests()}
- ].
-
-tests() ->
- [tcp_connection,
- tcp_connection_option,
- ssl_connection,
- client_side_start_tls_timeout,
- client_side_bind_timeout,
- client_side_add_timeout,
- client_side_search_timeout
- ].
-
-init_per_suite(Config) ->
- HasSSL = init_ssl_certs_et_al(Config),
- [{has_ssl,HasSSL} | Config].
-
-end_per_suite(_Config) -> ok.
-
-
-init_per_testcase(ssl_connection, Config) ->
- case ?config(has_ssl,Config) of
- true ->
- SSL_Port = 9999,
- CertFile = filename:join(?config(data_dir,Config), "certs/server/cert.pem"),
- KeyFile = filename:join(?config(data_dir,Config), "certs/server/key.pem"),
-
- Parent = self(),
- Listener = spawn_link(
- fun() ->
- case ssl:listen(SSL_Port, [{certfile, CertFile},
- {keyfile, KeyFile},
- {reuseaddr, true}]) of
- {ok,SSL_LSock} ->
- Parent ! {ok,self()},
- (fun L() ->
- ct:log("ssl server waiting for connections...",[]),
- {ok, S} = ssl:transport_accept(SSL_LSock),
- ct:log("ssl:transport_accept/1 ok",[]),
- ok = ssl:ssl_accept(S),
- ct:log("ssl:ssl_accept/1 ok",[]),
- L()
- end)();
- Other ->
- Parent ! {not_ok,Other,self()}
- end
- end),
- receive
- {ok,Listener} ->
- ct:log("SSL listening to port ~p (process ~p)",[SSL_Port, Listener]),
- [{ssl_listener,Listener},
- {ssl_listen_port,SSL_Port},
- {ssl_connect_opts,[]}
- | Config];
- {no_ok,SSL_Other,Listener} ->
- ct:log("ssl:listen on port ~p failed: ~p",[SSL_Port,SSL_Other]),
- {fail, "ssl:listen/2 failed"}
- after 5000 ->
- {fail, "Waiting for ssl:listen timeout"}
- end;
- false ->
- {skip, "ssl not available"}
- end;
-
-init_per_testcase(_, Config) ->
- case gen_tcp:listen(0, proplists:get_value(listen_opts,Config)) of
- {ok,LSock} ->
- {ok,{_,Port}} = inet:sockname(LSock),
- [{listen_socket,LSock},
- {listen_port,Port}
- | Config];
- Other ->
- {fail, Other}
- end.
-
-
-end_per_testcase(_TestCase, Config) ->
- catch gen_tcp:close( proplists:get_value(listen_socket, Config) ).
-
-%%%================================================================
-%%%
-%%% Test cases
-%%%
-%%%----------------------------------------------------------------
-tcp_connection(Config) ->
- Host = proplists:get_value(listen_host, Config),
- Port = proplists:get_value(listen_port, Config),
- Opts = proplists:get_value(connect_opts, Config),
- case eldap:open([Host], [{port,Port}|Opts]) of
- {ok,_H} ->
- Sl = proplists:get_value(listen_socket, Config),
- case gen_tcp:accept(Sl,1000) of
- {ok,_S} -> ok;
- {error,timeout} -> ct:fail("server side accept timeout",[])
- end;
- Other -> ct:fail("eldap:open failed: ~p",[Other])
- end.
-
-%%%----------------------------------------------------------------
-ssl_connection(Config) ->
- Host = proplists:get_value(listen_host, Config),
- Port = proplists:get_value(ssl_listen_port, Config),
- Opts = proplists:get_value(connect_opts, Config),
- SSLOpts = proplists:get_value(ssl_connect_opts, Config),
- case eldap:open([Host], [{port,Port},{ssl,true},
- {timeout,5000},
- {sslopts,SSLOpts}|Opts]) of
- {ok,_H} -> ok;
- Other -> ct:fail("eldap:open failed: ~p",[Other])
- end.
-
-%%%----------------------------------------------------------------
-client_side_add_timeout(Config) ->
- client_timeout(
- fun(H) ->
- eldap:add(H, "cn=Foo Bar,dc=host,dc=ericsson,dc=se",
- [{"objectclass", ["person"]},
- {"cn", ["Foo Bar"]},
- {"sn", ["Bar"]},
- {"telephoneNumber", ["555-1232", "555-5432"]}])
- end, Config).
-
-%%%----------------------------------------------------------------
-client_side_bind_timeout(Config) ->
- client_timeout(
- fun(H) ->
- eldap:simple_bind(H, anon, anon)
- end, Config).
-
-%%%----------------------------------------------------------------
-client_side_search_timeout(Config) ->
- client_timeout(
- fun(H) ->
- eldap:search(H, [{base,"dc=host,dc=ericsson,dc=se"},
- {filter, eldap:present("objectclass")},
- {scope, eldap:wholeSubtree()}])
- end, Config).
-
-%%%----------------------------------------------------------------
-client_side_start_tls_timeout(Config) ->
- client_timeout(
- fun(H) ->
- eldap:start_tls(H, [])
- end, Config).
-
-%%%----------------------------------------------------------------
-tcp_connection_option(Config) ->
- Host = proplists:get_value(listen_host, Config),
- Port = proplists:get_value(listen_port, Config),
- Opts = proplists:get_value(connect_opts, Config),
- Sl = proplists:get_value(listen_socket, Config),
-
- %% Make an option value to test. The option must be implemented on all
- %% platforms that we test on. Must check what the default value is
- %% so we don't happen to choose that particular value.
- {ok,[{linger,DefaultLinger}]} = inet:getopts(Sl, [linger]),
- TestLinger = case DefaultLinger of
- {false,_} -> {true,5};
- {true,_} -> {false,0}
- end,
-
- case catch eldap:open([Host],
- [{port,Port},{tcpopts,[{linger,TestLinger}]}|Opts]) of
- {ok,H} ->
- case gen_tcp:accept(Sl,1000) of
- {ok,_} ->
- case eldap:getopts(H, [{tcpopts,[linger]}]) of
- {ok,[{tcpopts,[{linger,ActualLinger}]}]} ->
- case ActualLinger of
- TestLinger ->
- ok;
- DefaultLinger ->
- ct:fail("eldap:getopts: 'linger' didn't change,"
- " got ~p (=default) expected ~p",
- [ActualLinger,TestLinger]);
- _ ->
- ct:fail("eldap:getopts: bad 'linger', got ~p expected ~p",
- [ActualLinger,TestLinger])
- end;
- Other ->
- ct:fail("eldap:getopts: bad result ~p",[Other])
- end;
- {error,timeout} ->
- ct:fail("server side accept timeout",[])
- end;
-
- Other ->
- ct:fail("eldap:open failed: ~p",[Other])
- end.
-
-
-%%%================================================================
-%%%
-%%% Private
-%%%
-
-client_timeout(Fun, Config) ->
- Host = proplists:get_value(listen_host, Config),
- Port = proplists:get_value(listen_port, Config),
- Opts = proplists:get_value(connect_opts, Config),
- T = 1000,
- case eldap:open([Host], [{timeout,T},{port,Port}|Opts]) of
- {ok,H} ->
- T0 = now(),
- {error,{gen_tcp_error,timeout}} = Fun(H),
- T_op = diff(T0,now()),
- ct:log("Time = ~p, Timeout spec = ~p",[T_op,T]),
- if
- T_op < T ->
- {fail, "Timeout too early"};
- true ->
- ok
- end;
-
- Other -> ct:fail("eldap:open failed: ~p",[Other])
- end.
-
-diff({M1,S1,U1},{M2,S2,U2}) ->
- ( ((M2-M1)*1000 + (S2-S1))*1000 + (U2-U1) ).
-%%%----------------------------------------------------------------
-init_ssl_certs_et_al(Config) ->
- try ssl:start()
- of
- R when R==ok ; R=={error,{already_started,ssl}} ->
- try make_certs:all("/dev/null",
- filename:join(?config(data_dir,Config), "certs"))
- of
- {ok,_} -> true;
- Other ->
- ct:comment("make_certs failed"),
- ct:log("make_certs failed ~p", [Other]),
- false
- catch
- C:E ->
- ct:comment("make_certs crashed"),
- ct:log("make_certs failed ~p:~p", [C,E]),
- false
- end;
- _ ->
- false
- catch
- Error:Reason ->
- ct:comment("ssl failed to start"),
- ct:log("init_per_suite failed to start ssl Error=~p Reason=~p", [Error, Reason]),
- false
- end.