code: def testPipeline(self):
      self._copyTemplate("penguin")
  
      # Prepare data
      self._prepare_data()
      self._replaceFileContent(
          "kubeflow_runner.py",
          [
              (
                  "DATA_PATH = 'gs://{}/tfx-template/data/penguin/'.format(configs.GCS_BUCKET_NAME)",
                  "DATA_PATH = 'gs://{{}}/{}/{}'.format(configs.GCS_BUCKET_NAME)".format(
                      self._DATA_DIRECTORY_NAME, self._pipeline_name
                  ),
              ),
          ],
      )
  
      self._compile_pipeline()
      self._check_telemetry_label()
  
      # Create a pipeline with only one component.
      self._create_pipeline()
      self._run_pipeline()
  
      # Update the pipeline to include all components.
      updated_pipeline_file = self._addAllComponents()
      logging.info(
          "Updated %s to add all components to the pipeline.",
          updated_pipeline_file,
      )
      self._update_pipeline()
      self._run_pipeline()
  
imports: from absl import logging
  import tensorflow
  from tfx.experimental.templates import container_based_test_case
label_desc: Use image node_id 2 for calling the PenguinTemplateKubeflowE2ETest obj's underlying member method code with example usage: obj.testPipeline() without return types