Skip to content

Commit aec760c

Browse files
author
Sergey Mezentsev
committed
Added test for create_instance
1 parent 47b3e82 commit aec760c

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

src/dstack/_internal/server/routers/runs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ async def create_instance(
109109
requirements=body.requirements,
110110
)
111111
except ComputeError as e:
112-
raise ServerClientError(str(e))
112+
raise ServerClientError(msg=str(e))
113113

114114
if instance is None:
115115
raise ServerClientError(msg="Failed to create an instance")

src/dstack/_internal/server/services/runs.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,6 @@ async def create_instance(
204204
project, profile, requirements, exclude_not_available=True
205205
)
206206

207-
if not offers:
208-
return
209-
210207
# Backends doesn't suppport create_instance
211208
backend_types = set((backend.TYPE for backend, _ in offers))
212209
if all(
@@ -218,6 +215,9 @@ async def create_instance(
218215
f"Backends {backends} doesn't support create_intance. Try to select other backends"
219216
)
220217

218+
if not offers:
219+
return
220+
221221
user_ssh_key = ssh_key
222222
project_ssh_key = SSHKey(
223223
public=project.ssh_public_key.strip(),

src/tests/_internal/server/routers/test_runs.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -823,3 +823,56 @@ async def test_create_instance(self, test_db, session: AsyncSession):
823823
"price": 1.0,
824824
}
825825
assert result == expected
826+
827+
@pytest.mark.asyncio
828+
async def test_backend_does_not_support_create_instance(self, test_db, session: AsyncSession):
829+
user = await create_user(session=session, global_role=GlobalRole.USER)
830+
project = await create_project(session=session, owner=user)
831+
await add_project_member(
832+
session=session, project=project, user=user, project_role=ProjectRole.USER
833+
)
834+
request = CreateInstanceRequest(
835+
pool_name=DEFAULT_POOL_NAME,
836+
profile=Profile(name="test_profile"),
837+
requirements=Requirements(resources=ResourcesSpec(cpu=1)),
838+
ssh_key=SSHKey(public="test_public_key"),
839+
)
840+
841+
with patch(
842+
"dstack._internal.server.services.runs.get_run_plan_by_requirements"
843+
) as run_plan_by_req:
844+
offers = InstanceOfferWithAvailability(
845+
backend=BackendType.AZURE,
846+
instance=InstanceType(
847+
name="instance",
848+
resources=Resources(cpus=1, memory_mib=512, spot=False, gpus=[]),
849+
),
850+
region="eu",
851+
price=1.0,
852+
availability=InstanceAvailability.AVAILABLE,
853+
)
854+
855+
backend = Mock()
856+
backend.TYPE = BackendType.AZURE
857+
backend.compute.return_value.get_offers.return_value = [offers]
858+
backend.compute.return_value.create_instance.side_effect = NotImplementedError()
859+
run_plan_by_req.return_value = [(backend, offers)]
860+
861+
response = client.post(
862+
f"/api/project/{project.name}/runs/create_instance",
863+
headers=get_auth_headers(user.token),
864+
json=request.dict(),
865+
)
866+
867+
assert response.status_code == 400
868+
869+
result = response.json()
870+
expected = {
871+
"detail": [
872+
{
873+
"msg": "Backends azure doesn't support create_intance. Try to select other backends",
874+
"code": "error",
875+
}
876+
]
877+
}
878+
assert result == expected

0 commit comments

Comments
 (0)