33
33
-export ([pre_init_per_testcase /3 ]).
34
34
-export ([post_end_per_testcase /4 ]).
35
35
36
- -record (state , { node_name , reader , writer ,
36
+ -record (state , { print_init_and_done_for_testcases ,
37
+ node_name , reader , writer ,
37
38
current_line_num , out_file , url_file , group , suite ,
38
39
log_flags = [] }).
39
40
-include_lib (" exml/include/exml.hrl" ).
@@ -48,30 +49,42 @@ id(Opts) ->
48
49
init (_Id , Opts ) ->
49
50
Node = connect_mim_node (Opts ),
50
51
LogFlags = proplists :get_value (log , Opts , [suite ]),
51
- {ok , # state { node_name = Node , log_flags = LogFlags }}.
52
+ PrintInitDone = proplists :get_value (print_init_and_done_for_testcases , Opts ),
53
+ {ok , # state { node_name = Node , log_flags = LogFlags ,
54
+ print_init_and_done_for_testcases = PrintInitDone }}.
52
55
53
56
% % @doc Called before init_per_suite is called.
54
- pre_init_per_suite (Suite ,Config ,State ) ->
57
+ pre_init_per_suite (_Suite , Config , State = # state {node_name = undefined }) ->
58
+ {Config , State };
59
+ pre_init_per_suite (Suite , Config , State ) ->
55
60
maybe_print_log_on_mim_node (suite , starting , Suite , State ),
56
61
{Config , State # state {group = no_group , suite = Suite }}.
57
62
58
63
% % @doc Called before end_per_suite.
59
- post_end_per_suite (Suite ,_Config ,Return ,State ) ->
64
+ post_end_per_suite (_Suite , Config , Return , State = # state {node_name = undefined }) ->
65
+ {Config , State };
66
+ post_end_per_suite (Suite , _Config , Return , State ) ->
60
67
maybe_print_log_on_mim_node (suite , finishing , Suite , State ),
61
68
{Return , State # state {suite = no_suite }}.
62
69
63
70
% % @doc Called before each init_per_group.
64
- pre_init_per_group (Group ,Config ,State ) ->
71
+ pre_init_per_group (_Group , Config , State = # state {node_name = undefined }) ->
72
+ {Config , State };
73
+ pre_init_per_group (Group , Config , State ) ->
65
74
maybe_print_log_on_mim_node (group , starting , Group , State ),
66
75
{Config , State # state {group = Group }}.
67
76
68
77
% % @doc Called after each end_per_group.
69
- post_end_per_group (Group ,_Config ,Return ,State ) ->
78
+ post_end_per_group (_Group , _Config , Return , State = # state {node_name = undefined }) ->
79
+ {Return , State };
80
+ post_end_per_group (Group , _Config , Return , State ) ->
70
81
maybe_print_log_on_mim_node (group , finishing , Group , State ),
71
82
{Return , State # state {group = no_group }}.
72
83
73
84
% % @doc Called before each test case.
74
- pre_init_per_testcase (TC ,Config ,State = # state {}) ->
85
+ pre_init_per_testcase (_TC , Config , State = # state {node_name = undefined }) ->
86
+ {Config , State };
87
+ pre_init_per_testcase (TC , Config , State = # state {}) ->
75
88
maybe_print_log_on_mim_node (testcase , starting , TC , State ),
76
89
Dog = test_server :timetrap (test_server :seconds (10 )),
77
90
State3 = ensure_initialized (Config , State ),
@@ -80,14 +93,18 @@ pre_init_per_testcase(TC,Config,State=#state{}) ->
80
93
{Config , State4 }.
81
94
82
95
% % @doc Called after each test case.
83
- post_end_per_testcase (TC ,_Config ,Return ,State ) ->
96
+ post_end_per_testcase (_TC , _Config , Return , State = # state {node_name = undefined }) ->
97
+ {Return , State };
98
+ post_end_per_testcase (TC , _Config , Return , State ) ->
84
99
Dog = test_server :timetrap (test_server :seconds (10 )),
85
100
State2 = post_insert_line_numbers_into_report (State , TC ),
86
101
test_server :timetrap_cancel (Dog ),
87
102
maybe_print_log_on_mim_node (testcase , finishing , TC , State ),
88
103
{Return , State2 }.
89
104
90
105
% % @doc Called when the scope of the CTH is done
106
+ terminate (State = # state {node_name = undefined }) ->
107
+ State ;
91
108
terminate (State ) ->
92
109
insert_line_numbers_into_report (State ).
93
110
@@ -183,7 +200,7 @@ pre_insert_line_numbers_into_report(State=#state{node_name=Node, reader=Reader,
183
200
Message = io_lib :format (
184
201
" <font color=gray>INIT suite=~p group=~p testcase=~p </font>~n " ,
185
202
[Suite , Group , TC ]),
186
- file : write ( Writer , Message ),
203
+ maybe_file_write ( State , Writer , Message ),
187
204
State # state {current_line_num = CurrentLineNum2 }.
188
205
189
206
post_insert_line_numbers_into_report (State = # state {writer = undefined }, _TC ) ->
@@ -192,12 +209,17 @@ post_insert_line_numbers_into_report(State=#state{node_name=Node, reader=Reader,
192
209
current_line_num = CurrentLineNum , url_file = UrlFile ,
193
210
group = Group , suite = Suite }, TC ) ->
194
211
CurrentLineNum2 = read_and_write_lines (Node , Reader , Writer , CurrentLineNum ),
195
- add_log_link_to_line (UrlFile , CurrentLineNum2 , Node , " when finished" ),
212
+ case CurrentLineNum of
213
+ CurrentLineNum2 ->
214
+ skip ; % % Reduce noise in logs because nothing was logged
215
+ _ ->
216
+ add_log_link_to_line (UrlFile , CurrentLineNum2 , Node , " when finished" )
217
+ end ,
196
218
% % Write a message after the main part
197
219
Message = io_lib :format (
198
220
" <font color=gray>DONE suite=~p group=~p testcase=~p </font>~n " ,
199
221
[Suite , Group , TC ]),
200
- file : write ( Writer , Message ),
222
+ maybe_file_write ( State , Writer , Message ),
201
223
State # state {current_line_num = CurrentLineNum2 }.
202
224
203
225
insert_line_numbers_into_report (State = # state {node_name = Node , reader = Reader , writer = Writer ,
@@ -288,9 +310,13 @@ connect_mim_node(HookOpts) ->
288
310
erlang :set_cookie (Node , Cookie ),
289
311
% % this log message lands at misc_io.log.html file
290
312
ct :pal (" connecting to the '~p ' node (cookie: '~p ')" , [Node , Cookie ]),
291
- % % crash if cannot connect to the node
292
- true = net_kernel :connect_node (Node ),
293
- Node .
313
+ case net_kernel :connect_node (Node ) of
314
+ true ->
315
+ Node ;
316
+ _ ->
317
+ % % Could happen if we test not with all nodes enabled.
318
+ undefined
319
+ end .
294
320
295
321
maybe_print_log_on_mim_node (Type , Event , Name , # state {log_flags = LogFlags , node_name = Node }) ->
296
322
ValidEvents = [starting , finishing ],
@@ -307,3 +333,8 @@ maybe_print_log_on_mim_node(Type, Event, Name, #state{log_flags = LogFlags, node
307
333
_ ->
308
334
ok
309
335
end .
336
+
337
+ maybe_file_write (State = # state {print_init_and_done_for_testcases = true }, Writer , Message ) ->
338
+ file :write (Writer , Message );
339
+ maybe_file_write (_State , _Writer , _Message ) ->
340
+ ok .
0 commit comments