mina icon indicating copy to clipboard operation
mina copied to clipboard

Use Mina instrumented builds in integration tests in CI

Open dkijania opened this issue 1 year ago • 20 comments

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

dkijania avatar Nov 30 '23 11:11 dkijania

!ci-nightly-me

dkijania avatar Nov 30 '23 11:11 dkijania

!ci-build-me

dkijania avatar Dec 14 '23 16:12 dkijania

!ci-nightly-me

dkijania avatar Dec 17 '23 16:12 dkijania

!ci-build-me

dkijania avatar Dec 30 '23 13:12 dkijania

!ci-build-me

dkijania avatar Jan 08 '24 12:01 dkijania

!ci-build-me

dkijania avatar Jan 09 '24 07:01 dkijania

!ci-build-me

dkijania avatar Jan 25 '24 09:01 dkijania

!ci-build-me

dkijania avatar Apr 09 '24 07:04 dkijania

!ci-build-me

dkijania avatar May 11 '24 11:05 dkijania

!ci-nightly-me

dkijania avatar Jun 19 '24 12:06 dkijania

!ci-build-me

dkijania avatar Jun 20 '24 21:06 dkijania

!ci-nightly-me

dkijania avatar Jun 27 '24 17:06 dkijania

!ci-build-me

dkijania avatar Jun 28 '24 13:06 dkijania

!ci-build-me

dkijania avatar Jul 01 '24 09:07 dkijania

!ci-build-me

dkijania avatar Jul 22 '24 19:07 dkijania

!ci-build-me

dkijania avatar Jul 22 '24 22:07 dkijania

!ci-nightly-me

dkijania avatar Jul 22 '24 22:07 dkijania

!ci-nightly-me

dkijania avatar Jul 23 '24 15:07 dkijania

!ci-build-me

dkijania avatar Jul 23 '24 16:07 dkijania

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" ;

mrmr1993 avatar Jul 23 '24 17:07 mrmr1993