code: def test_version_numbers(self):
      run_config = run_configs.get()
      failures = []
      for game_version, version in sorted(
          run_config.get_versions().items()
      ):
          try:
              self.assertEqual(game_version, version.game_version)
              log_center("starting version check: %s", game_version)
              run_config = run_configs.get(version=game_version)
              with run_config.start(want_rgb=False) as controller:
                  ping = controller.ping()
                  logging.info("expected: %s", version)
                  logging.info(
                      "actual: %s",
                      ", ".join(str(ping).strip().split("\n")),
                  )
                  self.assertEqual(
                      version.build_version, ping.base_build
                  )
                  if version.game_version != "latest":
                      self.assertEqual(
                          major_version(ping.game_version),
                          major_version(version.game_version),
                      )
                      self.assertEqual(
                          version.data_version.lower(),
                          ping.data_version.lower(),
                      )
              log_center("success: %s", game_version)
          except:  # pylint: disable=bare-except
              log_center("failure: %s", game_version)
              logging.exception("Failed")
              failures.append(game_version)
      self.assertEmpty(failures)
  
file_path: pysc2/pysc2/tests/versions_test.py
imports: from absl import logging
  from absl.testing import absltest
  from pysc2 import maps
  from pysc2 import run_configs
  from s2clientprotocol import common_pb2
  from s2clientprotocol import sc2api_pb2
label_desc: Use image node_id 1 for calling the TestVersions obj's underlying member method code with example usage: obj.test_version_numbers() without return types