From 4a0e29828fb4b94a9ab85524fe99471ca6d193b2 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erix.ericsson.se>
Date: Thu, 11 Nov 2010 18:25:34 +0100
Subject: Update master test specs to work with include directives

---
 lib/common_test/src/ct_master.erl                  | 25 ++++++++--
 lib/common_test/test/ct_master_SUITE.erl           | 56 ++++++++++++++++++++--
 .../ct_master_SUITE_data/master/include/test.hrl   |  0
 .../ct_master_SUITE_data/master/master_SUITE.erl   |  1 +
 4 files changed, 74 insertions(+), 8 deletions(-)
 create mode 100644 lib/common_test/test/ct_master_SUITE_data/master/include/test.hrl

(limited to 'lib')

diff --git a/lib/common_test/src/ct_master.erl b/lib/common_test/src/ct_master.erl
index 42e4cf08f4..2ea2ba106a 100644
--- a/lib/common_test/src/ct_master.erl
+++ b/lib/common_test/src/ct_master.erl
@@ -101,12 +101,14 @@ run([TS|TestSpecs],AllowUserTerms,InclNodes,ExclNodes) when is_list(TS),
 	    TSRec=#testspec{logdir=AllLogDirs,
 			    config=StdCfgFiles,
 			    userconfig=UserCfgFiles,
+			    include=AllIncludes,
 			    init=AllInitOpts,
 			    event_handler=AllEvHs} ->
 	        AllCfgFiles = {StdCfgFiles, UserCfgFiles},
 		RunSkipPerNode = ct_testspec:prepare_tests(TSRec),
 		RunSkipPerNode2 = exclude_nodes(ExclNodes,RunSkipPerNode),
-		run_all(RunSkipPerNode2,AllLogDirs,AllCfgFiles,AllEvHs,[],[],AllInitOpts,TS1)
+		run_all(RunSkipPerNode2,AllLogDirs,AllCfgFiles,AllEvHs,
+			AllIncludes,[],[],AllInitOpts,TS1)
 	end,
     [{TS,Result} | run(TestSpecs,AllowUserTerms,InclNodes,ExclNodes)];
 run([],_,_,_) ->
@@ -163,11 +165,13 @@ run_on_node([TS|TestSpecs],AllowUserTerms,Node) when is_list(TS),is_atom(Node) -
 	    TSRec=#testspec{logdir=AllLogDirs,
 			    config=StdCfgFiles,
 			    init=AllInitOpts,
+			    include=AllIncludes,
 			    userconfig=UserCfgFiles,
 			    event_handler=AllEvHs} ->
 	        AllCfgFiles = {StdCfgFiles, UserCfgFiles},
 		{Run,Skip} = ct_testspec:prepare_tests(TSRec,Node),
-		run_all([{Node,Run,Skip}],AllLogDirs,AllCfgFiles,AllEvHs,[],[],AllInitOpts,TS1)
+		run_all([{Node,Run,Skip}],AllLogDirs,AllCfgFiles,AllEvHs,
+			AllIncludes, [],[],AllInitOpts,TS1)
 	end,
     [{TS,Result} | run_on_node(TestSpecs,AllowUserTerms,Node)];
 run_on_node([],_,_) ->
