def test_extra_fields_invalid_serve_status_schema(self): # Undefined fields should be forbidden in the schema serve_status_schema = self.get_valid_serve_status_schema() # Schema should be createable with valid fields serve_status_to_schema(serve_status_schema) # Schema should raise error when a nonspecified field is included with pytest.raises(ValidationError): ServeStatusSchema( app_status=serve_status_schema.app_status, deployment_statuses=[], fake_field=None, )
def test_status_schema_helpers(): @serve.deployment( num_replicas=1, route_prefix="/hello", ) def f1(): # The body of this function doesn't matter. See the comment in # test_deployment_to_schema_to_deployment. pass @serve.deployment( num_replicas=2, route_prefix="/hi", ) def f2(): pass f1._func_or_class = "ray.serve.tests.test_schema.global_f" f2._func_or_class = "ray.serve.tests.test_schema.global_f" client = serve.start() f1.deploy() f2.deploy() # Check statuses statuses = serve_status_to_schema(client.get_serve_status()).deployment_statuses deployment_names = {"f1", "f2"} for deployment_status in statuses: assert deployment_status.status in {"UPDATING", "HEALTHY"} assert deployment_status.name in deployment_names deployment_names.remove(deployment_status.name) assert len(deployment_names) == 0 serve.shutdown()
async def get_all_deployment_statuses(self, req: Request) -> Response: from ray.serve.context import get_global_client from ray.serve.schema import serve_status_to_schema client = get_global_client() serve_status_schema = serve_status_to_schema(client.get_serve_status()) return Response( text=serve_status_schema.json(), content_type="application/json", )
def test_valid_serve_status_schema(self): # Ensure a valid ServeStatusSchema can be generated serve_status_schema = self.get_valid_serve_status_schema() serve_status_to_schema(serve_status_schema)