|
8 | 8 | from lightning_cloud.openapi import (
|
9 | 9 | Body8,
|
10 | 10 | Gridv1ImageSpec,
|
| 11 | + IdGetBody, |
11 | 12 | V1BuildSpec,
|
12 | 13 | V1DependencyFileInfo,
|
13 | 14 | V1Drive,
|
|
25 | 26 | V1PackageManager,
|
26 | 27 | V1ProjectClusterBinding,
|
27 | 28 | V1PythonDependencyInfo,
|
| 29 | + V1QueueServerType, |
28 | 30 | V1SourceType,
|
29 | 31 | V1UserRequestedComputeConfig,
|
30 | 32 | V1Work,
|
@@ -304,6 +306,62 @@ def test_call_with_work_app(self, lightningapps, monkeypatch, tmpdir):
|
304 | 306 | project_id="test-project-id", app_id=mock.ANY, id=mock.ANY, body=mock.ANY
|
305 | 307 | )
|
306 | 308 |
|
| 309 | + @mock.patch("lightning_app.runners.backends.cloud.LightningClient", mock.MagicMock()) |
| 310 | + @pytest.mark.parametrize("lightningapps", [[], [MagicMock()]]) |
| 311 | + def test_call_with_queue_server_type_specified(self, lightningapps, monkeypatch, tmpdir): |
| 312 | + mock_client = mock.MagicMock() |
| 313 | + mock_client.projects_service_list_memberships.return_value = V1ListMembershipsResponse( |
| 314 | + memberships=[V1Membership(name="test-project", project_id="test-project-id")] |
| 315 | + ) |
| 316 | + mock_client.lightningapp_instance_service_list_lightningapp_instances.return_value = ( |
| 317 | + V1ListLightningappInstancesResponse(lightningapps=[]) |
| 318 | + ) |
| 319 | + cloud_backend = mock.MagicMock() |
| 320 | + cloud_backend.client = mock_client |
| 321 | + monkeypatch.setattr(backends, "CloudBackend", mock.MagicMock(return_value=cloud_backend)) |
| 322 | + monkeypatch.setattr(cloud, "LocalSourceCodeDir", mock.MagicMock()) |
| 323 | + monkeypatch.setattr(cloud, "_prepare_lightning_wheels_and_requirements", mock.MagicMock()) |
| 324 | + app = mock.MagicMock() |
| 325 | + app.flows = [] |
| 326 | + app.frontend = {} |
| 327 | + cloud_runtime = cloud.CloudRuntime(app=app, entrypoint_file="entrypoint.py") |
| 328 | + cloud_runtime._check_uploaded_folder = mock.MagicMock() |
| 329 | + |
| 330 | + # without requirements file |
| 331 | + # setting is_file to False so requirements.txt existence check will return False |
| 332 | + monkeypatch.setattr(Path, "is_file", lambda *args, **kwargs: False) |
| 333 | + monkeypatch.setattr(cloud, "Path", Path) |
| 334 | + cloud_runtime.dispatch() |
| 335 | + |
| 336 | + # calling with no env variable set |
| 337 | + body = IdGetBody( |
| 338 | + cluster_id=None, |
| 339 | + desired_state=V1LightningappInstanceState.STOPPED, |
| 340 | + env=[], |
| 341 | + name=mock.ANY, |
| 342 | + queue_server_type=V1QueueServerType.UNSPECIFIED, |
| 343 | + ) |
| 344 | + client = cloud_runtime.backend.client |
| 345 | + client.lightningapp_v2_service_create_lightningapp_release_instance.assert_called_once_with( |
| 346 | + project_id="test-project-id", app_id=mock.ANY, id=mock.ANY, body=body |
| 347 | + ) |
| 348 | + |
| 349 | + # calling with env variable set to http |
| 350 | + monkeypatch.setattr(cloud, "CLOUD_QUEUE_TYPE", "http") |
| 351 | + cloud_runtime.backend.client.reset_mock() |
| 352 | + cloud_runtime.dispatch() |
| 353 | + body = IdGetBody( |
| 354 | + cluster_id=None, |
| 355 | + desired_state=V1LightningappInstanceState.STOPPED, |
| 356 | + env=[], |
| 357 | + name=mock.ANY, |
| 358 | + queue_server_type=V1QueueServerType.HTTP, |
| 359 | + ) |
| 360 | + client = cloud_runtime.backend.client |
| 361 | + client.lightningapp_v2_service_create_lightningapp_release_instance.assert_called_once_with( |
| 362 | + project_id="test-project-id", app_id=mock.ANY, id=mock.ANY, body=body |
| 363 | + ) |
| 364 | + |
307 | 365 | @mock.patch("lightning_app.runners.backends.cloud.LightningClient", mock.MagicMock())
|
308 | 366 | @pytest.mark.parametrize("lightningapps", [[], [MagicMock()]])
|
309 | 367 | def test_call_with_work_app_and_attached_drives(self, lightningapps, monkeypatch, tmpdir):
|
|
0 commit comments