2424-behavior (gen_fsm ).
2525
2626% % API
27- -export ([start /4 ,
27+ -export ([start /5 ,
2828 send_event /2 ,
2929 stop /0 ]).
3030
4848 terminate /3 ,
4949 code_change /4 ]).
5050
51- -include (" rt.hrl" ).
5251-include_lib (" eunit/include/eunit.hrl" ).
5352
5453-type test_type () :: {new | old }.
7069 remaining_versions :: [string ()],
7170 test_results :: [term ()],
7271 continue_on_fail :: boolean (),
73- reporter_pid :: pid ()}).
72+ log_dir :: string (),
73+ reporter_pids :: pid ()}).
7474
7575-deprecated ([{metadata ,0 ,next_major_release }]).
7676
7979% %%===================================================================
8080
8181% % @doc Start the test runner
82- start (TestPlan , Properties , ContinueOnFail , ReporterPid ) ->
83- Args = [TestPlan , Properties , ContinueOnFail , ReporterPid ],
82+ start (TestPlan , Properties , ContinueOnFail , ReporterPids , LogDir ) ->
83+ Args = [TestPlan , Properties , ContinueOnFail , ReporterPids , LogDir ],
8484 gen_fsm :start_link (? MODULE , Args , []).
8585
8686send_event (Pid , Msg ) ->
@@ -103,7 +103,7 @@ metadata() ->
103103
104104% % @doc Read the storage schedule and go to idle.
105105% % compose_test_datum(Version, Project, undefined, undefined) ->
106- init ([TestPlan , Properties , ContinueOnFail , ReporterPid ]) ->
106+ init ([TestPlan , Properties , ContinueOnFail , ReporterPid , LogDir ]) ->
107107 lager :debug (" Started riak_test_runnner with pid ~p (continue on fail: ~p )" , [self (), ContinueOnFail ]),
108108 Project = list_to_binary (rt_config :get (rt_project , " undefined" )),
109109 Backend = rt_test_plan :get (backend , TestPlan ),
@@ -144,7 +144,8 @@ init([TestPlan, Properties, ContinueOnFail, ReporterPid]) ->
144144 prereq_check = PreReqCheck ,
145145 group_leader = group_leader (),
146146 continue_on_fail = ContinueOnFail ,
147- reporter_pid = ReporterPid },
147+ reporter_pids = ReporterPid ,
148+ log_dir = LogDir },
148149 {ok , setup , State , 0 }.
149150
150151% % @doc there are no all-state events for this fsm
@@ -219,19 +220,22 @@ setup(_Event, _State) ->
219220 ok .
220221
221222execute ({nodes_deployed , _ }, State ) ->
222- # state {test_module = TestModule ,
223+ # state {test_plan = TestPlan ,
224+ test_module = TestModule ,
223225 test_type = TestType ,
224226 properties = Properties ,
225227 setup_modfun = SetupModFun ,
226228 confirm_modfun = ConfirmModFun ,
227- test_timeout = TestTimeout } = State ,
229+ test_timeout = TestTimeout ,
230+ log_dir = OutDir } = State ,
228231 lager :notice (" Running ~s " , [TestModule ]),
229232 lager :notice (" Properties: ~p " , [Properties ]),
230233
231234 StartTime = os :timestamp (),
232235 % % Perform test setup which includes clustering of the nodes if
233236 % % required by the test properties. The cluster information is placed
234237 % % into the properties record and returned by the `setup' function.
238+ start_lager_backend (rt_test_plan :get_name (TestPlan ), OutDir ),
235239 SetupResult = maybe_setup_test (TestModule , TestType , SetupModFun , Properties ),
236240 UpdState = maybe_execute_test (SetupResult , TestModule , TestType , ConfirmModFun , StartTime , State ),
237241
@@ -451,10 +455,22 @@ function_name(FunName, TestModule, Arity, Default) when is_atom(TestModule) ->
451455 {Default , FunName }
452456 end .
453457
454- % % remove_lager_backend() ->
455- % % gen_event:delete_handler(lager_event, lager_file_backend, []),
456- % % gen_event:delete_handler(lager_event, riak_test_lager_backend, []).
458+ start_lager_backend (TestName , Outdir ) ->
459+ LogLevel = rt_config :get (lager_level , info ),
460+ case Outdir of
461+ undefined -> ok ;
462+ _ ->
463+ gen_event :add_handler (lager_event , lager_file_backend ,
464+ {filename :join ([Outdir , TestName , " riak_test.log" ]),
465+ LogLevel , 10485760 , " $D0" , 1 }),
466+ lager :set_loglevel (lager_file_backend , LogLevel )
467+ end ,
468+ gen_event :add_handler (lager_event , riak_test_lager_backend , [LogLevel , false ]),
469+ lager :set_loglevel (riak_test_lager_backend , LogLevel ).
457470
471+ stop_lager_backend () ->
472+ gen_event :delete_handler (lager_event , lager_file_backend , []),
473+ gen_event :delete_handler (lager_event , riak_test_lager_backend , []).
458474
459475% % A return of `fail' must be converted to a non normal exit since
460476% % status is determined by `rec_loop'.
@@ -508,6 +524,8 @@ report_cleanup_and_notify(Result, CleanUp, State=#state{test_plan=TestPlan,
508524 ResultMessage = test_result_message (Result ),
509525 rt_reporter :send_result (test_result ({TestPlan , ResultMessage , Duration })),
510526 maybe_cleanup (CleanUp , State ),
527+ {ok , Logs } = stop_lager_backend (),
528+ _Log = unicode :characters_to_binary (Logs ),
511529 Notification = {test_complete , TestPlan , self (), ResultMessage },
512530 riak_test_executor :send_event (Notification ).
513531
0 commit comments