code: def test_multi_node_churn(
      enable_test_module, disable_aiohttp_cache, ray_start_cluster_head
  ):
      cluster: Cluster = ray_start_cluster_head
      assert wait_until_server_available(cluster.webui_url) is True
      webui_url = format_web_url(cluster.webui_url)
  
      def cluster_chaos_monkey():
          worker_nodes = []
          while True:
              time.sleep(5)
              if len(worker_nodes) < 2:
                  worker_nodes.append(cluster.add_node())
                  continue
              should_add_node = random.randint(0, 1)
              if should_add_node:
                  worker_nodes.append(cluster.add_node())
              else:
                  node_index = random.randrange(0, len(worker_nodes))
                  node_to_remove = worker_nodes.pop(node_index)
                  cluster.remove_node(node_to_remove)
  
      def get_index():
          resp = requests.get(webui_url)
          resp.raise_for_status()
  
      def get_nodes():
          resp = requests.get(webui_url + "/nodes?view=summary")
          resp.raise_for_status()
          summary = resp.json()
          assert summary["result"] is True, summary["msg"]
          assert summary["data"]["summary"]
  
      t = threading.Thread(target=cluster_chaos_monkey, daemon=True)
      t.start()
  
      t_st = datetime.now()
      duration = timedelta(seconds=60)
      while datetime.now() < t_st + duration:
          get_index()
          time.sleep(2)
  
file_path: ray/dashboard/modules/node/tests/test_node.py
imports: import os
  import sys
  import logging
  import requests
  import time
  import traceback
  import random
  import pytest
  import ray
  import threading
  from datetime import datetime, timedelta
  from ray.cluster_utils import Cluster
  from ray.dashboard.modules.node.node_consts import UPDATE_NODES_INTERVAL_SECONDS
  from ray.dashboard.tests.conftest import *
  from ray._private.test_utils import format_web_url, wait_until_server_available, wait_for_condition
label_desc: Use image node_id 4 for calling a global function with example usage: test_multi_node_churn(enable_test_module, disable_aiohttp_cache, ray_start_cluster_head) without return types