code: def test_verify_node_options():
      _verify_node_options(
          node_options={"permitted": "127.0.0.1"},
          block_keys={"not_permitted": None},
          node_type="head",
      )
  
      with pytest.raises(
          ValueError,
          match=re.compile(
              "Setting the option 'node_ip_address' for head nodes is not allowed.*"
              "This option is controlled by Ray on Spark"
          ),
      ):
          _verify_node_options(
              node_options={"node_ip_address": "127.0.0.1"},
              block_keys={"node_ip_address": None},
              node_type="head",
          )
  
      with pytest.raises(
          ValueError,
          match=re.compile(
              "Setting the option 'not_permitted' for worker nodes is not allowed.*"
              "You should set the 'permitted' option instead",
          ),
      ):
          _verify_node_options(
              node_options={"not_permitted": "bad"},
              block_keys={"not_permitted": "permitted"},
              node_type="worker",
          )
  
file_path: ray/python/ray/tests/spark/test_utils.py
imports: from unittest.mock import patch
  import os
  import re
  import sys
  import pytest
  from ray.util.spark.utils import get_spark_task_assigned_physical_gpus, _calc_mem_per_ray_worker_node, _get_avail_mem_per_ray_worker_node
  from ray.util.spark.cluster_init import _convert_ray_node_options, _verify_node_options, _append_default_spilling_dir_config
label_desc: Use image node_id 5 for calling a global function with example usage: test_verify_node_options() without return types