code: def test_checkpoint_at_end(
      ray_start_4_cpus_2_gpus_extra, resource_manager_cls, tmpdir
  ):
      """Test that a checkpoint is saved at end for class trainables with that config.
  
      Legacy test: test_trial_runner_2.py::TrialRunnerTest::testCheckpointingAtEnd
      Legacy test: test_trial_runner_2.py::TrialRunnerTest::testResultDone
      """
      runner = TuneController(
          resource_manager_factory=lambda: resource_manager_cls(),
          storage=STORAGE,
      )
      kwargs = {
          "stopping_criterion": {"training_iteration": 2},
          "checkpoint_config": CheckpointConfig(checkpoint_at_end=True),
          "placement_group_factory": PlacementGroupFactory(
              [{"CPU": 1, "GPU": 1}]
          ),
          "storage": STORAGE,
      }
      runner.add_trial(Trial("__fake", **kwargs))
      trials = runner.get_trials()
  
      while not runner.is_finished():
          runner.step()
  
      assert trials[0].has_checkpoint()
      assert trials[0].last_result[DONE]
  
imports: import json
  import logging
  import os
  import tempfile
  from unittest import mock
  import pytest
  import sys
  import time
  from functools import partial
  import ray
  from freezegun import freeze_time
  from ray.train import CheckpointConfig
  from ray.air.execution import FixedResourceManager, PlacementGroupResourceManager
  from ray.air.constants import TRAINING_ITERATION
  from ray.train import Checkpoint
  from ray.train._internal.session import _TrainingResult
  from ray.train._internal.storage import StorageContext
  from ray.tune import PlacementGroupFactory
  from ray.tune.execution.tune_controller import TuneController
  from ray.tune.experiment import Trial
  from ray.tune.result import DONE
  from ray.tune.schedulers import FIFOScheduler
  from ray.tune.search import BasicVariantGenerator
  from ray.train.tests.util import mock_storage_context
  from ray.tune.tests.tune_test_util import TrialResultObserver
label_desc: Use image node_id 4 for calling a global function with example usage: test_checkpoint_at_end(ray_start_4_cpus_2_gpus_extra, resource_manager_cls, tmpdir) without return types