code: def test_put_with_http_options(ray_start_stop, option, override):
      """Submits a config with HTTP options specified.
  
      Trying to submit a config to the serve agent with the HTTP options modified should
      NOT fail:
        - If Serve is NOT running, HTTP options will be honored when starting Serve
        - If Serve is running, HTTP options will be ignored, and warning will be logged
        urging users to restart Serve if they want their options to take effect
      """
  
      pizza_import_path = (
          "ray.serve.tests.test_config_files.pizza.serve_dag"
      )
      world_import_path = (
          "ray.serve.tests.test_config_files.world.DagNode"
      )
      original_http_options_json = {
          "host": "127.0.0.1",
          "port": 8000,
          "root_path": "/serve",
      }
      original_serve_config_json = {
          "proxy_location": "EveryNode",
          "http_options": original_http_options_json,
          "applications": [
              {
                  "name": "app1",
                  "route_prefix": "/app1",
                  "import_path": pizza_import_path,
              },
              {
                  "name": "app2",
                  "route_prefix": "/app2",
                  "import_path": world_import_path,
              },
          ],
      }
      deploy_config_multi_app(
          original_serve_config_json, SERVE_HEAD_URL
      )
  
      # Wait for deployments to be up
      wait_for_condition(
          lambda: requests.post(
              "http://localhost:8000/serve/app1", json=["ADD", 2]
          ).text
          == "4 pizzas please!",
          timeout=15,
      )
      wait_for_condition(
          lambda: requests.post("http://localhost:8000/serve/app2").text
          == "wonderful world",
          timeout=15,
      )
  
      updated_serve_config_json = copy.deepcopy(
          original_serve_config_json
      )
      updated_serve_config_json[option] = override
  
      put_response = requests.put(
          SERVE_HEAD_URL, json=updated_serve_config_json, timeout=5
      )
      assert put_response.status_code == 200
  
      # Fetch Serve status and confirm that HTTP options are unchanged
      get_response = requests.get(SERVE_HEAD_URL, timeout=5)
      serve_details = ServeInstanceDetails.parse_obj(
          get_response.json()
      )
  
      original_http_options = HTTPOptionsSchema.parse_obj(
          original_http_options_json
      )
  
      assert original_http_options == serve_details.http_options.dict(
          exclude_unset=True
      )
  
      # Deployments should still be up
      assert (
          requests.post(
              "http://localhost:8000/serve/app1", json=["ADD", 2]
          ).text
          == "4 pizzas please!"
      )
      assert (
          requests.post("http://localhost:8000/serve/app2").text
          == "wonderful world"
      )
  
imports: import copy
  import grpc
  import re
  import os
  import sys
  from typing import Dict
  import pytest
  import requests
  import ray
  from ray import serve
  from ray._private.test_utils import wait_for_condition
  import ray._private.ray_constants
  from ray.util.state import list_actors
  from ray.serve._private.constants import SERVE_NAMESPACE
  from ray.serve.tests.conftest import *
  from ray.tests.conftest import *
  from ray._private.test_utils import generate_system_config_map
  from ray.serve.schema import ServeInstanceDetails, HTTPOptionsSchema
  from ray.serve._private.common import ApplicationStatus, DeploymentStatus, DeploymentStatusTrigger, ReplicaState, ProxyStatus
  from ray.serve.generated import serve_pb2, serve_pb2_grpc
label_desc: Use image node_id 10 for calling a global function with example usage: test_put_with_http_options(ray_start_stop, option, override) without return types