code: def testPipelineWithDuplicatedNodeId(self):
      component_a = _make_fake_node_instance("").with_id("component_a")
      component_b = _make_fake_component_instance(
          "", _OutputTypeA, {}, {}
      ).with_id("component_a")
      component_c = _make_fake_component_instance(
          "", _OutputTypeA, {}, {}
      ).with_id("component_a")
  
      with self.assertRaises(RuntimeError):
          pipeline.Pipeline(
              pipeline_name="a",
              pipeline_root="b",
              components=[component_c, component_b, component_a],
              metadata_connection_config=self._metadata_connection_config,
          )
  
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 9 for calling the PipelineTest obj's underlying member method code with example usage: obj.testPipelineWithDuplicatedNodeId() without return types