diff --git a/src/firebolt/model/database.py b/src/firebolt/model/database.py index 118db61bb8c..a02ac4ca943 100644 --- a/src/firebolt/model/database.py +++ b/src/firebolt/model/database.py @@ -88,7 +88,7 @@ def delete(self) -> None: """ for engine in self.get_attached_engines(): - if engine.current_status not in { + if engine.current_status in { EngineStatus.STARTING, EngineStatus.STOPPING, }: diff --git a/tests/unit/service/conftest.py b/tests/unit/service/conftest.py index 5dc058e1dd1..e6d3f9cb588 100644 --- a/tests/unit/service/conftest.py +++ b/tests/unit/service/conftest.py @@ -40,6 +40,26 @@ def mock_engine(region: str, server: str, instance_type_1: InstanceType) -> Engi ) +@fixture +def mock_engine_stopping( + region: str, server: str, instance_type_1: InstanceType +) -> Engine: + return Engine( + name="engine_1", + region=region, + spec=instance_type_1, + scale=2, + current_status=EngineStatus.STOPPING, + version="", + endpoint=server, + warmup=WarmupMethod.MINIMAL, + auto_stop=7200, + type=EngineType.GENERAL_PURPOSE, + _database_name="database", + _service=None, + ) + + @fixture def instance_type_1() -> InstanceType: return InstanceType( @@ -243,6 +263,11 @@ def get_engine_callback(mock_engine: Engine) -> Callable: return get_objects_from_db_callback([mock_engine]) +@fixture +def get_engine_callback_stopping(mock_engine_stopping: Engine) -> Callable: + return get_objects_from_db_callback([mock_engine_stopping]) + + @fixture def get_engine_not_found_callback(mock_engine: Engine) -> Callable: def do_mock( diff --git a/tests/unit/service/test_database.py b/tests/unit/service/test_database.py index df7038440ec..f5832dcbe42 100644 --- a/tests/unit/service/test_database.py +++ b/tests/unit/service/test_database.py @@ -1,10 +1,12 @@ from typing import Callable +from pytest import raises from pytest_httpx import HTTPXMock from firebolt.model.database import Database from firebolt.model.engine import Engine from firebolt.service.manager import ResourceManager +from firebolt.utils.exception import AttachedEngineInUseError def test_database_create( @@ -90,3 +92,23 @@ def test_database_update( database = mock_database.update(description="new description") assert database.description == "new description" + + +def test_database_delete_busy_engine( + httpx_mock: HTTPXMock, + resource_manager: ResourceManager, + system_engine_no_db_query_url: str, + get_engine_callback_stopping: Engine, + mock_database: Database, + instance_type_callback: Callable, + instance_type_url: str, +): + httpx_mock.add_callback(instance_type_callback, url=instance_type_url) + httpx_mock.add_callback( + get_engine_callback_stopping, url=system_engine_no_db_query_url + ) + + mock_database._service = resource_manager.engines + + with raises(AttachedEngineInUseError): + mock_database.delete()