code: def test_pg_pending_gang_requests_basic(shutdown_only):
      ray.init(num_cpus=1)
  
      # Create a pg that's pending.
      pg = ray.util.placement_group(
          [{"CPU": 1}] * 3, strategy="STRICT_SPREAD"
      )
      try:
          ray.get(pg.ready(), timeout=2)
      except TimeoutError:
          pass
  
      pg_id = pg.id.hex()
  
      stub = _autoscaler_state_service_stub()
  
      def verify():
          state = get_cluster_resource_state(stub)
          assert_gang_requests(
              state,
              [
                  GangResourceRequest(
                      [{"CPU": 1}] * 3,
                      details=[pg_id, "STRICT_SPREAD", "PENDING"],
                  )
              ],
          )
          return True
  
      wait_for_condition(verify)
  
imports: import os
  import sys
  import time
  from dataclasses import dataclass
  from typing import Callable, List, Optional, Tuple
  import pytest
  import ray
  import ray._private.ray_constants
  from ray._private.test_utils import wait_for_condition
  from ray.autoscaler.v2.schema import ClusterStatus, LaunchRequest, NodeInfo, ResourceRequestByCount
  from ray.autoscaler.v2.sdk import get_cluster_status, request_cluster_resources
  from ray.autoscaler.v2.tests.util import get_available_resources, get_cluster_resource_state, get_total_resources, report_autoscaling_state
  from ray.core.generated import autoscaler_pb2, autoscaler_pb2_grpc
  from ray.core.generated.autoscaler_pb2 import ClusterResourceState, NodeStatus
  from ray.util.state.api import list_nodes
label_desc: Use image node_id 10 for calling a global function with example usage: test_pg_pending_gang_requests_basic(shutdown_only) and returns: True