code: def test_function_descriptor():
      python_descriptor = ray._raylet.PythonFunctionDescriptor(
          "module_name", "function_name", "class_name", "function_hash"
      )
      python_descriptor2 = pickle.loads(pickle.dumps(python_descriptor))
      assert python_descriptor == python_descriptor2
      assert hash(python_descriptor) == hash(python_descriptor2)
      assert (
          python_descriptor.function_id
          == python_descriptor2.function_id
      )
      java_descriptor = ray._raylet.JavaFunctionDescriptor(
          "class_name", "function_name", "signature"
      )
      java_descriptor2 = pickle.loads(pickle.dumps(java_descriptor))
      assert java_descriptor == java_descriptor2
      assert python_descriptor != java_descriptor
      assert python_descriptor != object()
      d = {python_descriptor: 123}
      assert d.get(python_descriptor2) == 123
  
imports: import logging
  import os
  import pickle
  import random
  import sys
  import time
  import pytest
  import ray
  import ray.cluster_utils
  from ray._private.test_utils import SignalActor, client_test_enabled, get_error_message, run_string_as_driver
label_desc: Use image node_id 15 for calling a global function with example usage: test_function_descriptor() without return types