def test_dashboard_module_decorator(enable_test_module): head_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardHeadModule) agent_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardAgentModule) assert any(cls.__name__ == "TestHead" for cls in head_cls_list) assert any(cls.__name__ == "TestAgent" for cls in agent_cls_list) test_code = """ import os import ray.dashboard.utils as dashboard_utils os.environ.pop("RAY_DASHBOARD_MODULE_TEST") head_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardHeadModule) agent_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardAgentModule) print(head_cls_list) print(agent_cls_list) assert all(cls.__name__ != "TestHead" for cls in head_cls_list) assert all(cls.__name__ != "TestAgent" for cls in agent_cls_list) print("success") """ run_string_as_driver(test_code)
def _load_modules(self): """Load dashboard head modules.""" modules = [] head_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardHeadModule) for cls in head_cls_list: logger.info("Loading %s: %s", dashboard_utils.DashboardHeadModule.__name__, cls) c = cls(self) modules.append(c) logger.info("Loaded %d modules.", len(modules)) return modules
def _load_modules(self): """Load dashboard agent modules.""" modules = [] agent_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardAgentModule) for cls in agent_cls_list: logger.info("Loading %s: %s", dashboard_utils.DashboardAgentModule.__name__, cls) c = cls(self) dashboard_utils.ClassMethodRouteTable.bind(c) modules.append(c) logger.info("Loaded %d modules.", len(modules)) return modules
def test_class_method_route_table(enable_test_module): head_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardHeadModule) agent_cls_list = dashboard_utils.get_all_modules( dashboard_utils.DashboardAgentModule) test_head_cls = None for cls in head_cls_list: if cls.__name__ == "TestHead": test_head_cls = cls break assert test_head_cls is not None test_agent_cls = None for cls in agent_cls_list: if cls.__name__ == "TestAgent": test_agent_cls = cls break assert test_agent_cls is not None def _has_route(route, method, path): if isinstance(route, aiohttp.web.RouteDef): if route.method == method and route.path == path: return True return False def _has_static(route, path, prefix): if isinstance(route, aiohttp.web.StaticDef): if route.path == path and route.prefix == prefix: return True return False all_routes = dashboard_utils.ClassMethodRouteTable.routes() assert any(_has_route(r, "HEAD", "/test/route_head") for r in all_routes) assert any(_has_route(r, "GET", "/test/route_get") for r in all_routes) assert any(_has_route(r, "POST", "/test/route_post") for r in all_routes) assert any(_has_route(r, "PUT", "/test/route_put") for r in all_routes) assert any(_has_route(r, "PATCH", "/test/route_patch") for r in all_routes) assert any( _has_route(r, "DELETE", "/test/route_delete") for r in all_routes) assert any(_has_route(r, "*", "/test/route_view") for r in all_routes) # Test bind() bound_routes = dashboard_utils.ClassMethodRouteTable.bound_routes() assert len(bound_routes) == 0 dashboard_utils.ClassMethodRouteTable.bind( test_agent_cls.__new__(test_agent_cls)) bound_routes = dashboard_utils.ClassMethodRouteTable.bound_routes() assert any(_has_route(r, "POST", "/test/route_post") for r in bound_routes) assert all(not _has_route(r, "PUT", "/test/route_put") for r in bound_routes) # Static def should be in bound routes. routes.static("/test/route_static", "/path") bound_routes = dashboard_utils.ClassMethodRouteTable.bound_routes() assert any( _has_static(r, "/path", "/test/route_static") for r in bound_routes) # Test duplicated routes should raise exception. try: @routes.get("/test/route_get") def _duplicated_route(req): pass raise Exception("Duplicated routes should raise exception.") except Exception as ex: message = str(ex) assert "/test/route_get" in message assert "test_head.py" in message # Test exception in handler post_handler = None for r in bound_routes: if _has_route(r, "POST", "/test/route_post"): post_handler = r.handler break assert post_handler is not None loop = asyncio.get_event_loop() r = loop.run_until_complete(post_handler()) assert r.status == 200 resp = json.loads(r.body) assert resp["result"] is False assert "Traceback" in resp["msg"]