Skip to content

Commit 861e716

Browse files
committed
Make CI: Make ct_master handle all testspec instructions
1 parent 5da43ea commit 861e716

File tree

3 files changed

+120
-69
lines changed

3 files changed

+120
-69
lines changed

deps/rabbit/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,9 @@ define tpl_parallel_ct_test_spec
299299
{node, shard3, 'rabbit_shard3@localhost'}.
300300
{node, shard4, 'rabbit_shard4@localhost'}.
301301

302+
{auto_compile, false}.
303+
{ct_hooks, [cth_parallel_ct_detect_failure]}.
304+
302305
{define, 'Set1', [$(call comma_list,$(addsuffix _SUITE,$1))]}.
303306
{define, 'Set2', [$(call comma_list,$(addsuffix _SUITE,$2))]}.
304307
{define, 'Set3', [$(call comma_list,$(addsuffix _SUITE,$3))]}.

deps/rabbitmq_ct_helpers/src/ct_master_fork.erl

Lines changed: 114 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -177,23 +177,14 @@ run([TS|TestSpecs],AllowUserTerms,InclNodes,ExclNodes) when is_list(TS),
177177
Tests ->
178178
RunResult =
179179
lists:map(
180-
fun({Specs,TSRec=#testspec{logdir=AllLogDirs,
181-
config=StdCfgFiles,
182-
userconfig=UserCfgFiles,
183-
include=AllIncludes,
184-
init=AllInitOpts,
185-
event_handler=AllEvHs}}) ->
186-
AllCfgFiles =
187-
{StdCfgFiles,UserCfgFiles},
180+
fun({Specs,TSRec=#testspec{}}) ->
188181
RunSkipPerNode =
189182
ct_testspec:prepare_tests(TSRec),
190183
RunSkipPerNode2 =
191184
exclude_nodes(ExclNodes,RunSkipPerNode),
192185
TSList = if is_integer(hd(TS)) -> [TS];
193186
true -> TS end,
194-
{Specs,run_all(RunSkipPerNode2,AllLogDirs,
195-
AllCfgFiles,AllEvHs,
196-
AllIncludes,[],[],AllInitOpts,TSList)}
187+
{Specs,run_all(RunSkipPerNode2,TSRec,[],[],TSList)}
197188
end, Tests),
198189
RunResult ++ run(TestSpecs,AllowUserTerms,InclNodes,ExclNodes)
199190
end;
@@ -258,19 +249,11 @@ run_on_node([TS|TestSpecs],AllowUserTerms,Node) when is_list(TS),is_atom(Node) -
258249
Tests ->
259250
RunResult =
260251
lists:map(
261-
fun({Specs,TSRec=#testspec{logdir=AllLogDirs,
262-
config=StdCfgFiles,
263-
init=AllInitOpts,
264-
include=AllIncludes,
265-
userconfig=UserCfgFiles,
266-
event_handler=AllEvHs}}) ->
267-
AllCfgFiles = {StdCfgFiles,UserCfgFiles},
252+
fun({Specs,TSRec=#testspec{}}) ->
268253
{Run,Skip} = ct_testspec:prepare_tests(TSRec,Node),
269254
TSList = if is_integer(hd(TS)) -> [TS];
270255
true -> TS end,
271-
{Specs,run_all([{Node,Run,Skip}],AllLogDirs,
272-
AllCfgFiles,AllEvHs,
273-
AllIncludes, [],[],AllInitOpts,TSList)}
256+
{Specs,run_all([{Node,Run,Skip}],TSRec,[],[],TSList)}
274257
end, Tests),
275258
RunResult ++ run_on_node(TestSpecs,AllowUserTerms,Node)
276259
end;
@@ -291,62 +274,124 @@ run_on_node(TestSpecs,Node) ->
291274

292275

293276

294-
run_all([{Node,Run,Skip}|Rest],AllLogDirs,
295-
{AllStdCfgFiles, AllUserCfgFiles}=AllCfgFiles,
296-
AllEvHs,AllIncludes,NodeOpts,LogDirs,InitOptions,Specs) ->
297-
LogDir =
298-
lists:foldl(fun({N,Dir},_Found) when N == Node ->
299-
Dir;
300-
({_N,_Dir},Found) ->
301-
Found;
302-
(Dir,".") ->
303-
Dir;
304-
(_Dir,Found) ->
305-
Found
306-
end,".",AllLogDirs),
307-
308-
StdCfgFiles =
309-
lists:foldr(fun({N,F},Fs) when N == Node -> [F|Fs];
310-
({_N,_F},Fs) -> Fs;
311-
(F,Fs) -> [F|Fs]
312-
end,[],AllStdCfgFiles),
313-
UserCfgFiles =
277+
run_all([{Node,Run,Skip}|Rest],TSRec=#testspec{label = Labels,
278+
% profile = Profiles,
279+
logdir = LogDirs,
280+
logopts = LogOptsList,
281+
basic_html = BHs,
282+
esc_chars = EscChs,
283+
stylesheet = SSs,
284+
verbosity = VLvls,
285+
silent_connections = SilentConnsList,
286+
cover = CoverFs,
287+
cover_stop = CoverStops,
288+
config = Cfgs,
289+
userconfig = UsrCfgs,
290+
event_handler = EvHs,
291+
ct_hooks = CTHooks,
292+
ct_hooks_order = CTHooksOrder0,
293+
enable_builtin_hooks = EnableBuiltinHooks0,
294+
auto_compile = ACs,
295+
abort_if_missing_suites = AiMSs,
296+
include = Incl,
297+
multiply_timetraps = MTs,
298+
scale_timetraps = STs,
299+
create_priv_dir = PDs},
300+
NodeOpts,LogDirsRun,Specs) ->
301+
%% We mirror ct_run:get_data_for_node to retrieve data from #testspec,
302+
%% but set the default values where appropriate.
303+
Label = proplists:get_value(Node, Labels),
304+
% Profile = proplists:get_value(Node, Profiles),
305+
LogDir = case proplists:get_value(Node, LogDirs) of
306+
undefined -> ".";
307+
Dir -> Dir
308+
end,
309+
LogOpts = case proplists:get_value(Node, LogOptsList) of
310+
undefined -> [];
311+
LOs -> LOs
312+
end,
313+
BasicHtml = proplists:get_value(Node, BHs, false),
314+
EscChars = proplists:get_value(Node, EscChs, true),
315+
Stylesheet = proplists:get_value(Node, SSs),
316+
Verbosity = case proplists:get_value(Node, VLvls) of
317+
undefined -> [];
318+
Lvls -> Lvls
319+
end,
320+
SilentConns = case proplists:get_value(Node, SilentConnsList) of
321+
undefined -> [];
322+
SCs -> SCs
323+
end,
324+
Cover = proplists:get_value(Node, CoverFs),
325+
CoverStop = proplists:get_value(Node, CoverStops, true),
326+
MT = proplists:get_value(Node, MTs, 1),
327+
ST = proplists:get_value(Node, STs, false),
328+
CreatePrivDir = proplists:get_value(Node, PDs, auto_per_run),
329+
%% For these two values we can't exactly mirror get_data_for_node.
330+
ConfigFiles =
331+
lists:foldr(fun({N,F},Fs) when N == Node -> [F|Fs];
332+
({_N,_F},Fs) -> Fs;
333+
(F,Fs) -> [F|Fs]
334+
end,[],Cfgs),
335+
UsrConfigFiles =
314336
lists:foldr(fun({N,F},Fs) when N == Node -> [{userconfig, F}|Fs];
315-
({_N,_F},Fs) -> Fs;
316-
(F,Fs) -> [{userconfig, F}|Fs]
317-
end,[],AllUserCfgFiles),
318-
319-
Includes = lists:foldr(fun({N,I},Acc) when N =:= Node ->
320-
[I|Acc];
321-
({_,_},Acc) ->
322-
Acc;
323-
(I,Acc) ->
324-
[I | Acc]
325-
end, [], AllIncludes),
326-
EvHs =
327-
lists:foldr(fun({N,H,A},Hs) when N == Node -> [{H,A}|Hs];
328-
({_N,_H,_A},Hs) -> Hs;
329-
({H,A},Hs) -> [{H,A}|Hs]
330-
end,[],AllEvHs),
331-
332-
NO = {Node,[{prepared_tests,{Run,Skip},Specs},
333-
{ct_hooks, [cth_parallel_ct_detect_failure]},
334-
{logdir,LogDir},
335-
{include, Includes},
336-
{config,StdCfgFiles},
337-
{event_handler,EvHs}] ++ UserCfgFiles},
338-
run_all(Rest,AllLogDirs,AllCfgFiles,AllEvHs,AllIncludes,
339-
[NO|NodeOpts],[LogDir|LogDirs],InitOptions,Specs);
340-
run_all([],AllLogDirs,_,AllEvHs,_AllIncludes,
341-
NodeOpts,LogDirs,InitOptions,Specs) ->
337+
({_N,_F},Fs) -> Fs;
338+
(F,Fs) -> [{userconfig, F}|Fs]
339+
end,[],UsrCfgs),
340+
EvHandlers = [{H,A} || {N,H,A} <- EvHs, N==Node],
341+
FiltCTHooks = [Hook || {N,Hook} <- CTHooks, N==Node],
342+
CTHooksOrder = case CTHooksOrder0 of
343+
undefined -> test;
344+
_ -> CTHooksOrder0
345+
end,
346+
EnableBuiltinHooks = case EnableBuiltinHooks0 of
347+
undefined -> true;
348+
_ -> EnableBuiltinHooks0
349+
end,
350+
AutoCompile = proplists:get_value(Node, ACs, true),
351+
AbortIfMissing = proplists:get_value(Node, AiMSs, false),
352+
Include = [I || {N,I} <- Incl, N==Node],
353+
%% We then build the ct:run_test/1 options list.
354+
RunTestOpts0 =
355+
[{label, Label} || Label =/= undefined] ++
356+
[{stylesheet, Stylesheet} || Stylesheet =/= undefined] ++
357+
[{cover, Cover} || Cover =/= undefined] ++
358+
UsrConfigFiles,
359+
RunTestOpts = [
360+
% {profile, Profile},
361+
{logdir, LogDir},
362+
{logopts, LogOpts},
363+
{basic_html, BasicHtml},
364+
{esc_chars, EscChars},
365+
{verbosity, Verbosity},
366+
{silent_connections, SilentConns},
367+
{cover_stop, CoverStop},
368+
{config, ConfigFiles},
369+
{event_handler, EvHandlers},
370+
{ct_hooks, FiltCTHooks},
371+
{ct_hooks_order, CTHooksOrder},
372+
{enable_builtin_hooks, EnableBuiltinHooks},
373+
{auto_compile, AutoCompile},
374+
{abort_if_missing_suites, AbortIfMissing},
375+
{include, Include},
376+
{multiply_timetraps, MT},
377+
{scale_timetraps, ST},
378+
{create_priv_dir, CreatePrivDir}
379+
|RunTestOpts0],
380+
NO = {Node,[{prepared_tests,{Run,Skip},Specs}|RunTestOpts]},
381+
run_all(Rest,TSRec,[NO|NodeOpts],[LogDir|LogDirsRun],Specs);
382+
run_all([],#testspec{
383+
logdir=AllLogDirs,
384+
init=InitOptions,
385+
event_handler=AllEvHs},
386+
NodeOpts,LogDirsRun,Specs) ->
342387
Handlers = [{H,A} || {Master,H,A} <- AllEvHs, Master == master],
343388
MasterLogDir = case lists:keysearch(master,1,AllLogDirs) of
344389
{value,{_,Dir}} -> Dir;
345390
false -> "."
346391
end,
347392
log(tty,"Master Logdir","~ts",[MasterLogDir]),
348393
start_master(lists:reverse(NodeOpts),Handlers,MasterLogDir,
349-
LogDirs,InitOptions,Specs),
394+
LogDirsRun,InitOptions,Specs),
350395
ok.
351396

352397

deps/rabbitmq_mqtt/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ define tpl_parallel_ct_test_spec
122122
{node, shard3, 'rabbit_shard3@localhost'}.
123123
{node, shard4, 'rabbit_shard4@localhost'}.
124124

125+
{auto_compile, false}.
126+
{ct_hooks, [cth_parallel_ct_detect_failure]}.
127+
125128
{define, 'Set1', [$(call comma_list,$(addsuffix _SUITE,$1))]}.
126129
{define, 'Set2', [$(call comma_list,$(addsuffix _SUITE,$2))]}.
127130
{define, 'Set3', [$(call comma_list,$(addsuffix _SUITE,$3))]}.

0 commit comments

Comments
 (0)