Files
ray-project--ray/python/ray/tests/test_healthcheck.py
T
2026-07-13 13:17:40 +08:00

74 lines
2.1 KiB
Python

# coding: utf-8
import logging
import signal
import subprocess
import sys
import time
import pytest
import ray
from ray._private import ray_constants
import psutil
logger = logging.getLogger(__name__)
def test_healthcheck():
res = subprocess.run(["ray", "health-check"])
assert res.returncode != 0
ray.init()
res = subprocess.run(["ray", "health-check"])
assert res.returncode == 0, res.stdout
# Kill GCS to test ray health-check.
all_processes = ray._private.worker._global_node.all_processes
assert ray_constants.PROCESS_TYPE_GCS_SERVER in all_processes
gcs_proc_info = all_processes[ray_constants.PROCESS_TYPE_GCS_SERVER][0]
gcs_proc = psutil.Process(gcs_proc_info.process.pid)
gcs_proc.kill()
gcs_proc.wait(10)
res = subprocess.run(["ray", "health-check"])
assert res.returncode != 0
ray.shutdown()
res = subprocess.run(["ray", "health-check"])
assert res.returncode != 0
@pytest.mark.skipif(sys.platform == "win32", reason="Uses unix SIGKILL")
def test_healthcheck_ray_client_server():
res = subprocess.run(["ray", "health-check", "--component", "ray_client_server"])
assert res.returncode != 0
ray.init()
res = subprocess.run(["ray", "health-check", "--component", "ray_client_server"])
assert res.returncode != 0, res.stdout
client_server_handle = subprocess.Popen(
[sys.executable, "-m", "ray.util.client.server"]
)
# Gotta give the server time to initialize.
time.sleep(5)
res = subprocess.run(["ray", "health-check", "--component", "ray_client_server"])
assert res.returncode == 0, res.stdout
client_server_handle.send_signal(signal.SIGKILL)
time.sleep(ray._private.ray_constants.HEALTHCHECK_EXPIRATION_S)
res = subprocess.run(["ray", "health-check", "--component", "ray_client_server"])
assert res.returncode != 0, res.stdout
ray.shutdown()
res = subprocess.run(["ray", "health-check", "--component", "ray_client_server"])
assert res.returncode != 0, res.stdout
if __name__ == "__main__":
sys.exit(pytest.main(["-sv", __file__]))