Пример #1
0
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'))
        ]
Пример #2
0
    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)
Пример #3
0
    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)
Пример #5
0
 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
Пример #6
0
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'))
            ],
        )
Пример #7
0
    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))
Пример #8
0
    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)
Пример #9
0
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)
Пример #10
0
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,
    )
Пример #11
0
    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)
Пример #12
0
def getInt32Value(value):
    if value is None:
        return None
    temp = wrapper.Int32Value()
    temp.value = value
    return temp
Пример #13
0
  def testTransform(self):
    i32 = wrappers_pb2.Int32Value()
    i32.value = 1337

    dct = utils.MessageToFlatDict(i32, lambda _, value: value * 2)
    self.assertEqual(dct, {"value": 1337 * 2})