code: def test_middleware(ray_shutdown):
      from starlette.middleware import Middleware
      from starlette.middleware.cors import CORSMiddleware
  
      port = new_port()
      serve.start(
          http_options=dict(
              port=port,
              middlewares=[
                  Middleware(
                      CORSMiddleware,
                      allow_origins=["*"],
                      allow_methods=["*"],
                  )
              ],
          )
      )
      ray.get(
          block_until_http_ready.remote(
              f"http://127.0.0.1:{port}/-/routes"
          )
      )
  
      # Snatched several test cases from Starlette
      # https://github.com/encode/starlette/blob/master/tests/
      # middleware/test_cors.py
      headers = {
          "Origin": "https://example.org",
          "Access-Control-Request-Method": "GET",
      }
      root = f"http://localhost:{port}"
      resp = requests.options(root, headers=headers)
      assert resp.headers["access-control-allow-origin"] == "*"
  
      resp = requests.get(f"{root}/-/routes", headers=headers)
      assert resp.headers["access-control-allow-origin"] == "*"
  
imports: import logging
  import os
  import socket
  import sys
  import time
  import pytest
  import requests
  import ray
  import ray._private.gcs_utils
  from ray import serve
  from ray._private.services import new_port
  from ray._private.test_utils import convert_actor_state, run_string_as_driver, wait_for_condition
  from ray._raylet import GcsClient
  from ray.cluster_utils import Cluster, cluster_not_supported
  from ray.serve._private import api
  from ray.serve._private.constants import SERVE_CONTROLLER_NAME, SERVE_DEFAULT_APP_NAME, SERVE_NAMESPACE, SERVE_PROXY_NAME, SERVE_ROOT_URL_ENV_KEY
  from ray.serve._private.default_impl import create_cluster_node_info_cache
  from ray.serve._private.http_util import set_socket_reuse_port
  from ray.serve._private.utils import block_until_http_ready, format_actor_name
  from ray.serve.config import DeploymentMode, HTTPOptions, ProxyLocation
  from ray.serve.context import _get_global_client
  from ray.serve.exceptions import RayServeException
  from ray.serve.schema import ServeApplicationSchema, ServeDeploySchema
  from ray.tests.conftest import maybe_external_redis
  from ray.tests.conftest import ray_start_with_dashboard
  from ray.util.state import list_actors
label_desc: Use image node_id 11 for calling a global function with example usage: test_middleware(ray_shutdown) without return types