ray/dashboard/modules/runtime_env/tests/test_runtime_env_agent.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

83 lines
3 KiB
Python
Raw Normal View History

import sys
import pytest
from typing import List, Tuple
from ray.dashboard.modules.runtime_env.runtime_env_agent import UriType, ReferenceTable
from ray.runtime_env import RuntimeEnv
def test_reference_table():
expected_unused_uris = []
expected_unused_runtime_env = str()
def uris_parser(runtime_env) -> Tuple[str, UriType]:
result = list()
result.append((runtime_env.working_dir(), UriType.WORKING_DIR))
py_module_uris = runtime_env.py_modules()
for uri in py_module_uris:
result.append((uri, UriType.PY_MODULES))
return result
def unused_uris_processor(unused_uris: List[Tuple[str, UriType]]) -> None:
nonlocal expected_unused_uris
assert expected_unused_uris
for unused in unused_uris:
assert unused in expected_unused_uris
expected_unused_uris.remove(unused)
assert not expected_unused_uris
def unused_runtime_env_processor(unused_runtime_env: str) -> None:
nonlocal expected_unused_runtime_env
assert expected_unused_runtime_env
assert expected_unused_runtime_env == unused_runtime_env
expected_unused_runtime_env = None
reference_table = ReferenceTable(
uris_parser, unused_uris_processor, unused_runtime_env_processor
)
runtime_env_1 = RuntimeEnv(
working_dir="s3://working_dir_1.zip",
py_modules=["s3://py_module_A.zip", "s3://py_module_B.zip"],
)
runtime_env_2 = RuntimeEnv(
working_dir="s3://working_dir_2.zip",
py_modules=["s3://py_module_A.zip", "s3://py_module_C.zip"],
)
# Add runtime env 1
reference_table.increase_reference(
runtime_env_1, runtime_env_1.serialize(), "raylet"
)
# Add runtime env 2
reference_table.increase_reference(
runtime_env_2, runtime_env_2.serialize(), "raylet"
)
# Add runtime env 1 by `client_server`, this will be skipped by reference table.
reference_table.increase_reference(
runtime_env_1, runtime_env_1.serialize(), "client_server"
)
# Remove runtime env 1
expected_unused_uris.append(("s3://working_dir_1.zip", UriType.WORKING_DIR))
expected_unused_uris.append(("s3://py_module_B.zip", UriType.PY_MODULES))
expected_unused_runtime_env = runtime_env_1.serialize()
reference_table.decrease_reference(
runtime_env_1, runtime_env_1.serialize(), "raylet"
)
assert not expected_unused_uris
assert not expected_unused_runtime_env
# Remove runtime env 2
expected_unused_uris.append(("s3://working_dir_2.zip", UriType.WORKING_DIR))
expected_unused_uris.append(("s3://py_module_A.zip", UriType.PY_MODULES))
expected_unused_uris.append(("s3://py_module_C.zip", UriType.PY_MODULES))
expected_unused_runtime_env = runtime_env_2.serialize()
reference_table.decrease_reference(
runtime_env_2, runtime_env_2.serialize(), "raylet"
)
assert not expected_unused_uris
assert not expected_unused_runtime_env
if __name__ == "__main__":
sys.exit(pytest.main(["-v", __file__]))