def test_generate_reach_forecast_flattened(): client = ReachPlanServiceClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.generate_reach_forecast), '__call__') as call: # Designate an appropriate return value for the call. call.return_value = reach_plan_service.GenerateReachForecastResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.generate_reach_forecast( customer_id='customer_id_value', campaign_duration=reach_plan_service.CampaignDuration( duration_in_days=wrappers_pb2.Int32Value(value=541)), planned_products=[ reach_plan_service.PlannedProduct( plannable_product_code=wrappers_pb2.StringValue( value='value_value')) ], ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] assert args[0].customer_id == 'customer_id_value' assert args[ 0].campaign_duration == reach_plan_service.CampaignDuration( duration_in_days=wrappers_pb2.Int32Value(value=541)) assert args[0].planned_products == [ reach_plan_service.PlannedProduct( plannable_product_code=wrappers_pb2.StringValue( value='value_value')) ]
def _to_protobuf(self) -> StructuredQuery: """Convert the current query into the equivalent protobuf. Returns: :class:`google.cloud.firestore_v1.types.StructuredQuery`: The query protobuf. """ projection = self._normalize_projection(self._projection) orders = self._normalize_orders() start_at = self._normalize_cursor(self._start_at, orders) end_at = self._normalize_cursor(self._end_at, orders) query_kwargs = { "select": projection, "from_": [ query.StructuredQuery.CollectionSelector( collection_id=self._parent.id, all_descendants=self._all_descendants ) ], "where": self._filters_pb(), "order_by": orders, "start_at": _cursor_pb(start_at), "end_at": _cursor_pb(end_at), } if self._offset is not None: query_kwargs["offset"] = self._offset if self._limit is not None: query_kwargs["limit"] = wrappers_pb2.Int32Value(value=self._limit) return query.StructuredQuery(**query_kwargs)
def _to_protobuf(self): """Convert the current query into the equivalent protobuf. Returns: google.cloud.firestore_v1beta1.types.StructuredQuery: The query protobuf. """ query_kwargs = { 'select': self._projection, 'from': [ query_pb2.StructuredQuery.CollectionSelector( collection_id=self._parent.id, ), ], 'where': self._filters_pb(), 'order_by': self._orders, 'start_at': _cursor_pb(self._start_at, self._orders), 'end_at': _cursor_pb(self._end_at, self._orders), } if self._offset is not None: query_kwargs['offset'] = self._offset if self._limit is not None: query_kwargs['limit'] = wrappers_pb2.Int32Value(value=self._limit) return query_pb2.StructuredQuery(**query_kwargs)
def test__to_protobuf_all_fields(self): from google.protobuf import wrappers_pb2 from google.cloud.firestore_v1beta1.gapic import enums from google.cloud.firestore_v1beta1.proto import document_pb2 from google.cloud.firestore_v1beta1.proto import query_pb2 parent = mock.Mock(id='cat', spec=['id']) query1 = self._make_one(parent) query2 = query1.select(['X', 'Y', 'Z']) query3 = query2.where('Y', '>', 2.5) query4 = query3.order_by('X') query5 = query4.limit(17) query6 = query5.offset(3) query7 = query6.start_at({'X': 10}) query8 = query7.end_at({'X': 25}) structured_query_pb = query8._to_protobuf() query_kwargs = { 'from': [ query_pb2.StructuredQuery.CollectionSelector( collection_id=parent.id, ), ], 'select': query_pb2.StructuredQuery.Projection(fields=[ query_pb2.StructuredQuery.FieldReference(field_path=field_path) for field_path in ['X', 'Y', 'Z'] ], ), 'where': query_pb2.StructuredQuery.Filter( field_filter=query_pb2.StructuredQuery.FieldFilter( field=query_pb2.StructuredQuery.FieldReference( field_path='Y', ), op=enums.StructuredQuery.FieldFilter.Operator.GREATER_THAN, value=document_pb2.Value(double_value=2.5), ), ), 'order_by': [ _make_order_pb( 'X', enums.StructuredQuery.Direction.ASCENDING, ), ], 'start_at': query_pb2.Cursor( values=[ document_pb2.Value(integer_value=10), ], before=True, ), 'end_at': query_pb2.Cursor(values=[ document_pb2.Value(integer_value=25), ], ), 'offset': 3, 'limit': wrappers_pb2.Int32Value(value=17), } expected_pb = query_pb2.StructuredQuery(**query_kwargs) self.assertEqual(structured_query_pb, expected_pb)
def pod_to_pb_any(value): if isinstance(value, bool): v = wrappers_pb2.BoolValue(value=value) elif isinstance(value, int): v = wrappers_pb2.Int32Value(value=value) elif isinstance(value, float): v = wrappers_pb2.FloatValue(value=value) elif isinstance(value, str): v = wrappers_pb2.StringValue(value=value) else: raise ValueError("not supported cell data type: %s" % type(value)) return v
def test_generate_reach_forecast_flattened_error(): client = ReachPlanServiceClient( credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): client.generate_reach_forecast( reach_plan_service.GenerateReachForecastRequest(), customer_id='customer_id_value', campaign_duration=reach_plan_service.CampaignDuration( duration_in_days=wrappers_pb2.Int32Value(value=541)), planned_products=[ reach_plan_service.PlannedProduct( plannable_product_code=wrappers_pb2.StringValue( value='value_value')) ], )
def test_translation_of_search_hit_with_primitives(self): """Verify that well-known types get translated into their values rather than into dicts.""" values_and_serializations = ( (wrappers_pb2.BoolValue(value=True), True), (wrappers_pb2.Int32Value(value=1), 1), (wrappers_pb2.UInt32Value(value=2), 2), # int64 is expected to be converted to a string because of JSON!! (wrappers_pb2.Int64Value(value=3), "3"), (wrappers_pb2.StringValue(value="abc"), "abc"), ) for value, expected in values_and_serializations: any_proto = any_pb2.Any() any_proto.Pack(value) self.assertEqual( expected, response_translation.translate_message_to_dict(any_proto))
def test__to_protobuf_limit_only(self): from google.protobuf import wrappers_pb2 from google.cloud.firestore_v1beta1.proto import query_pb2 parent = mock.Mock(id='donut', spec=['id']) query1 = self._make_one(parent) limit = 31 query2 = query1.limit(limit) structured_query_pb = query2._to_protobuf() query_kwargs = { 'from': [ query_pb2.StructuredQuery.CollectionSelector( collection_id=parent.id, ), ], 'limit': wrappers_pb2.Int32Value(value=limit), } expected_pb = query_pb2.StructuredQuery(**query_kwargs)
def engine_fuzz(engine_impl, target_name, sync_corpus_directory, testcase_directory): """Run engine fuzzer on untrusted worker.""" request = untrusted_runner_pb2.EngineFuzzRequest( engine=engine_impl.name, target_name=target_name, sync_corpus_directory=file_host.rebase_to_worker_root( sync_corpus_directory), testcase_directory=file_host.rebase_to_worker_root(testcase_directory)) response = host.stub().EngineFuzz(request) crashes = [ engine.Crash( input_path=file_host.rebase_to_host_root(crash.input_path), stacktrace=utils.decode_to_unicode(crash.stacktrace), reproduce_args=crash.reproduce_args, crash_time=crash.crash_time) for crash in response.crashes ] unpacked_stats = {} for key, packed_value in six.iteritems(response.stats): if packed_value.Is(wrappers_pb2.DoubleValue.DESCRIPTOR): value = wrappers_pb2.DoubleValue() elif packed_value.Is(wrappers_pb2.Int32Value.DESCRIPTOR): value = wrappers_pb2.Int32Value() elif packed_value.Is(wrappers_pb2.StringValue.DESCRIPTOR): value = wrappers_pb2.StringValue() else: raise ValueError('Unknown stat type for ' + key) packed_value.Unpack(value) unpacked_stats[key] = value.value result = engine.FuzzResult( logs=utils.decode_to_unicode(response.logs), command=list(response.command), crashes=crashes, stats=unpacked_stats, time_executed=response.time_executed) file_host.pull_testcases_from_worker() return result, dict(response.fuzzer_metadata)
def engine_fuzz(request, _): """Run engine fuzzer.""" engine_impl = engine.get(request.engine) result, fuzzer_metadata = fuzz_task.run_engine_fuzzer( engine_impl, request.target_name, request.sync_corpus_directory, request.testcase_directory, ) crashes = [ untrusted_runner_pb2.EngineCrash( input_path=crash.input_path, stacktrace=protobuf_utils.encode_utf8_if_unicode(crash.stacktrace), reproduce_args=crash.reproduce_args, crash_time=crash.crash_time, ) for crash in result.crashes ] packed_stats = {} for key, value in six.iteritems(result.stats): packed_value = Any() if isinstance(value, float): packed_value.Pack(wrappers_pb2.DoubleValue(value=value)) elif isinstance(value, int): packed_value.Pack(wrappers_pb2.Int32Value(value=value)) elif isinstance(value, six.string_types): packed_value.Pack(wrappers_pb2.StringValue(value=value)) else: raise ValueError("Unknown stat type for " + key) packed_stats[key] = packed_value return untrusted_runner_pb2.EngineFuzzResponse( logs=protobuf_utils.encode_utf8_if_unicode(result.logs), command=result.command, crashes=crashes, stats=packed_stats, time_executed=result.time_executed, fuzzer_metadata=fuzzer_metadata, )
def testWellKnownInAnyMessage(self): message = any_pb2.Any() int32_value = wrappers_pb2.Int32Value() int32_value.value = 1234 message.Pack(int32_value) self.assertEqual( json.loads(json_format.MessageToJson(message, True)), json.loads( '{\n' ' "@type": \"type.googleapis.com/google.protobuf.Int32Value\",\n' ' "value": 1234\n' '}\n')) parsed_message = any_pb2.Any() self.CheckParseBack(message, parsed_message) timestamp = timestamp_pb2.Timestamp() message.Pack(timestamp) self.assertEqual( json.loads(json_format.MessageToJson(message, True)), json.loads( '{\n' ' "@type": "type.googleapis.com/google.protobuf.Timestamp",\n' ' "value": "1970-01-01T00:00:00Z"\n' '}\n')) self.CheckParseBack(message, parsed_message) duration = duration_pb2.Duration() duration.seconds = 1 message.Pack(duration) self.assertEqual( json.loads(json_format.MessageToJson(message, True)), json.loads( '{\n' ' "@type": "type.googleapis.com/google.protobuf.Duration",\n' ' "value": "1s"\n' '}\n')) self.CheckParseBack(message, parsed_message) field_mask = field_mask_pb2.FieldMask() field_mask.paths.append('foo.bar') field_mask.paths.append('bar') message.Pack(field_mask) self.assertEqual( json.loads(json_format.MessageToJson(message, True)), json.loads( '{\n' ' "@type": "type.googleapis.com/google.protobuf.FieldMask",\n' ' "value": "foo.bar,bar"\n' '}\n')) self.CheckParseBack(message, parsed_message) struct_message = struct_pb2.Struct() struct_message['name'] = 'Jim' message.Pack(struct_message) self.assertEqual( json.loads(json_format.MessageToJson(message, True)), json.loads( '{\n' ' "@type": "type.googleapis.com/google.protobuf.Struct",\n' ' "value": {"name": "Jim"}\n' '}\n')) self.CheckParseBack(message, parsed_message) nested_any = any_pb2.Any() int32_value.value = 5678 nested_any.Pack(int32_value) message.Pack(nested_any) self.assertEqual( json.loads(json_format.MessageToJson(message, True)), json.loads( '{\n' ' "@type": "type.googleapis.com/google.protobuf.Any",\n' ' "value": {\n' ' "@type": "type.googleapis.com/google.protobuf.Int32Value",\n' ' "value": 5678\n' ' }\n' '}\n')) self.CheckParseBack(message, parsed_message)
def getInt32Value(value): if value is None: return None temp = wrapper.Int32Value() temp.value = value return temp
def testTransform(self): i32 = wrappers_pb2.Int32Value() i32.value = 1337 dct = utils.MessageToFlatDict(i32, lambda _, value: value * 2) self.assertEqual(dct, {"value": 1337 * 2})