ray/dashboard/modules/tests/test_dashboard_sdk.py
shrekris-anyscale 75b7465ba4
[serve] Reject Ray client addresses when submitting via Dashboard (#23339)
Some commands in the Serve CLI use Ray client and some commands ping the Ray dashboard; however, all commands read `RAY_ADDRESS` to get the address. This change raises a nice exception if the user accidentally passes a Ray client address as the Ray Dashboard address.
2022-03-21 11:17:51 -05:00

95 lines
3.2 KiB
Python

import pytest
import sys
import os
from ray.dashboard.modules.dashboard_sdk import (
parse_runtime_env_args,
parse_cluster_info,
)
class TestParseRuntimeEnvArgs:
@pytest.mark.skipif(
sys.platform == "win32", reason="File path incorrect on Windows."
)
def test_runtime_env_valid(self):
config_file_name = os.path.join(
os.path.dirname(__file__), "test_config_files", "basic_runtime_env.yaml"
)
assert parse_runtime_env_args(runtime_env=config_file_name) == {
"py_modules": ["pm1", "pm2"],
"working_dir": "wd",
}
def test_runtime_env_json_valid(self):
runtime_env = '{"py_modules": ["pm1", "pm2"], "working_dir": "wd"}'
assert parse_runtime_env_args(runtime_env_json=runtime_env) == {
"py_modules": ["pm1", "pm2"],
"working_dir": "wd",
}
@pytest.mark.skipif(
sys.platform == "win32", reason="File path incorrect on Windows."
)
def test_runtime_env_and_json(self):
config_file_name = os.path.join(
os.path.dirname(__file__), "test_config_files", "basic_runtime_env.yaml"
)
runtime_env_json = '{"py_modules": ["pm1", "pm2"], "working_dir": "wd"}'
with pytest.raises(ValueError):
parse_runtime_env_args(
runtime_env=config_file_name, runtime_env_json=runtime_env_json
)
def test_working_dir_valid(self):
assert parse_runtime_env_args(working_dir="wd") == {"working_dir": "wd"}
@pytest.mark.skipif(
sys.platform == "win32", reason="File path incorrect on Windows."
)
def test_working_dir_override(self):
config_file_name = os.path.join(
os.path.dirname(__file__), "test_config_files", "basic_runtime_env.yaml"
)
assert parse_runtime_env_args(
runtime_env=config_file_name, working_dir="wd2"
) == {"py_modules": ["pm1", "pm2"], "working_dir": "wd2"}
runtime_env = '{"py_modules": ["pm1", "pm2"], "working_dir": "wd2"}'
assert parse_runtime_env_args(
runtime_env_json=runtime_env, working_dir="wd2"
) == {"py_modules": ["pm1", "pm2"], "working_dir": "wd2"}
def test_all_none(self):
assert parse_runtime_env_args() == {}
def test_get_job_submission_client_cluster_info():
# Test that the name for get_job_submission_client_cluster_info stays the
# same
from ray.dashboard.modules.dashboard_sdk import ( # noqa: F401
get_job_submission_client_cluster_info,
)
def test_parse_cluster_address_validation():
"""Test that parse_cluster_info validates address schemes."""
# Check that "auto" is rejected
with pytest.raises(ValueError):
parse_cluster_info("auto")
# Check that invalid schemes raise a ValueError
invalid_schemes = ["ray"]
for scheme in invalid_schemes:
with pytest.raises(ValueError):
parse_cluster_info(f"{scheme}://localhost:10001")
# Check that valid schemes are OK
valid_schemes = ["http", "https"]
for scheme in valid_schemes:
parse_cluster_info(f"{scheme}://localhost:10001")
if __name__ == "__main__":
sys.exit(pytest.main(["-v", __file__]))