code: def testGetLiveOutputArtifactsOfNode(self):
      c = self.put_context("node", "my-pipeline.my-node")
  
      with self.subTest("With no LIVE node artifacts"):
          result = store_ext.get_live_output_artifacts_of_node(
              self.store, pipeline_id="my-pipeline", node_id="my-node"
          )
          self.assertEmpty(result)
  
      x1 = self.put_artifact("X")
      x2 = self.put_artifact("X")
      y1 = self.put_artifact("Y", state="DELETED")
      y2 = self.put_artifact("Y")
      self.put_execution(
          "E", inputs={"x": [x1]}, outputs={"y": [y1]}, contexts=[c]
      )
      self.put_execution(
          "E", inputs={"x": [x2]}, outputs={"y": [y2]}, contexts=[c]
      )
  
      result = store_ext.get_live_output_artifacts_of_node(
          self.store, pipeline_id="my-pipeline", node_id="my-node"
      )
      self.assertEqual(_sorted_ids(result), _sorted_ids([y2]))
  
file_path: tfx/tfx/orchestration/portable/mlmd/store_ext_test.py
imports: import time
  import tensorflow
  from tfx.orchestration.portable.mlmd import store_ext
  from tfx.utils import test_case_utils
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 4 for calling the StoreExtTest obj's underlying member method code with example usage: obj.testGetLiveOutputArtifactsOfNode() without return types