@@ -401,6 +401,7 @@ class SocketIONodeProgressCompleteWaiter:
401401 )
402402 _last_progress_time : datetime = field (default_factory = lambda : datetime .now (tz = UTC ))
403403 _received_messages : list [SocketIOEvent ] = field (default_factory = list )
404+ _result : bool = False
404405
405406 def __call__ (self , message : str ) -> bool :
406407 # socket.io encodes messages like so
@@ -422,6 +423,7 @@ def __call__(self, message: str) -> bool:
422423 self .node_id ,
423424 decoded_message .obj ["service_state" ],
424425 )
426+ self ._result = False
425427 return True
426428 if decoded_message .name == _OSparcMessages .NODE_PROGRESS .value :
427429 node_progress_event = retrieve_node_progress_from_decoded_message (
@@ -449,13 +451,11 @@ def __call__(self, message: str) -> bool:
449451 f"{ json .dumps ({k : round (v , 2 ) for k , v in self ._current_progress .items ()})} " ,
450452 )
451453
452- progress_completed = self .got_expected_node_progress_types () and all (
453- round (progress , 1 ) == 1.0
454- for progress in self ._current_progress .values ()
455- )
456- if progress_completed :
454+ done = self ._completed_successfully ()
455+ if done :
456+ self ._result = True
457457 self .logger .info ("✅ Service start completed successfully!! ✅" )
458- return progress_completed
458+ return done
459459
460460 time_since_last_progress = datetime .now (UTC ) - self ._last_progress_time
461461 if time_since_last_progress > self .max_idle_timeout :
@@ -469,15 +469,17 @@ def __call__(self, message: str) -> bool:
469469
470470 return False
471471
472- def got_expected_node_progress_types (self ) -> bool :
472+ def _completed_successfully (self ) -> bool :
473473 return all (
474474 progress_type in self ._current_progress
475475 for progress_type in NodeProgressType .required_types_for_started_service ()
476+ ) and all (
477+ round (progress , 1 ) == 1.0 for progress in self ._current_progress .values ()
476478 )
477479
478480 @property
479- def number_received_messages (self ) -> int :
480- return len ( self ._received_messages )
481+ def success (self ) -> bool :
482+ return self ._result
481483
482484
483485def wait_for_service_endpoint_responding (
@@ -597,7 +599,9 @@ def expected_service_running(
597599 msg = f"Waiting for node to run. Timeout: { timeout } " ,
598600 )
599601 )
602+
600603 if is_service_legacy :
604+ waiter = None
601605 ctx .logger .info (
602606 "⚠️ Legacy service detected. We are skipping websocket messages in this case! ⚠️"
603607 )
@@ -612,7 +616,11 @@ def expected_service_running(
612616 service_running = ServiceRunning (iframe_locator = None )
613617 if press_start_button :
614618 _trigger_service_start (page , node_id )
619+ yield service_running
620+
615621 elapsed_time = arrow .utcnow () - started
622+ if waiter and not waiter .success :
623+ pytest .fail ("❌ Service failed starting! ❌" )
616624
617625 wait_for_service_endpoint_responding (
618626 node_id ,
@@ -652,6 +660,7 @@ def wait_for_service_running(
652660 )
653661 )
654662 if is_service_legacy :
663+ waiter = None
655664 ctx .logger .info (
656665 "⚠️ Legacy service detected. We are skipping websocket messages in this case! ⚠️"
657666 )
@@ -666,6 +675,9 @@ def wait_for_service_running(
666675 if press_start_button :
667676 _trigger_service_start (page , node_id )
668677 elapsed_time = arrow .utcnow () - started
678+
679+ if waiter and not waiter .success :
680+ pytest .fail ("❌ Service failed starting! ❌" )
669681 wait_for_service_endpoint_responding (
670682 node_id ,
671683 api_request_context = page .request ,
0 commit comments