code: def test_program_stopper(self, use_wm_v2):
      self.enter_context(
          flagsaver.flagsaver(lp_worker_manager_v2=use_wm_v2)
      )
      # This verifies the program stopper works for test_multi_processing
      p = program.Program("test")
  
      with p.group("block"):
          p.add_node(python.PyNode(_block))
  
      with p.group("stop"):
          p.add_node(
              python.PyNode(
                  _stop,
                  program_stopper.make_program_stopper(
                      lp.context.LaunchType.TEST_MULTI_PROCESSING
                  ),
              )
          )
  
      resources = dict(
          block=_get_default_py_node_config(),
          stop=_get_default_py_node_config(),
      )
      processes = launch.launch(
          p, test_case=self, local_resources=resources
      )
      processes.wait()
  
imports: from absl.testing import absltest
  from absl.testing import flagsaver
  from absl.testing import parameterized
  import launchpad
  from launchpad import program
  from launchpad.launch.test_multi_processing import launch
  from launchpad.nodes.python import local_multi_processing
  from launchpad.nodes.python import node
  from launchpad.program_stopper import program_stopper
label_desc: Use image node_id 7 for calling the LaunchTest obj's underlying member method code with example usage: obj.test_program_stopper(use_wm_v2) without return types