aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/common_test/test/Makefile1
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE.erl135
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl72
3 files changed, 172 insertions, 36 deletions
diff --git a/lib/common_test/test/Makefile b/lib/common_test/test/Makefile
index 31ab28c41d..9d2edcd653 100644
--- a/lib/common_test/test/Makefile
+++ b/lib/common_test/test/Makefile
@@ -30,6 +30,7 @@ MODULES= \
ct_userconfig_callback \
telnet_server \
ct_smoke_test_SUITE \
+ ct_gen_conn_SUITE \
ct_priv_dir_SUITE \
ct_event_handler_SUITE \
ct_config_info_SUITE \
diff --git a/lib/common_test/test/ct_gen_conn_SUITE.erl b/lib/common_test/test/ct_gen_conn_SUITE.erl
new file mode 100644
index 0000000000..2a2183854e
--- /dev/null
+++ b/lib/common_test/test/ct_gen_conn_SUITE.erl
@@ -0,0 +1,135 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010-2012. 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%
+%%
+
+%%%-------------------------------------------------------------------
+%%% File: ct_gen_conn_SUITE
+%%%
+%%% Description:
+%%% Test that the generic connection handling in CT works as expected.
+%%%
+%%% The suite used for the test is located in the data directory.
+%%%-------------------------------------------------------------------
+-module(ct_gen_conn_SUITE).
+
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+-define(eh, ct_test_support_eh).
+
+%%--------------------------------------------------------------------
+%% TEST SERVER CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+
+%%--------------------------------------------------------------------
+%% Description: Since Common Test starts another Test Server
+%% instance, the tests need to be performed on a separate node (or
+%% there will be clashes with logging processes etc).
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ ct_test_support:init_per_suite(Config).
+
+end_per_suite(Config) ->
+ ct_test_support:end_per_suite(Config).
+
+init_per_testcase(TestCase, Config) ->
+ ct_test_support:init_per_testcase(TestCase, Config).
+
+end_per_testcase(TestCase, Config) ->
+ ct_test_support:end_per_testcase(TestCase, Config).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [handles_to_multi_conn_pids, handles_to_single_conn_pids,
+ names_to_multi_conn_pids, names_to_single_conn_pids].
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+handles_to_multi_conn_pids(Config) ->
+ run_test(handles_to_multi_conn_pids, Config).
+
+handles_to_single_conn_pids(Config) ->
+ run_test(handles_to_single_conn_pids, Config).
+
+names_to_multi_conn_pids(Config) ->
+ run_test(names_to_multi_conn_pids, Config).
+
+names_to_single_conn_pids(Config) ->
+ run_test(names_to_single_conn_pids, Config).
+
+%%%-----------------------------------------------------------------
+%%% HELP FUNCTIONS
+%%%-----------------------------------------------------------------
+run_test(TestCase, Config) ->
+ DataDir = ?config(data_dir, Config),
+ {Opts,ERPid} = setup_env([{dir,DataDir},
+ {suite,conn_SUITE},
+ {testcase,TestCase},
+ {config,filename:join(DataDir,"conn.conf")}],
+ Config),
+ ok = ct_test_support:run(Opts, Config),
+ TestEvents = ct_test_support:get_events(ERPid, Config),
+ ct_test_support:log_events(TestCase,
+ reformat_events(TestEvents, ?eh),
+ ?config(priv_dir, Config),
+ Opts),
+ ExpEvents = events_to_check(TestCase),
+ ok = ct_test_support:verify_events(ExpEvents, TestEvents, Config).
+
+setup_env(Test, Config) ->
+ Opts0 = ct_test_support:get_opts(Config),
+ Level = ?config(trace_level, Config),
+ EvHArgs = [{cbm,ct_test_support},{trace_level,Level}],
+ Opts = Opts0 ++ [{event_handler,{?eh,EvHArgs}} | Test],
+ ERPid = ct_test_support:start_event_receiver(Config),
+ {Opts,ERPid}.
+
+reformat_events(Events, EH) ->
+ ct_test_support:reformat(Events, EH).
+
+%%%-----------------------------------------------------------------
+%%% TEST EVENTS
+%%%-----------------------------------------------------------------
+events_to_check(Test) ->
+ %% 2 tests (ct:run_test + script_start) is default
+ events_to_check(Test, 2).
+
+events_to_check(_, 0) ->
+ [];
+events_to_check(Test, N) ->
+ test_events(Test) ++ events_to_check(Test, N-1).
+
+test_events(Name) ->
+ [
+ {?eh,start_logging,{'DEF','RUNDIR'}},
+ {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
+ {?eh,start_info,{1,1,1}},
+ {?eh,tc_start,{conn_SUITE,init_per_suite}},
+ {?eh,tc_done,{conn_SUITE,init_per_suite,ok}},
+ {?eh,tc_start,{conn_SUITE,Name}},
+ {?eh,tc_done,{conn_SUITE,Name,ok}},
+ {?eh,test_stats,{1,0,{0,0}}},
+ {?eh,tc_start,{conn_SUITE,end_per_suite}},
+ {?eh,tc_done,{conn_SUITE,end_per_suite,ok}},
+ {?eh,test_done,{'DEF','STOP_TIME'}},
+ {?eh,stop_logging,[]}
+ ].
diff --git a/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl b/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
index c0707160cf..6877e0c2d2 100644
--- a/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
+++ b/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
@@ -18,8 +18,9 @@
%%
%%%-------------------------------------------------------------------
-%%% File :
-%%% Description :
+%%% File : conn_SUITE
+%%% Description : Check that the generic connection handling in CT
+%%% works as expected.
%%%-------------------------------------------------------------------
-module(conn_SUITE).
@@ -32,7 +33,6 @@
%% COMMON TEST CALLBACK FUNCTIONS
%%--------------------------------------------------------------------
-
suite() ->
[{timetrap,{seconds,5}}].
@@ -59,7 +59,7 @@ all() ->
handles_to_multi_conn_pids() ->
[{require,multi_conn_pid}].
-handles_to_multi_conn_pids(Config) ->
+handles_to_multi_conn_pids(_Config) ->
application:set_env(ct_test, reconnect, true),
Handle1 = proto:open(multi_conn_pid),
@@ -97,7 +97,7 @@ handles_to_multi_conn_pids(Config) ->
handles_to_single_conn_pids() ->
[{require,single_conn_pid}].
-handles_to_single_conn_pids(Config) ->
+handles_to_single_conn_pids(_Config) ->
application:set_env(ct_test, reconnect, true),
Handle1 = proto:open(single_conn_pid),
@@ -110,9 +110,9 @@ handles_to_single_conn_pids(Config) ->
ConnPid = ct_gen_conn:get_conn_pid(Handle3),
{true,true} = {is_process_alive(Handle3),is_process_alive(ConnPid)},
- Conns = [{undefined,Handle3,_,_},
+ Conns = [{undefined,Handle1,_,_},
{undefined,Handle2,_,_},
- {undefined,Handle1,_,_}] = ct_util:get_connections(ConnPid),
+ {undefined,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
ct:pal("CONNS = ~n~p", [Conns]),
ok = proto:close(Handle1),
@@ -138,43 +138,43 @@ handles_to_single_conn_pids(Config) ->
ok.
names_to_multi_conn_pids() ->
- [{require,conn1,multi_conn_pid},
- {require,conn2,multi_conn_pid},
- {require,conn3,multi_conn_pid}].
+ [{require,mconn1,multi_conn_pid},
+ {require,mconn2,multi_conn_pid},
+ {require,mconn3,multi_conn_pid}].
-names_to_multi_conn_pids(Config) ->
+names_to_multi_conn_pids(_Config) ->
application:set_env(ct_test, reconnect, true),
- Handle1 = proto:open(conn1),
+ Handle1 = proto:open(mconn1),
ConnPid1 = ct_gen_conn:get_conn_pid(Handle1),
{true,true} = {is_process_alive(Handle1),is_process_alive(ConnPid1)},
- Handle2 = proto:open(conn2),
+ Handle2 = proto:open(mconn2),
ConnPid2 = ct_gen_conn:get_conn_pid(Handle2),
{true,true} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
- Handle3 = proto:open(conn3),
+ Handle3 = proto:open(mconn3),
ConnPid3 = ct_gen_conn:get_conn_pid(Handle3),
{true,true} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
- Handle1 = proto:open(conn1),
+ Handle1 = proto:open(mconn1),
- ok = proto:close(conn1),
+ ok = proto:close(mconn1),
timer:sleep(100),
{false,false} = {is_process_alive(Handle1),is_process_alive(ConnPid1)},
ok = proto:kill_conn_proc(Handle2),
timer:sleep(100),
- Handle2 = proto:open(conn2), % should've been reconnected already
+ Handle2 = proto:open(mconn2), % should've been reconnected already
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ConnPid2x = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(ConnPid2x),
- ok = proto:close(conn2),
+ ok = proto:close(mconn2),
timer:sleep(100),
{false,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2x)},
- Handle2y = proto:open(conn2),
+ Handle2y = proto:open(mconn2),
ConnPid2y = ct_gen_conn:get_conn_pid(Handle2y),
{true,true} = {is_process_alive(Handle2y),is_process_alive(ConnPid2y)},
- ok = proto:close(conn2),
+ ok = proto:close(mconn2),
timer:sleep(100),
{false,false} = {is_process_alive(Handle2y),is_process_alive(ConnPid2y)},
@@ -186,47 +186,47 @@ names_to_multi_conn_pids(Config) ->
ok.
names_to_single_conn_pids() ->
- [{require,conn1,single_conn_pid},
- {require,conn2,single_conn_pid},
- {require,conn3,single_conn_pid}].
+ [{require,sconn1,single_conn_pid},
+ {require,sconn2,single_conn_pid},
+ {require,sconn3,single_conn_pid}].
-names_to_single_conn_pids(Config) ->
+names_to_single_conn_pids(_Config) ->
application:set_env(ct_test, reconnect, true),
- Handle1 = proto:open(conn1),
+ Handle1 = proto:open(sconn1),
ConnPid = ct_gen_conn:get_conn_pid(Handle1),
{true,true} = {is_process_alive(Handle1),is_process_alive(ConnPid)},
- Handle2 = proto:open(conn2),
+ Handle2 = proto:open(sconn2),
ConnPid = ct_gen_conn:get_conn_pid(Handle2),
{true,true} = {is_process_alive(Handle2),is_process_alive(ConnPid)},
- Handle3 = proto:open(conn3),
+ Handle3 = proto:open(sconn3),
ConnPid = ct_gen_conn:get_conn_pid(Handle3),
{true,true} = {is_process_alive(Handle3),is_process_alive(ConnPid)},
- Handle1 = proto:open(conn1),
+ Handle1 = proto:open(sconn1),
- Conns = [{conn1,Handle1,_,_},
- {conn2,Handle2,_,_},
- {conn3,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
+ Conns = [{sconn1,Handle1,_,_},
+ {sconn2,Handle2,_,_},
+ {sconn3,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
ct:pal("CONNS on ~p = ~n~p", [ConnPid,Conns]),
- ok = proto:close(conn1),
+ ok = proto:close(sconn1),
timer:sleep(100),
{false,true} = {is_process_alive(Handle1),is_process_alive(ConnPid)},
ok = proto:kill_conn_proc(Handle2),
timer:sleep(100),
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid)},
- Handle2 = proto:open(conn2), % should've been reconnected already
+ Handle2 = proto:open(sconn2), % should've been reconnected already
NewConnPid = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(NewConnPid),
- Conns1 = [{conn2,Handle2,_,_},
- {conn3,Handle3,_,_}] =
+ Conns1 = [{sconn2,Handle2,_,_},
+ {sconn3,Handle3,_,_}] =
lists:sort(ct_util:get_connections(NewConnPid)),
ct:pal("CONNS on ~p = ~n~p", [NewConnPid,Conns1]),
- ok = proto:close(conn2),
+ ok = proto:close(sconn2),
timer:sleep(100),
{false,true} = {is_process_alive(Handle2),is_process_alive(NewConnPid)},