Skip to content

Commit 81be9bc

Browse files
authored
🎨E2E: fixing fail fast when websocket messages missing, fixing missing yield (#7602)
1 parent 6c947eb commit 81be9bc

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

packages/pytest-simcore/src/pytest_simcore/helpers/playwright.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

483485
def 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

Comments
 (0)