mina
mina copied to clipboard
Use Mina instrumented builds in integration tests in CI
This PR enables instrumentation in integration tests (both cloud and local). This requires fixing up coverage manager in cloud mode and add coverage manager to local one. Finally, added partial coverage files upload after the test
!ci-nightly-me
!ci-build-me
!ci-nightly-me
!ci-build-me
!ci-build-me
!ci-build-me
!ci-build-me
!ci-build-me
!ci-build-me
!ci-nightly-me
!ci-build-me
!ci-nightly-me
!ci-build-me
!ci-build-me
!ci-build-me
!ci-build-me
!ci-nightly-me
!ci-nightly-me
!ci-build-me
On reflection, it's probably best to put the coverage logic in the cleanup logic in test_executive.ml, like:
diff --git a/src/app/test_executive/test_executive.ml b/src/app/test_executive/test_executive.ml
index 744797807d..5b8054e48e 100644
--- a/src/app/test_executive/test_executive.ml
+++ b/src/app/test_executive/test_executive.ml
@@ -203,10 +203,13 @@ let report_test_errors ~log_error_set ~internal_error_set =
(* TODO: refactor cleanup system (smells like a monad for composing linear resources would help a lot) *)
let dispatch_cleanup ~logger ~pause_cleanup_func ~network_cleanup_func
- ~log_engine_cleanup_func ~lift_accumulated_errors_func ~net_manager_ref
- ~log_engine_ref ~network_state_writer_ref ~cleanup_deferred_ref ~exit_reason
- ~test_result : unit Deferred.t =
+ ~log_engine_cleanup_func ~lift_accumulated_errors_func ~stop_nodes_func
+ ~collect_coverage_func ~net_manager_ref ~log_engine_ref
+ ~network_state_writer_ref ~cleanup_deferred_ref ~exit_reason ~test_result :
+ unit Deferred.t =
let cleanup () : unit Deferred.t =
+ let%bind stop_nodes_result = stop_nodes_func () in
+ let%bind collect_coverage_result = collect_coverage_func () in
let%bind log_engine_cleanup_result =
Option.value_map !log_engine_ref
~default:(Deferred.Or_error.return ())
@@ -214,11 +217,24 @@ let dispatch_cleanup ~logger ~pause_cleanup_func ~network_cleanup_func
in
Option.value_map !network_state_writer_ref ~default:()
~f:Broadcast_pipe.Writer.close ;
- let%bind test_error_set = Malleable_error.lift_error_set_unit test_result in
let log_error_set = lift_accumulated_errors_func () in
- let internal_error_set =
+ let%bind internal_error_set =
+ let%bind test_error_set =
+ Malleable_error.lift_error_set_unit test_result
+ in
+ let%bind stop_nodes_error_set =
+ Malleable_error.lift_error_set_unit stop_nodes_result
+ in
+ let%bind collect_coverage_error_set =
+ Malleable_error.lift_error_set_unit collect_coverage_result
+ in
let open Test_error.Set in
- combine [ test_error_set; of_hard_or_error log_engine_cleanup_result ]
+ combine
+ [ test_error_set
+ ; of_hard_or_error log_engine_cleanup_result
+ ; stop_nodes_error_set
+ ; collect_coverage_error_set
+ ]
in
let%bind exit_code =
report_test_errors ~log_error_set ~internal_error_set
@@ -301,11 +317,24 @@ let main inputs =
Option.value_map !error_accumulator_ref ~default:Test_error.Set.empty
~f:Dsl.lift_accumulated_log_errors
in
+ let stop_nodes_func () =
+ if inputs.generate_code_coverage then
+ (* TODO: Stop all of the nodes *)
+ Malleable_error.ok_unit
+ else Malleable_error.ok_unit
+ in
+ let collect_coverage_func () =
+ if inputs.generate_code_coverage then
+ (* TODO: Collect coverage data *)
+ Malleable_error.ok_unit
+ else Malleable_error.ok_unit
+ in
dispatch_cleanup ~logger ~pause_cleanup_func
~network_cleanup_func:Engine.Network_manager.cleanup
~log_engine_cleanup_func:Engine.Log_engine.destroy
- ~lift_accumulated_errors_func ~net_manager_ref ~log_engine_ref
- ~network_state_writer_ref ~cleanup_deferred_ref
+ ~lift_accumulated_errors_func ~stop_nodes_func ~collect_coverage_func
+ ~net_manager_ref ~log_engine_ref ~network_state_writer_ref
+ ~cleanup_deferred_ref
in
(* run test while gracefully recovering handling exceptions and interrupts *)
[%log trace] "attaching signal handler" ;