def test_runner_api_transformation_with_subscription( self, unused_mock_pubsub): source = _PubSubSource( topic=None, subscription='projects/fakeprj/subscriptions/a_subscription', id_label='a_label', timestamp_attribute='b_label', with_attributes=True) transform = Read(source) context = pipeline_context.PipelineContext() proto_transform_spec = transform.to_runner_api(context) self.assertEqual(common_urns.composites.PUBSUB_READ.urn, proto_transform_spec.urn) pubsub_read_payload = (proto_utils.parse_Bytes( proto_transform_spec.payload, beam_runner_api_pb2.PubSubReadPayload)) self.assertEqual('projects/fakeprj/subscriptions/a_subscription', pubsub_read_payload.subscription) self.assertEqual('a_label', pubsub_read_payload.id_attribute) self.assertEqual('b_label', pubsub_read_payload.timestamp_attribute) self.assertEqual('', pubsub_read_payload.topic) self.assertTrue(pubsub_read_payload.with_attributes) proto_transform = beam_runner_api_pb2.PTransform( unique_name="dummy_label", spec=proto_transform_spec) transform_from_proto = Read.from_runner_api_parameter( proto_transform, pubsub_read_payload, None) self.assertTrue(isinstance(transform_from_proto, Read)) self.assertTrue(isinstance(transform_from_proto.source, _PubSubSource)) self.assertTrue(transform_from_proto.source.with_attributes) self.assertEqual('projects/fakeprj/subscriptions/a_subscription', transform_from_proto.source.full_subscription)
def test_runner_api_transformation_properties_none(self, unused_mock_pubsub): # Confirming that properties stay None after a runner API transformation. source = _PubSubSource(topic='projects/fakeprj/topics/a_topic', with_attributes=True) transform = Read(source) context = pipeline_context.PipelineContext() proto_transform_spec = transform.to_runner_api(context) self.assertEqual(common_urns.composites.PUBSUB_READ.urn, proto_transform_spec.urn) pubsub_read_payload = (proto_utils.parse_Bytes( proto_transform_spec.payload, beam_runner_api_pb2.PubSubReadPayload)) proto_transform = beam_runner_api_pb2.PTransform( unique_name="dummy_label", spec=proto_transform_spec) transform_from_proto = Read.from_runner_api_parameter( proto_transform, pubsub_read_payload, None) self.assertIsNone(transform_from_proto.source.full_subscription) self.assertIsNone(transform_from_proto.source.id_label) self.assertIsNone(transform_from_proto.source.timestamp_attribute)