Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
edoakes committed Mar 26, 2021
1 parent a347583 commit 617fcf3
Show file tree
Hide file tree
Showing 5 changed files with 154 additions and 6 deletions.
8 changes: 8 additions & 0 deletions python/ray/serve/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ py_test(
deps = [":serve_lib"],
)

py_test(
name = "test_get_deployment",
size = "medium",
srcs = serve_tests_srcs,
tags = ["exclusive"],
deps = [":serve_lib"],
)

py_test(
name = "test_advanced",
size = "medium",
Expand Down
4 changes: 2 additions & 2 deletions python/ray/serve/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
accept_batch, connect, start, get_replica_context, get_handle,
shadow_traffic, set_traffic, delete_backend, list_backends, create_backend,
get_backend_config, update_backend_config, list_endpoints, delete_endpoint,
create_endpoint, shutdown, ingress, deployment)
create_endpoint, shutdown, ingress, deployment, get_deployment)
from ray.serve.batching import batch
from ray.serve.config import BackendConfig, HTTPOptions
from ray.serve.utils import ServeRequest
Expand All @@ -18,5 +18,5 @@
"shadow_traffic", "set_traffic", "delete_backend", "list_backends",
"create_backend", "get_backend_config", "update_backend_config",
"list_endpoints", "delete_endpoint", "create_endpoint", "shutdown",
"ingress", "deployment"
"ingress", "deployment", "get_deployment"
]
5 changes: 2 additions & 3 deletions python/ray/serve/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1318,15 +1318,14 @@ def get_deployment(name: str):
ServeDeployment
"""
try:
backend_info, version, route = _get_global_client(
).get_deployment_info(name)
backend_info, route = _get_global_client().get_deployment_info(name)
except KeyError:
raise KeyError(f"Deployment {name} was not found. "
"Did you call Deployment.deploy()?")
return make_deployment_cls(
backend_info.replica_config.backend_def,
name,
backend_info.backend_config,
version=version,
version=backend_info.version,
init_args=backend_info.replica_config.init_args,
ray_actor_options=backend_info.replica_config.ray_actor_options)
2 changes: 1 addition & 1 deletion python/ray/serve/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def __init__(self, backend_def, *init_args, ray_actor_options=None):
self.is_blocking = _callable_is_blocking(backend_def)
self.is_asgi_app = hasattr(backend_def, "_serve_asgi_app")
self.path_prefix = getattr(backend_def, "_serve_path_prefix", None)
self.init_args = list(init_args)
self.init_args = init_args
if ray_actor_options is None:
self.ray_actor_options = {}
else:
Expand Down
141 changes: 141 additions & 0 deletions python/ray/serve/tests/test_get_deployment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import os

import pytest

import ray
from ray import serve


def test_basic_get(serve_instance):
name = "test"

@serve.deployment(name, version="1")
def d(*args):
return "1", os.getpid()

with pytest.raises(KeyError):
serve.get_deployment(name)

d.deploy()
val1, pid1 = ray.get(d.get_handle().remote())
assert val1 == "1"

del d

d2 = serve.get_deployment(name)
val2, pid2 = ray.get(d2.get_handle().remote())
assert val2 == "1"
assert pid2 == pid1


def test_get_after_delete(serve_instance):
name = "test"

@serve.deployment(name, version="1")
def d(*args):
return "1", os.getpid()

d.deploy()
del d

d2 = serve.get_deployment(name)
d2.delete()
del d2

with pytest.raises(KeyError):
serve.get_deployment(name)


def test_deploy_new_version(serve_instance):
name = "test"

@serve.deployment(name, version="1")
def d(*args):
return "1", os.getpid()

d.deploy()
val1, pid1 = ray.get(d.get_handle().remote())
assert val1 == "1"

del d

d2 = serve.get_deployment(name)
d2.options(version="2").deploy()
val2, pid2 = ray.get(d2.get_handle().remote())
assert val2 == "1"
assert pid2 != pid1


def test_deploy_empty_version(serve_instance):
name = "test"

@serve.deployment(name)
def d(*args):
return "1", os.getpid()

d.deploy()
val1, pid1 = ray.get(d.get_handle().remote())
assert val1 == "1"

del d

d2 = serve.get_deployment(name)
d2.deploy()
val2, pid2 = ray.get(d2.get_handle().remote())
assert val2 == "1"
assert pid2 != pid1


def test_init_args(serve_instance):
name = "test"

@serve.deployment(name)
class D:
def __init__(self, val):
self._val = val

def __call__(self, *arg):
return self._val, os.getpid()

D.deploy("1")
val1, pid1 = ray.get(D.get_handle().remote())
assert val1 == "1"

del D

D2 = serve.get_deployment(name)
D2.deploy()
val2, pid2 = ray.get(D2.get_handle().remote())
assert val2 == "1"
assert pid2 != pid1

D2 = serve.get_deployment(name)
D2.deploy("2")
val3, pid3 = ray.get(D2.get_handle().remote())
assert val3 == "2"
assert pid3 != pid2


def test_scale_replicas(serve_instance):
name = "test"

@serve.deployment(name)
def d(*args):
return os.getpid()

def check_num_replicas(num):
handle = serve.get_deployment(name).get_handle()
assert len(set(ray.get([handle.remote() for _ in range(50)]))) == num

d.deploy()
check_num_replicas(1)
del d

d2 = serve.get_deployment(name)
d2.options(num_replicas=2).deploy()
check_num_replicas(2)


if __name__ == "__main__":
import sys
sys.exit(pytest.main(["-v", "-s", __file__]))

0 comments on commit 617fcf3

Please sign in to comment.