diff --git a/rock/sdk/sandbox/client.py b/rock/sdk/sandbox/client.py index 62f4ac43..5c70f92d 100644 --- a/rock/sdk/sandbox/client.py +++ b/rock/sdk/sandbox/client.py @@ -139,10 +139,11 @@ async def start(self): status = await self.get_status() logging.debug(f"Get status response: {status}") if status.is_alive: - break + return except Exception as e: logging.warning(f"Failed to get status, {str(e)}") - await asyncio.sleep(1) + await asyncio.sleep(3) + raise Exception(f"Failed to start sandbox within {self.config.startup_timeout}s") async def is_alive(self) -> IsAliveResponse: try: diff --git a/tests/integration/sdk/sandbox/test_sdk_client.py b/tests/integration/sdk/sandbox/test_sdk_client.py index 6bd2720d..318e3adb 100644 --- a/tests/integration/sdk/sandbox/test_sdk_client.py +++ b/tests/integration/sdk/sandbox/test_sdk_client.py @@ -3,6 +3,7 @@ import pytest from rock.sdk.sandbox.client import Sandbox +from rock.sdk.sandbox.config import SandboxConfig from tests.integration.conftest import SKIP_IF_NO_DOCKER @@ -35,6 +36,23 @@ async def test_arun_timeout(sandbox_instance: Sandbox): await sandbox_instance.stop() +@pytest.mark.need_admin +@SKIP_IF_NO_DOCKER +@pytest.mark.asyncio +async def test_sandbox_get_status(admin_remote_server): + config = SandboxConfig( + image="fake_image:latest", + memory="8g", + cpus=2.0, + base_url=f"{admin_remote_server.endpoint}:{admin_remote_server.port}", + startup_timeout=10, + ) + sandbox = Sandbox(config) + with pytest.raises(Exception) as exc_info: + await sandbox.start() + assert "Failed to start sandbox" in str(exc_info.value) + sandbox.stop() + @pytest.mark.need_admin @SKIP_IF_NO_DOCKER @pytest.mark.asyncio