code: def test_all():
      combinations = itertools.product(resource_specs, strategies)
      for r, s in combinations:
          for c in cases:
  
              def run():
                  """This wrapper will handle the AutoDist destructor and garbage collections."""
                  try:
                      atexit._clear()  # TensorFlow also uses atexit, but running its exitfuncs cause some issues
                      a = AutoDist(
                          resource_spec_file=r, strategy_builder=s
                      )  # Fixtures in the future
                      c.main(a)
                  except Exception:
                      raise
                  finally:
                      atexit._run_exitfuncs()
  
              p = Process(target=run)
              p.start()
              p.join()
              if p.exitcode != 0:
                  raise SystemExit(
                      f"FAILED running case {c} with resourcespec {r} and strategy {s}"
                  )
  
file_path: autodist/tests/integration/test_all.py
imports: import atexit
  import itertools
  import os
  from multiprocessing import Process
  import pytest
  from autodist import AutoDist
  from autodist.strategy.all_reduce_strategy import AllReduce
  from autodist.strategy.parallax_strategy import Parallax
  from autodist.strategy.partitioned_ps_strategy import PartitionedPS
  from autodist.strategy.ps_lb_strategy import PSLoadBalancing
  from autodist.strategy.ps_strategy import PS
  from autodist.strategy.partitioned_all_reduce_strategy import PartitionedAR
  from autodist.strategy.uneven_partition_ps_strategy import UnevenPartitionedPS
  from autodist.strategy.random_axis_partition_all_reduce_strategy import RandomAxisPartitionAR
  from .cases import c0, c1, c2, c3, c4, c5, c6, c7, c8
label_desc: Use image node_id 1 for calling a global function with example usage: test_all() without return types