code: def test_put_get(shutdown_only, tmp_path, storage_type):
      with simulate_storage(storage_type) as storage_uri:
          ray.init(storage=storage_uri, num_gpus=1)
          client = storage.get_client("ns")
          client2 = storage.get_client("ns2")
          assert client.get("foo/bar") is None
          client.put("foo/bar", b"hello")
          client.put("baz", b"goodbye")
          client2.put("baz", b"goodbye!")
          assert client.get("foo/bar") == b"hello"
          assert client.get("baz") == b"goodbye"
          assert client2.get("baz") == b"goodbye!"
  
          # delete file
          assert client.delete("baz")
          assert client.get("baz") is None
          assert not client.delete("non_existing")
  
          # delete dir
          n_files = 3
          for i in range(n_files):
              assert client2.get(f"foo/bar{i}") is None
          for i in range(n_files):
              client2.put(f"foo/bar{i}", f"hello{i}".encode())
          for i in range(n_files):
              assert client2.get(f"foo/bar{i}") == f"hello{i}".encode()
          assert client2.delete_dir("foo")
          for i in range(n_files):
              assert client2.get(f"foo/bar{i}") is None
          assert not client2.delete_dir("non_existing")
  
imports: import os
  import sys
  import subprocess
  import urllib
  from pathlib import Path
  from packaging.version import parse
  import pyarrow.fs
  import pytest
  import ray
  import ray._private.storage
  from ray._private.test_utils import simulate_storage
  from ray._private.utils import _add_creatable_buckets_param_if_s3_uri, _get_pyarrow_version
  from ray.tests.conftest import *
label_desc: Use image node_id 10 for calling a global function with example usage: test_put_get(shutdown_only, tmp_path, storage_type) without return types