def test_running_service_details_make_status(scheduler_data: SchedulerData, service_message: str, service_state: ServiceState): running_service_details = RunningDynamicServiceDetails.from_scheduler_data( node_uuid=scheduler_data.node_uuid, scheduler_data=scheduler_data, service_state=service_state, service_message=service_message, ) print(running_service_details) assert running_service_details running_service_details_dict = running_service_details.dict( exclude_unset=True, by_alias=True) expected_running_service_details = { "boot_type": ServiceBootType.V2, "project_id": scheduler_data.project_id, "service_state": service_state, "service_message": service_message, "service_uuid": scheduler_data.node_uuid, "service_key": scheduler_data.key, "service_version": scheduler_data.version, "service_host": scheduler_data.service_name, "user_id": scheduler_data.user_id, "service_port": scheduler_data.service_port, } assert running_service_details_dict == expected_running_service_details
async def test_get_stack_status( ensure_scheduler_runs_once: Callable, scheduler: DynamicSidecarsScheduler, scheduler_data: SchedulerData, docker_swarm: None, mocked_dynamic_scheduler_events: None, ) -> None: await ensure_scheduler_runs_once() await scheduler.add_service(scheduler_data) stack_status = await scheduler.get_stack_status(scheduler_data.node_uuid) assert stack_status == RunningDynamicServiceDetails.from_scheduler_data( node_uuid=scheduler_data.node_uuid, scheduler_data=scheduler_data, service_state=ServiceState.PENDING, service_message="", )
async def test_get_stack_status_containers_are_starting( scheduler: DynamicSidecarsScheduler, scheduler_data: SchedulerData, mock_service_running: AsyncMock, docker_swarm: None, mocked_dynamic_scheduler_events: None, ) -> None: async with _assert_get_dynamic_services_mocked( scheduler, scheduler_data, mock_service_running, expected_response=httpx.Response(200, json={}), ) as stack_status: assert stack_status == RunningDynamicServiceDetails.from_scheduler_data( node_uuid=scheduler_data.node_uuid, scheduler_data=scheduler_data, service_state=ServiceState.STARTING, service_message="", )
async def test_get_stack_status_failing_sidecar( scheduler: DynamicSidecarsScheduler, scheduler_data: SchedulerData, docker_swarm: None, mocked_dynamic_scheduler_events: None, ) -> None: failing_message = "some_failing_message" scheduler_data.dynamic_sidecar.status.update_failing_status( failing_message) await scheduler.add_service(scheduler_data) stack_status = await scheduler.get_stack_status(scheduler_data.node_uuid) assert stack_status == RunningDynamicServiceDetails.from_scheduler_data( node_uuid=scheduler_data.node_uuid, scheduler_data=scheduler_data, service_state=ServiceState.FAILED, service_message=failing_message, )
async def test_get_stack_status_report_missing_statuses( scheduler: DynamicSidecarsScheduler, scheduler_data: SchedulerData, mock_service_running: AsyncMock, docker_swarm: None, mocked_dynamic_scheduler_events: None, ) -> None: async with _assert_get_dynamic_services_mocked( scheduler, scheduler_data, mock_service_running, expected_response=httpx.HTTPError("Mock raised error"), ) as stack_status: assert stack_status == RunningDynamicServiceDetails.from_scheduler_data( node_uuid=scheduler_data.node_uuid, scheduler_data=scheduler_data, service_state=ServiceState.STARTING, service_message= "There was an error while trying to fetch the stautes form the contianers", )
async def test_get_stack_status_ok( loop: asyncio.AbstractEventLoop, scheduler: DynamicSidecarsScheduler, scheduler_data: SchedulerData, mock_service_running: AsyncMock, docker_swarm: None, mocked_dynamic_scheduler_events: None, ) -> None: async with _assert_get_dynamic_services_mocked( scheduler, scheduler_data, mock_service_running, expected_response=httpx.Response( 200, json={"fake_entry": { "Status": "running" }}), ) as stack_status: assert stack_status == RunningDynamicServiceDetails.from_scheduler_data( node_uuid=scheduler_data.node_uuid, scheduler_data=scheduler_data, service_state=ServiceState.RUNNING, service_message="", )