code: def test_ensure_node_services_cleanup_on_failure(self):
      self._mock_service_job_manager.ensure_node_services.return_value = service_jobs.ServiceStatus(
          code=service_jobs.ServiceStatusCode.FAILED
      )
      self.assertEqual(
          service_jobs.ServiceStatusCode.FAILED,
          self._wrapper.ensure_node_services(
              mock.Mock(), "node1", self._backfill_token
          ).code,
      )
      self._mock_service_job_manager.stop_node_services.assert_called_once_with(
          mock.ANY, "node1"
      )
  
file_path: tfx/tfx/orchestration/experimental/core/service_jobs_test.py
imports: from absl.testing.absltest import mock
  import tensorflow
  from tfx.orchestration.experimental.core import service_jobs
  from tfx.orchestration.experimental.core import test_utils
label_desc: Use image node_id 4 for calling the CleanupHandlingServiceJobManagerWrapperTest obj's underlying member method code with example usage: obj.test_ensure_node_services_cleanup_on_failure() without return types