Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/firebolt/model/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}:
Expand Down
25 changes: 25 additions & 0 deletions tests/unit/service/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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(
Expand Down
22 changes: 22 additions & 0 deletions tests/unit/service/test_database.py
Original file line number Diff line number Diff line change
@@ -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(
Expand Down Expand Up @@ -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()