code: def testPipelineWithOldReferences(self):
      component_a = _make_fake_component_instance(
          name="component_a",
          output_type=_OutputTypeA,
          inputs={},
          outputs={},
      )
      component_b_v1 = _make_fake_component_instance(
          name="component_b",
          output_type=_OutputTypeB,
          inputs={
              "a": component_a.outputs["output"],
          },
          outputs={},
      )
      component_c_v1 = _make_fake_component_instance(
          name="component_c",
          output_type=_OutputTypeC,
          inputs={
              "b": component_b_v1.outputs["output"],
          },
          outputs={},
      )
      my_pipeline_v1 = pipeline.Pipeline(
          pipeline_name="a",
          pipeline_root="b",
          components=[component_a, component_b_v1, component_c_v1],
          metadata_connection_config=self._metadata_connection_config,
      )
      self.assertEqual(3, len(my_pipeline_v1.components))
  
      component_b_v2 = _make_fake_component_instance(
          name="component_b",
          output_type=_OutputTypeB,
          inputs={
              "a": component_a.outputs["output"],  # reuses component_a
          },
          outputs={},
      )
      component_c_v2 = _make_fake_component_instance(
          name="component_c",
          output_type=_OutputTypeC,
          inputs={
              # no dependency on component_b_v1, only depends on component_b_v2
              "b": component_b_v2.outputs["output"],
          },
          outputs={},
      )
  
      my_pipeline_v2 = pipeline.Pipeline(
          pipeline_name="a",
          pipeline_root="b",
          components=[component_a, component_b_v2, component_c_v2],
          metadata_connection_config=self._metadata_connection_config,
      )
      self.assertEqual(3, len(my_pipeline_v2.components))
  
imports: import itertools
  import os
  from typing import Any, Dict, Optional, Type
  import tensorflow
  from tfx import types
  from tfx.dsl.components.base import base_beam_component
  from tfx.dsl.components.base import base_component
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.components.base import base_node
  from tfx.dsl.components.base import executor_spec
  from tfx.dsl.placeholder import placeholder
  from tfx.orchestration import metadata
  from tfx.orchestration import pipeline
  from tfx.types.component_spec import ChannelParameter
  from tfx.types.component_spec import ExecutionParameter
  from tfx.utils import test_case_utils
label_desc: Use image node_id 8 for calling the PipelineTest obj's underlying member method code with example usage: obj.testPipelineWithOldReferences() without return types