code: def testUpdateArtifactsAllExecProperties(self):
      # Test updating the output artifact with as many input exec properties as
      # possible
      out_artifact = _OutputArtifact()._artifact
      exec_properties = {
          utils.SPAN_PROPERTY_NAME: 2,
          utils.VERSION_PROPERTY_NAME: 1,
          utils.FINGERPRINT_PROPERTY_NAME: "fp",
      }
      driver.update_output_artifact(exec_properties, out_artifact)
      self.assertEqual(
          out_artifact.custom_properties[
              utils.SPAN_PROPERTY_NAME
          ].int_value,
          2,
      )
      self.assertEqual(
          out_artifact.custom_properties[
              utils.VERSION_PROPERTY_NAME
          ].int_value,
          1,
      )
      self.assertEqual(
          out_artifact.custom_properties[
              utils.FINGERPRINT_PROPERTY_NAME
          ].string_value,
          "fp",
      )
  
imports: import os
  import tensorflow
  from tfx.components.example_gen import driver
  from tfx.components.example_gen import utils
  from tfx.dsl.components.base import base_driver
  from tfx.dsl.io import fileio
  from tfx.orchestration import data_types
  from tfx.orchestration.portable import data_types
  from tfx.proto import example_gen_pb2
  from tfx.proto import range_config_pb2
  from tfx.types import artifact
  from tfx.types import artifact_utils
  from tfx.types import channel_utils
  from tfx.types import standard_artifacts
  from tfx.types import standard_component_specs
  from tfx.utils import io_utils
  from tfx.utils import proto_utils
label_desc: Use image node_id 4 for calling the DriverTest obj's underlying member method code with example usage: obj.testUpdateArtifactsAllExecProperties() without return types