From 26550631bf825d738bd8c20c9fdb600e9867d81f Mon Sep 17 00:00:00 2001
From: Peter Andersson <peppe@erlang.org>
Date: Tue, 27 Sep 2011 01:24:12 +0200
Subject: Fix problem with test_server_ctrl creating invalid conf test

OTP-9584
---
 lib/common_test/src/ct_framework.erl     | 10 +++++-----
 lib/test_server/src/test_server_ctrl.erl | 15 +++++++++++++++
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/lib/common_test/src/ct_framework.erl b/lib/common_test/src/ct_framework.erl
index 02a5d60445..fb89685b7b 100644
--- a/lib/common_test/src/ct_framework.erl
+++ b/lib/common_test/src/ct_framework.erl
@@ -478,7 +478,6 @@ end_tc(Mod,Func,TCPid,Result,Args,Return) ->
 	_ ->
 	    ok
     end,
-
     ct_util:delete_testdata(comment),
     ct_util:delete_suite_data(last_saved_config),
     FuncSpec =
@@ -1026,19 +1025,20 @@ make_conf(Mod, Name, Props, TestSpec) ->
 	_ ->
 	    ok
     end,
-    {InitConf,EndConf} =
+    {InitConf,EndConf,ExtraProps} =
 	case erlang:function_exported(Mod,init_per_group,2) of
 	    true ->
-		{{Mod,init_per_group},{Mod,end_per_group}};
+		{{Mod,init_per_group},{Mod,end_per_group},[]};
 	    false ->
 		ct_logs:log("TEST INFO", "init_per_group/2 and "
 			    "end_per_group/2 missing for group "
 			    "~p in ~p, using default.",
 			    [Name,Mod]),
 		{{?MODULE,ct_init_per_group},
-		 {?MODULE,ct_end_per_group}}
+		 {?MODULE,ct_end_per_group},
+		 [{suite,Mod}]}
 	end,
-    {conf,[{name,Name}|Props],InitConf,TestSpec,EndConf}.
+    {conf,[{name,Name}|Props++ExtraProps],InitConf,TestSpec,EndConf}.
 
 %%%-----------------------------------------------------------------
 
diff --git a/lib/test_server/src/test_server_ctrl.erl b/lib/test_server/src/test_server_ctrl.erl
index 7554a31530..4fad86d16d 100644
--- a/lib/test_server/src/test_server_ctrl.erl
+++ b/lib/test_server/src/test_server_ctrl.erl
@@ -2039,6 +2039,21 @@ add_init_and_end_per_suite([{skip_case,{conf,_,{Mod,_},_}}=Case|Cases], LastMod,
     PreCases ++ [Case|add_init_and_end_per_suite(Cases, NextMod, NextRef, FwMod)];
 add_init_and_end_per_suite([{skip_case,_}=Case|Cases], LastMod, LastRef, FwMod) ->
     [Case|add_init_and_end_per_suite(Cases, LastMod, LastRef, FwMod)];
+add_init_and_end_per_suite([{conf,Ref,Props,{FwMod,Func}}=Case|Cases], LastMod,
+			   LastRef, FwMod) ->
+    %% if Mod == FwMod, this conf test is (probably) a test case group where
+    %% the init- and end-functions are missing in the suite, and if so,
+    %% the suite name should be stored as {suite,Suite} in Props
+    case proplists:get_value(suite, Props) of
+	Suite when Suite =/= undefined, Suite =/= LastMod ->
+	    {PreCases, NextMod, NextRef} =
+		do_add_init_and_end_per_suite(LastMod, LastRef, Suite),
+	    Case1 = {conf,Ref,proplists:delete(suite,Props),{FwMod,Func}},
+	    PreCases ++ [Case1|add_init_and_end_per_suite(Cases, NextMod,
+							  NextRef, FwMod)];
+	_ ->
+	    [Case|add_init_and_end_per_suite(Cases, LastMod, LastRef, FwMod)]
+    end;
 add_init_and_end_per_suite([{conf,_,_,{Mod,_}}=Case|Cases], LastMod,
 			   LastRef, FwMod) when Mod =/= LastMod, Mod =/= FwMod ->
     {PreCases, NextMod, NextRef} =
-- 
cgit v1.2.3