code: def test_info_many(inject_failure_rate, s3root, prefixes, expected):
      with S3(inject_failure_rate=inject_failure_rate) as s3:
          # 1) test the non-missing case
  
          # to test result ordering, make sure we are requesting
          # keys in a non-lexicographic order
          not_missing = [
              url
              for url, v in expected.items()
              if v[None].size is not None
          ]
          urls = list(sorted(not_missing, reverse=True))
          s3objs = s3.info_many(urls)
  
          # results should come out in the order of keys requested
          assert urls == [e.url for e in s3objs]
          assert_results(
              s3objs,
              {k: expected[k] for k in not_missing},
              info_only=True,
          )
  
          # 2) test with missing items, default case
          if not_missing != list(expected):
              with pytest.raises(MetaflowS3NotFound):
                  s3objs = s3.info_many(list(expected))
  
          # 3) test with missing items, return_missing=True
  
          # to test result ordering, make sure we are requesting
          # keys in a non-lexicographic order. Missing files should
          # be returned in order too
          urls = list(sorted(expected, reverse=True))
          s3objs = s3.info_many(urls, return_missing=True)
          assert urls == [e.url for e in s3objs]
          assert_results(s3objs, expected, info_only=True)
  
imports: import os
  from re import I
  import shutil
  from hashlib import sha1
  from tempfile import mkdtemp
  from itertools import groupby, starmap
  import random
  from uuid import uuid4
  from metaflow.plugins.datatools import s3
  import pytest
  from metaflow import current, namespace, Run
  from metaflow.plugins.datatools.s3 import S3, MetaflowS3AccessDenied, MetaflowS3NotFound, MetaflowS3URLException, MetaflowS3InvalidObject, S3PutObject, S3GetObject
  from metaflow.util import to_bytes, unicode_type
  from .None import s3_data
  from ..None import FakeFlow, DO_TEST_RUN
label_desc: Use image node_id 14 for calling a global function with example usage: test_info_many(inject_failure_rate, s3root, prefixes, expected) without return types