@@ -189,7 +193,7 @@ run_on_node(TestSpecs,Node) ->
 
 run_all([{Node,Run,Skip}|Rest],AllLogDirs,
 	{AllStdCfgFiles, AllUserCfgFiles}=AllCfgFiles,
-	AllEvHs,NodeOpts,LogDirs,InitOptions,Specs) ->
+	AllEvHs,AllIncludes,NodeOpts,LogDirs,InitOptions,Specs) ->
     LogDir =
 	lists:foldl(fun({N,Dir},_Found) when N == Node ->
 			    Dir;
@@ -211,6 +215,14 @@ run_all([{Node,Run,Skip}|Rest],AllLogDirs,
 		       ({_N,_F},Fs) -> Fs;
 		       (F,Fs) -> [{userconfig, F}|Fs]
 		    end,[],AllUserCfgFiles),
+    
+    Includes = lists:foldr(fun({N,I},Acc) when N =:= Node ->
+				   [I|Acc];
+			      ({_,_},Acc) ->
+				   Acc;
+			      (I,Acc) ->
+				   [I | Acc]
+			   end, [], AllIncludes),
     EvHs =
 	lists:foldr(fun({N,H,A},Hs) when N == Node -> [{H,A}|Hs];
 		       ({_N,_H,_A},Hs) -> Hs;
@@ -219,10 +231,13 @@ run_all([{Node,Run,Skip}|Rest],AllLogDirs,
 
     NO = {Node,[{prepared_tests,{Run,Skip},Specs},
 		{logdir,LogDir},
+		{include, Includes},
 		{config,StdCfgFiles},
 		{event_handler,EvHs}] ++ UserCfgFiles},
-    run_all(Rest,AllLogDirs,AllCfgFiles,AllEvHs,[NO|NodeOpts],[LogDir|LogDirs],InitOptions,Specs);
-run_all([],AllLogDirs,_,AllEvHs,NodeOpts,LogDirs,InitOptions,Specs) ->
+    run_all(Rest,AllLogDirs,AllCfgFiles,AllEvHs,AllIncludes,
+	    [NO|NodeOpts],[LogDir|LogDirs],InitOptions,Specs);
+run_all([],AllLogDirs,_,AllEvHs,_AllIncludes,
+	NodeOpts,LogDirs,InitOptions,Specs) ->
     Handlers = [{H,A} || {Master,H,A} <- AllEvHs, Master == master],
     MasterLogDir = case lists:keysearch(master,1,AllLogDirs) of
 		       {value,{_,Dir}} -> Dir;
diff --git a/lib/common_test/test/ct_master_SUITE.erl b/lib/common_test/test/ct_master_SUITE.erl
index e0e1f93db2..1b2fd79cbb 100644
--- a/lib/common_test/test/ct_master_SUITE.erl
+++ b/lib/common_test/test/ct_master_SUITE.erl
@@ -55,6 +55,8 @@ init_per_testcase(TestCase, Config) ->
 end_per_testcase(TestCase, Config) ->
     ct_test_support:end_per_testcase(TestCase, Config).
 
+all() ->
+    all(suite).
 all(doc) ->
     [""];
 
@@ -75,7 +77,28 @@ ct_master_test(Config) when is_list(Config)->
     FileName = filename:join(PrivDir, "ct_master_spec.spec"),
     Suites = [master_SUITE],
     TSFile = make_spec(DataDir, FileName, NodeNames, Suites, Config),
+    ERPid = ct_test_support:start_event_receiver(Config),
+    spawn(ct@ancalagon,
+	  fun() ->
+		  dbg:tracer(),dbg:p(all,c),
+		  dbg:tpl(erlang, spawn_link, 4,x),
+		  receive ok -> ok end
+	  end),
+
     [{TSFile, ok}] = run_test(ct_master_test, FileName, Config),
+
+    Events = ct_test_support:get_events(ERPid, Config),
+
+    ct_test_support:log_events(groups_suite_1, 
+			       reformat(Events, ?eh), 
+			       ?config(priv_dir, Config)),
+    find_events(NodeNames, [{tc_start,{master_SUITE,init_per_suite}},
+			    {tc_start,{master_SUITE,first_testcase}},
+			    {tc_start,{master_SUITE,second_testcase}},
+			    {tc_start,{master_SUITE,third_testcase}},
+			    {tc_start,{master_SUITE,end_per_suite}}],
+	       Events),
+    
     ok.
 
 %%%-----------------------------------------------------------------
@@ -115,8 +138,12 @@ make_spec(DataDir, FileName, NodeNames, Suites, Config)->
 	     {logdir, NodeName, get_log_dir(PrivDir, NodeName)}
          end,
 	 NodeNames) ++ [{logdir, master, PrivDir}],
+    EvHArgs = [{cbm,ct_test_support},{trace_level,?config(trace_level,Config)}],
+    EH = [{event_handler,master,[?eh],EvHArgs}],
 
-    ct_test_support:write_testspec(N++C++S++LD++NS, FileName).
+    Include = [{include,filename:join([DataDir,"master/include"])}],
+
+    ct_test_support:write_testspec(N++Include++EH++C++S++LD++NS, FileName).
 
 get_log_dir(PrivDir, NodeName)->
     LogDir = filename:join(PrivDir, io_lib:format("slave.~p", [NodeName])),
@@ -126,11 +153,34 @@ get_log_dir(PrivDir, NodeName)->
 run_test(_Name, FileName, Config)->
     [{FileName, ok}] = ct_test_support:run(ct_master, run, [FileName], Config).
 
-reformat_events(Events, EH) ->
+reformat(Events, EH) ->
     ct_test_support:reformat(Events, EH).
 
 %%%-----------------------------------------------------------------
 %%% TEST EVENTS
 %%%-----------------------------------------------------------------
+find_events([], _CheckEvents, _) ->
+    ok;
+find_events([NodeName|NodeNames],CheckEvents,AllEvents) ->
+    find_events(NodeNames, CheckEvents,
+		remove_events(add_host(NodeName),CheckEvents, AllEvents, [])).
+
+remove_events(Node,[{Name,Data} | RestChecks],
+	      [{?eh,#event{ name = Name, node = Node, data = Data }}|RestEvs],
+	       Acc) ->
+    remove_events(Node, RestChecks, RestEvs, Acc);
+remove_events(Node, Checks, [Event|RestEvs], Acc) ->
+    remove_events(Node, Checks, RestEvs, [Event | Acc]);
+remove_events(_Node, [], [], Acc) ->
+    lists:reverse(Acc);
+remove_events(Node, Events, [], Acc) ->
+    test_server:format("Could not find events: ~p in ~p for node ~p",
+	   [Events, lists:reverse(Acc), Node]),
+    exit(event_not_found).
+
+add_host(NodeName) ->
+    {ok, HostName} = inet:gethostname(),
+    list_to_atom(atom_to_list(NodeName)++"@"++HostName).
+    
 expected_events(_)->
-[].
+    [].
diff --git a/lib/common_test/test/ct_master_SUITE_data/master/include/test.hrl b/lib/common_test/test/ct_master_SUITE_data/master/include/test.hrl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl b/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl
index e37ec3659c..032d69ad9f 100644
--- a/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl
+++ b/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl
@@ -28,6 +28,7 @@
 -compile(export_all).
 
 -include_lib("common_test/include/ct.hrl").
+-include("test.hrl").
 
 suite() ->
     [].
-- 
cgit v1.2.3


From 410ffad2ce9200158cd6bd5657e465cb1351673e Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erix.ericsson.se>
Date: Mon, 15 Nov 2010 18:29:46 +0100
Subject: Update master test to put slave logs in /tmp for windows as otherwise
 filenames become too long and the tests fail

---
 lib/common_test/test/ct_master_SUITE.erl | 49 ++++++++++++++++++++++++++------
 1 file changed, 41 insertions(+), 8 deletions(-)

(limited to 'lib')

diff --git a/lib/common_test/test/ct_master_SUITE.erl b/lib/common_test/test/ct_master_SUITE.erl
index 1b2fd79cbb..5ac2866227 100644
--- a/lib/common_test/test/ct_master_SUITE.erl
+++ b/lib/common_test/test/ct_master_SUITE.erl
@@ -33,6 +33,13 @@
 
 -define(eh, ct_test_support_eh).
 
+-define(TEMP_DIR, case os:type() of
+		      {win32,_} ->
+			  "c:/Temp";
+		      _ ->
+			  "/tmp"
+		  end).
+
 %%--------------------------------------------------------------------
 %% TEST SERVER CALLBACK FUNCTIONS
 %%--------------------------------------------------------------------
@@ -43,16 +50,35 @@
 %% there will be clashes with logging processes etc).
 %%--------------------------------------------------------------------
 init_per_suite(Config) ->
-    Config1 = ct_test_support:init_per_suite(Config),
-    Config1.
+    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, [{master, true}|Config]).
+    NodeCount = 5,
+    NodeNames = [list_to_atom("t_"++integer_to_list(N)) ||
+		 N <- lists:seq(1, NodeCount)],
+    ct_test_support:init_per_testcase(
+      TestCase,[{node_names,NodeNames},
+		{master, true}|Config]).
 
 end_per_testcase(TestCase, Config) ->
+    case os:type() of
+	{win32,_} ->
+	    %% If this is a windows run the logs are saved to /tmp and
+	    %% then moved to private_dir as a tar because otherwise
+	    %% the file names become too long! :(
+	    Files = filelib:wildcard(filename:join(?TEMP_DIR,"slave.*")),
+	    erl_tar:create(
+	      filename:join(
+		proplists:get_value(priv_dir,Config),"slaves.tar.gz"),
+	      Files,[compressed]),
+	    os:cmd("rm -rf "++filename:join(?TEMP_DIR,"slave.*"));
+	_ ->
+	    ok
+    end,
+    
     ct_test_support:end_per_testcase(TestCase, Config).
 
 all() ->
@@ -69,11 +95,10 @@ all(suite) ->
 %% TEST CASES
 %%--------------------------------------------------------------------
 ct_master_test(Config) when is_list(Config)->
-    NodeCount = 5,
+    NodeNames = proplists:get_value(node_names, Config),
     DataDir = ?config(data_dir, Config),
     PrivDir = ?config(priv_dir, Config),
-    NodeNames = [list_to_atom("testnode_"++integer_to_list(N)) ||
-		 N <- lists:seq(1, NodeCount)],
+
     FileName = filename:join(PrivDir, "ct_master_spec.spec"),
     Suites = [master_SUITE],
     TSFile = make_spec(DataDir, FileName, NodeNames, Suites, Config),
@@ -135,7 +160,7 @@ make_spec(DataDir, FileName, NodeNames, Suites, Config)->
 
     PrivDir = ?config(priv_dir, Config),
     LD = lists:map(fun(NodeName)->
-	     {logdir, NodeName, get_log_dir(PrivDir, NodeName)}
+	     {logdir, NodeName, get_log_dir(os:type(),PrivDir, NodeName)}
          end,
 	 NodeNames) ++ [{logdir, master, PrivDir}],
     EvHArgs = [{cbm,ct_test_support},{trace_level,?config(trace_level,Config)}],
@@ -145,7 +170,15 @@ make_spec(DataDir, FileName, NodeNames, Suites, Config)->
 
     ct_test_support:write_testspec(N++Include++EH++C++S++LD++NS, FileName).
 
-get_log_dir(PrivDir, NodeName)->
+get_log_dir({win32,_},PrivDir, NodeName)->
+    case filelib:is_dir(?TEMP_DIR) of
+	false ->
+	    file:make_dir(?TEMP_DIR);
+	_ ->
+	    ok
+    end,
+    get_log_dir(tmp, ?TEMP_DIR,NodeName);
+get_log_dir(_,PrivDir,NodeName) ->
     LogDir = filename:join(PrivDir, io_lib:format("slave.~p", [NodeName])),
     file:make_dir(LogDir),
     LogDir.
-- 
cgit v1.2.3