code: def test_basic_serialized_reference(
      one_worker_100MiB, use_ray_put, failure
  ):
      @ray.remote(max_retries=1)
      def pending(ref, dep):
          ray.get(ref[0])
          if failure:
              os._exit(0)
  
      array_oid = put_object(
          np.zeros(20 * 1024 * 1024, dtype=np.uint8), use_ray_put
      )
      signal = SignalActor.remote()
      obj_ref = pending.remote([array_oid], signal.wait.remote())
  
      # Remove the local reference.
      array_oid_bytes = array_oid.binary()
      del array_oid
  
      # Check that the remote reference pins the object.
      _fill_object_store_and_get(array_oid_bytes)
  
      # Fulfill the dependency, causing the task to finish.
      ray.get(signal.send.remote())
      try:
          ray.get(obj_ref)
          assert not failure
      except ray.exceptions.WorkerCrashedError:
          assert failure
  
      # Reference should be gone, check that array gets evicted.
      _fill_object_store_and_get(array_oid_bytes, succeed=False)
  
imports: import copy
  import logging
  import os
  import sys
  import time
  import numpy
  import pytest
  import ray
  import ray._private.gcs_utils
  import ray.cluster_utils
  from ray._private.test_utils import SignalActor, convert_actor_state, kill_actor_and_wait_for_failure, put_object, wait_for_condition, skip_flaky_core_test_premerge
label_desc: Use image node_id 12 for calling a global function with example usage: test_basic_serialized_reference(one_worker_100MiB, use_ray_put, failure) without return types