code: def test_gcs_lifecycle(
      require_secrets: bool,
      tmp_path: Path,
      prefix: Optional[str],
      prep_gcs_test_creds: None,
  ) -> None:
      live_gcs_manager = get_live_gcs_manager(
          tmp_path, prefix, require_secrets
      )
  
      def post_delete_cb(storage_id: str) -> None:
          """Search gcs directly to ensure that a checkpoint is actually deleted."""
          storage_prefix = live_gcs_manager.get_storage_prefix(
              storage_id
          )
          found = [
              blob.name
              for blob in live_gcs_manager.bucket.list_blobs(
                  prefix=storage_prefix
              )
          ]
          if found:
              file_list = "    " + "\n    ".join(found)
              raise ValueError(
                  f"found {len(found)} files in bucket after delete:\n{file_list}"
              )
  
      util.run_storage_lifecycle_test(live_gcs_manager, post_delete_cb)
  
file_path: determined/harness/tests/storage/test_gcs.py
imports: import os
  import uuid
  from pathlib import Path
  from typing import Dict, Iterator, List, Optional
  import google.auth.exceptions
  import google.cloud.storage
  import pytest
  from determined import errors
  from determined.common import storage
  from determined.tensorboard.fetchers.gcs import GCSFetcher
  from tests.storage import util
label_desc: Use image node_id 3 for calling a global function with example usage: test_gcs_lifecycle(require_secrets, tmp_path, prefix, prep_gcs_test_creds) without return types