code: def testOutputSpecFromChannel_AsyncOutputChannel(self):
      channel = OutputChannel(
          artifact_type=standard_artifacts.Model,
          output_key="model",
          producer_component="trainer",
          is_async=True,
      )
  
      actual = compiler_utils.output_spec_from_channel(
          channel, "trainer"
      )
      expected = text_format.Parse(
          """
          artifact_spec {
            type {
              name: "Model"
              base_type: MODEL
            }
            is_async: true
          }
          """,
          pipeline_pb2.OutputSpec(),
      )
      self.assertProtoEquals(actual, expected)
  
imports: import itertools
  import tensorflow
  from tfx import types
  from tfx.components import CsvExampleGen
  from tfx.components import StatisticsGen
  from tfx.dsl.compiler import compiler_utils
  from tfx.dsl.components.base import base_component
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.components.base import executor_spec
  from tfx.dsl.components.common import importer
  from tfx.dsl.components.common import resolver
  from tfx.dsl.input_resolution.strategies import latest_blessed_model_strategy
  from tfx.dsl.placeholder import placeholder
  from tfx.orchestration import pipeline
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import standard_artifacts
  from tfx.types.artifact import Artifact
  from tfx.types.artifact import Property
  from tfx.types.artifact import PropertyType
  from tfx.types.channel import Channel
  from tfx.types.channel import OutputChannel
  from tfx.types.channel_utils import external_pipeline_artifact_query
  from google.protobuf import text_format
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 6 for calling the ValidateExecPropertyPlaceholderTest obj's underlying member method code with example usage: obj.testOutputSpecFromChannel_AsyncOutputChannel() without return types