Skip to content

Commit

Permalink
Added test for create_instance
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Mezentsev committed Feb 26, 2024
1 parent 47b3e82 commit aec760c
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/dstack/_internal/server/routers/runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ async def create_instance(
requirements=body.requirements,
)
except ComputeError as e:
raise ServerClientError(str(e))
raise ServerClientError(msg=str(e))

if instance is None:
raise ServerClientError(msg="Failed to create an instance")
Expand Down
6 changes: 3 additions & 3 deletions src/dstack/_internal/server/services/runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,6 @@ async def create_instance(
project, profile, requirements, exclude_not_available=True
)

if not offers:
return

# Backends doesn't suppport create_instance
backend_types = set((backend.TYPE for backend, _ in offers))
if all(
Expand All @@ -218,6 +215,9 @@ async def create_instance(
f"Backends {backends} doesn't support create_intance. Try to select other backends"
)

if not offers:
return

user_ssh_key = ssh_key
project_ssh_key = SSHKey(
public=project.ssh_public_key.strip(),
Expand Down
53 changes: 53 additions & 0 deletions src/tests/_internal/server/routers/test_runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -823,3 +823,56 @@ async def test_create_instance(self, test_db, session: AsyncSession):
"price": 1.0,
}
assert result == expected

@pytest.mark.asyncio
async def test_backend_does_not_support_create_instance(self, test_db, session: AsyncSession):
user = await create_user(session=session, global_role=GlobalRole.USER)
project = await create_project(session=session, owner=user)
await add_project_member(
session=session, project=project, user=user, project_role=ProjectRole.USER
)
request = CreateInstanceRequest(
pool_name=DEFAULT_POOL_NAME,
profile=Profile(name="test_profile"),
requirements=Requirements(resources=ResourcesSpec(cpu=1)),
ssh_key=SSHKey(public="test_public_key"),
)

with patch(
"dstack._internal.server.services.runs.get_run_plan_by_requirements"
) as run_plan_by_req:
offers = InstanceOfferWithAvailability(
backend=BackendType.AZURE,
instance=InstanceType(
name="instance",
resources=Resources(cpus=1, memory_mib=512, spot=False, gpus=[]),
),
region="eu",
price=1.0,
availability=InstanceAvailability.AVAILABLE,
)

backend = Mock()
backend.TYPE = BackendType.AZURE
backend.compute.return_value.get_offers.return_value = [offers]
backend.compute.return_value.create_instance.side_effect = NotImplementedError()
run_plan_by_req.return_value = [(backend, offers)]

response = client.post(
f"/api/project/{project.name}/runs/create_instance",
headers=get_auth_headers(user.token),
json=request.dict(),
)

assert response.status_code == 400

result = response.json()
expected = {
"detail": [
{
"msg": "Backends azure doesn't support create_intance. Try to select other backends",
"code": "error",
}
]
}
assert result == expected

0 comments on commit aec760c

Please sign in to comment.