ray/dashboard/modules/job/tests/test_http_job_server.py

106 lines
3.5 KiB
Python
Raw Normal View History

import sys
import logging
import requests
import pytest
from pytest_lazyfixture import lazy_fixture
from ray.dashboard.tests.conftest import * # noqa
from ray._private.test_utils import (format_web_url,
wait_until_server_available)
from ray._private.job_manager import JobStatus
from ray.dashboard.modules.job.data_types import (
JobSubmitRequest, JobSubmitResponse, JobStatusRequest, JobStatusResponse,
JobLogsRequest, JobLogsResponse, JobSpec)
logger = logging.getLogger(__name__)
def _setup_webui_url(ray_start_with_dashboard):
webui_url = ray_start_with_dashboard["webui_url"]
assert wait_until_server_available(webui_url)
webui_url = format_web_url(webui_url)
return webui_url
@pytest.mark.parametrize(
"working_dir",
[lazy_fixture("local_working_dir"),
lazy_fixture("s3_working_dir")])
def test_submit_job(disable_aiohttp_cache, enable_test_module,
ray_start_with_dashboard, working_dir):
webui_url = _setup_webui_url(ray_start_with_dashboard)
job_spec = JobSpec(
runtime_env=working_dir["runtime_env"],
entrypoint=working_dir["entrypoint"],
metadata=dict())
submit_request = JobSubmitRequest(job_spec=job_spec)
resp = requests.post(f"{webui_url}/submit", json=submit_request.dict())
resp.raise_for_status()
data = resp.json()["data"]["data"]
response = JobSubmitResponse(**data)
job_id = response.job_id
status_request = JobStatusRequest(job_id=job_id)
resp = requests.get(f"{webui_url}/status", json=status_request.dict())
resp.raise_for_status()
data = resp.json()["data"]["data"]
response = JobStatusResponse(**data)
assert response.job_status == JobStatus.SUCCEEDED
logs_request = JobLogsRequest(job_id=job_id)
resp = requests.get(f"{webui_url}/logs", json=logs_request.dict())
resp.raise_for_status()
data = resp.json()["data"]["data"]
response = JobLogsResponse(**data)
assert response.stdout == working_dir["expected_stdout"]
assert response.stderr == working_dir["expected_stderr"]
def test_job_metadata(disable_aiohttp_cache, enable_test_module,
ray_start_with_dashboard):
webui_url = _setup_webui_url(ray_start_with_dashboard)
print_metadata_cmd = (
"python -c\""
"import ray;"
"ray.init();"
"job_config=ray.worker.global_worker.core_worker.get_job_config();"
"print(dict(sorted(job_config.metadata.items())))"
"\"")
job_spec = JobSpec(
runtime_env={},
entrypoint=print_metadata_cmd,
metadata={
"key1": "val1",
"key2": "val2"
})
submit_request = JobSubmitRequest(job_spec=job_spec)
resp = requests.post(f"{webui_url}/submit", json=submit_request.dict())
resp.raise_for_status()
data = resp.json()["data"]["data"]
response = JobSubmitResponse(**data)
job_id = response.job_id
status_request = JobStatusRequest(job_id=job_id)
resp = requests.get(f"{webui_url}/status", json=status_request.dict())
resp.raise_for_status()
data = resp.json()["data"]["data"]
response = JobStatusResponse(**data)
assert response.job_status == JobStatus.SUCCEEDED
logs_request = JobLogsRequest(job_id=job_id)
resp = requests.get(f"{webui_url}/logs", json=logs_request.dict())
resp.raise_for_status()
data = resp.json()["data"]["data"]
response = JobLogsResponse(**data)
assert response.stdout == "{'key1': 'val1', 'key2': 'val2'}"
if __name__ == "__main__":
sys.exit(pytest.main(["-v", __file__]))