@@ -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,125 @@ 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+ % % Not available in OTP-26. We don't use it so leave commented for now.
293+ % ct_hooks_order = CTHooksOrder0,
294+ enable_builtin_hooks = EnableBuiltinHooks0 ,
295+ auto_compile = ACs ,
296+ abort_if_missing_suites = AiMSs ,
297+ include = Incl ,
298+ multiply_timetraps = MTs ,
299+ scale_timetraps = STs ,
300+ create_priv_dir = PDs },
301+ NodeOpts ,LogDirsRun ,Specs ) ->
302+ % % We mirror ct_run:get_data_for_node to retrieve data from #testspec,
303+ % % but set the default values where appropriate.
304+ Label = proplists :get_value (Node , Labels ),
305+ % Profile = proplists:get_value(Node, Profiles),
306+ LogDir = case proplists :get_value (Node , LogDirs ) of
307+ undefined -> " ." ;
308+ Dir -> Dir
309+ end ,
310+ LogOpts = case proplists :get_value (Node , LogOptsList ) of
311+ undefined -> [];
312+ LOs -> LOs
313+ end ,
314+ BasicHtml = proplists :get_value (Node , BHs , false ),
315+ EscChars = proplists :get_value (Node , EscChs , true ),
316+ Stylesheet = proplists :get_value (Node , SSs ),
317+ Verbosity = case proplists :get_value (Node , VLvls ) of
318+ undefined -> [];
319+ Lvls -> Lvls
320+ end ,
321+ SilentConns = case proplists :get_value (Node , SilentConnsList ) of
322+ undefined -> [];
323+ SCs -> SCs
324+ end ,
325+ Cover = proplists :get_value (Node , CoverFs ),
326+ CoverStop = proplists :get_value (Node , CoverStops , true ),
327+ MT = proplists :get_value (Node , MTs , 1 ),
328+ ST = proplists :get_value (Node , STs , false ),
329+ CreatePrivDir = proplists :get_value (Node , PDs , auto_per_run ),
330+ % % For these two values we can't exactly mirror get_data_for_node.
331+ ConfigFiles =
332+ lists :foldr (fun ({N ,F },Fs ) when N == Node -> [F |Fs ];
333+ ({_N ,_F },Fs ) -> Fs ;
334+ (F ,Fs ) -> [F |Fs ]
335+ end ,[],Cfgs ),
336+ UsrConfigFiles =
314337 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 ) ->
338+ ({_N ,_F },Fs ) -> Fs ;
339+ (F ,Fs ) -> [{userconfig , F }|Fs ]
340+ end ,[],UsrCfgs ),
341+ EvHandlers = [{H ,A } || {N ,H ,A } <- EvHs , N == Node ],
342+ FiltCTHooks = [Hook || {N ,Hook } <- CTHooks , N == Node ],
343+ % CTHooksOrder = case CTHooksOrder0 of
344+ % undefined -> test;
345+ % _ -> CTHooksOrder0
346+ % end,
347+ EnableBuiltinHooks = case EnableBuiltinHooks0 of
348+ undefined -> true ;
349+ _ -> EnableBuiltinHooks0
350+ end ,
351+ AutoCompile = proplists :get_value (Node , ACs , true ),
352+ AbortIfMissing = proplists :get_value (Node , AiMSs , false ),
353+ Include = [I || {N ,I } <- Incl , N == Node ],
354+ % % We then build the ct:run_test/1 options list.
355+ RunTestOpts0 =
356+ [{label , Label } || Label =/= undefined ] ++
357+ [{stylesheet , Stylesheet } || Stylesheet =/= undefined ] ++
358+ [{cover , Cover } || Cover =/= undefined ] ++
359+ UsrConfigFiles ,
360+ RunTestOpts = [
361+ % {profile, Profile},
362+ {logdir , LogDir },
363+ {logopts , LogOpts },
364+ {basic_html , BasicHtml },
365+ {esc_chars , EscChars },
366+ {verbosity , Verbosity },
367+ {silent_connections , SilentConns },
368+ {cover_stop , CoverStop },
369+ {config , ConfigFiles },
370+ {event_handler , EvHandlers },
371+ {ct_hooks , FiltCTHooks },
372+ % {ct_hooks_order, CTHooksOrder},
373+ {enable_builtin_hooks , EnableBuiltinHooks },
374+ {auto_compile , AutoCompile },
375+ {abort_if_missing_suites , AbortIfMissing },
376+ {include , Include },
377+ {multiply_timetraps , MT },
378+ {scale_timetraps , ST },
379+ {create_priv_dir , CreatePrivDir }
380+ |RunTestOpts0 ],
381+ NO = {Node ,[{prepared_tests ,{Run ,Skip },Specs }|RunTestOpts ]},
382+ run_all (Rest ,TSRec ,[NO |NodeOpts ],[LogDir |LogDirsRun ],Specs );
383+ run_all ([],# testspec {
384+ logdir = AllLogDirs ,
385+ init = InitOptions ,
386+ event_handler = AllEvHs },
387+ NodeOpts ,LogDirsRun ,Specs ) ->
342388 Handlers = [{H ,A } || {Master ,H ,A } <- AllEvHs , Master == master ],
343389 MasterLogDir = case lists :keysearch (master ,1 ,AllLogDirs ) of
344390 {value ,{_ ,Dir }} -> Dir ;
345391 false -> " ."
346392 end ,
347393 log (tty ," Master Logdir" ," ~ts " ,[MasterLogDir ]),
348394 start_master (lists :reverse (NodeOpts ),Handlers ,MasterLogDir ,
349- LogDirs ,InitOptions ,Specs ),
395+ LogDirsRun ,InitOptions ,Specs ),
350396 ok .
351397
352398
0 commit comments