@@ -50,12 +50,18 @@ static bool test_daemon_client_copy_status(Test_Daemon_Status *out_status,
5050 test_daemon_client_copy_cstr (out_status -> stderr_log_path ,
5151 sizeof (out_status -> stderr_log_path ),
5252 payload -> stderr_log_path ) &&
53+ test_daemon_client_copy_cstr (out_status -> case_name ,
54+ sizeof (out_status -> case_name ),
55+ payload -> case_name ) &&
5356 test_daemon_client_copy_cstr (out_status -> detail ,
5457 sizeof (out_status -> detail ),
5558 payload -> detail ) &&
5659 test_daemon_client_copy_cstr (out_status -> summary ,
5760 sizeof (out_status -> summary ),
58- payload -> summary );
61+ payload -> summary ) &&
62+ test_daemon_client_copy_cstr (out_status -> failure_summary ,
63+ sizeof (out_status -> failure_summary ),
64+ payload -> failure_summary );
5965}
6066
6167static bool test_daemon_client_copy_result (Test_Runner_Result * out_result ,
@@ -64,7 +70,10 @@ static bool test_daemon_client_copy_result(Test_Runner_Result *out_result,
6470 * out_result = (Test_Runner_Result ){0 };
6571 out_result -> ok = payload -> runner_ok != 0 ;
6672 out_result -> exit_code = payload -> exit_code ;
67- return test_daemon_client_copy_cstr (out_result -> preserved_workspace_path ,
73+ return test_daemon_client_copy_cstr (out_result -> case_name ,
74+ sizeof (out_result -> case_name ),
75+ payload -> case_name ) &&
76+ test_daemon_client_copy_cstr (out_result -> preserved_workspace_path ,
6877 sizeof (out_result -> preserved_workspace_path ),
6978 payload -> preserved_workspace_path ) &&
7079 test_daemon_client_copy_cstr (out_result -> stdout_log_path ,
@@ -75,7 +84,10 @@ static bool test_daemon_client_copy_result(Test_Runner_Result *out_result,
7584 payload -> stderr_log_path ) &&
7685 test_daemon_client_copy_cstr (out_result -> summary ,
7786 sizeof (out_result -> summary ),
78- payload -> summary );
87+ payload -> summary ) &&
88+ test_daemon_client_copy_cstr (out_result -> failure_summary ,
89+ sizeof (out_result -> failure_summary ),
90+ payload -> failure_summary );
7991}
8092
8193static int test_daemon_client_connect (void ) {
@@ -199,12 +211,13 @@ static void test_daemon_client_log_error_payload(const Test_Daemon_Error_Payload
199211 if ((Test_Daemon_Request_Kind )active -> kind == TEST_DAEMON_REQUEST_NONE ) return ;
200212
201213 nob_log (NOB_ERROR ,
202- "daemon state=%s active=%s policy=%s module=%s profile=%s duration=%lluus" ,
214+ "daemon state=%s active=%s policy=%s module=%s profile=%s case=%s duration=%lluus" ,
203215 test_daemon_state_name ((Test_Daemon_State )payload -> daemon_state ),
204216 test_daemon_request_kind_name ((Test_Daemon_Request_Kind )active -> kind ),
205217 test_daemon_admission_policy_name ((Test_Daemon_Admission_Policy )active -> admission_policy ),
206218 active -> module_name [0 ] != '\0' ? active -> module_name : "<none>" ,
207219 active -> profile_name [0 ] != '\0' ? active -> profile_name : "<none>" ,
220+ active -> case_name [0 ] != '\0' ? active -> case_name : "<all>" ,
208221 (unsigned long long )active -> active_duration_usec );
209222}
210223
@@ -291,7 +304,7 @@ bool test_daemon_client_cleanup_stale_artifacts(void) {
291304
292305static bool test_daemon_client_build_run_argv (const Test_Runner_Request * request ,
293306 int * out_argc ,
294- const char * argv_buf [3 ]) {
307+ const char * argv_buf [5 ]) {
295308 const Test_Runner_Module_Def * module = NULL ;
296309 const Test_Runner_Profile_Def * profile = NULL ;
297310 int argc = 0 ;
@@ -318,6 +331,11 @@ static bool test_daemon_client_build_run_argv(const Test_Runner_Request *request
318331 argv_buf [argc ++ ] = profile -> front_door_flag ;
319332 }
320333
334+ if (request -> case_name [0 ] != '\0' ) {
335+ argv_buf [argc ++ ] = "--case" ;
336+ argv_buf [argc ++ ] = request -> case_name ;
337+ }
338+
321339 * out_argc = argc ;
322340 return true;
323341}
@@ -372,14 +390,20 @@ static void test_daemon_client_log_watch_result(const Test_Daemon_Result_Payload
372390 if (payload -> stderr_log_path [0 ] != '\0' ) {
373391 fprintf (stderr , "[watch] stderr log: %s\n" , payload -> stderr_log_path );
374392 }
393+ if (payload -> failure_summary [0 ] != '\0' ) {
394+ fprintf (stderr , "%s" , payload -> failure_summary );
395+ if (payload -> failure_summary [strlen (payload -> failure_summary ) - 1 ] != '\n' ) {
396+ fputc ('\n' , stderr );
397+ }
398+ }
375399 fflush (stderr );
376400}
377401
378402bool test_daemon_client_run_request (const Test_Runner_Request * request ,
379403 Test_Runner_Result * out_result ) {
380404 Test_Daemon_Message message = {0 };
381405 Test_Daemon_Result_Payload payload = {0 };
382- const char * argv_buf [3 ] = {0 };
406+ const char * argv_buf [5 ] = {0 };
383407 int argc = 0 ;
384408 int fd = -1 ;
385409 bool ok = false;
@@ -437,6 +461,13 @@ bool test_daemon_client_run_request(const Test_Runner_Request *request,
437461 }
438462 memcpy (& payload , message .payload , sizeof (payload ));
439463 if (out_result && !test_daemon_client_copy_result (out_result , & payload )) goto defer ;
464+ if (payload .runner_ok == 0 && payload .failure_summary [0 ] != '\0' ) {
465+ fprintf (stderr , "%s" , payload .failure_summary );
466+ if (payload .failure_summary [strlen (payload .failure_summary ) - 1 ] != '\n' ) {
467+ fputc ('\n' , stderr );
468+ }
469+ fflush (stderr );
470+ }
440471 ok = payload .runner_ok != 0 ;
441472 goto defer ;
442473
0 commit comments