def test_should_add_matching_hashes_for_matching_labels(self):
     a_dict = {u'test': u'dict'}
     mv1 = metric_value.create(labels=a_dict)
     mv2 = metric_value.create(labels=a_dict)
     want = self.make_hash(mv1)
     got = self.make_hash(mv2)
     expect(got).to(equal(want))
 def test_should_update_hash_for_when_currency_is_added(self):
     a_dict = {u'test': u'dict'}
     mv1 = metric_value.create(labels=a_dict)
     mv2 = metric_value.create(labels=a_dict)
     mv2.moneyValue = sc_messages.Money(currencyCode=u'JPY')
     want = self.make_hash(mv1)
     got = self.make_hash(mv2)
     expect(got).to_not(equal(want))
 def test_should_fail_for_delta_metrics_with_unmergable_types(self):
     no_init = metric_value.create()
     unmergeables = [
         metric_value.create(stringValue=u'a test string'),
         metric_value.create(boolValue=False),
     ]
     for mv in unmergeables:
         testf = lambda: metric_value.merge(MetricKind.DELTA, mv, mv)
         expect(testf).to(raise_error(ValueError))
 def test_should_use_the_earliest_start_time_in_delta_merges(self):
     early_starting = metric_value.create(
         labels=self.TEST_LABELS,
         doubleValue=self.A_FLOAT_VALUE,
         startTime=self.EARLY)
     late_starting = metric_value.create(
         labels=self.TEST_LABELS,
         doubleValue=self.A_FLOAT_VALUE,
         startTime=self.LATER)
     got = metric_value.merge(MetricKind.DELTA, early_starting,
                              late_starting)
     expect(got.startTime).to(equal(early_starting.startTime))
     got = metric_value.merge(MetricKind.DELTA, late_starting,
                              early_starting)
     expect(got.startTime).to(equal(early_starting.startTime))
 def setUp(self):
     self.test_value = metric_value.create(
         labels=self.TEST_LABELS,
         doubleValue=self.A_FLOAT_VALUE)
     self.early_ending = metric_value.create(
         labels=self.TEST_LABELS,
         doubleValue=self.A_FLOAT_VALUE,
         endTime=self.EARLY)
     self.late_ending = metric_value.create(
         labels=self.TEST_LABELS,
         doubleValue=self.A_FLOAT_VALUE,
         endTime=self.LATER)
     self.test_value_with_money = metric_value.create(
         labels=self.TEST_LABELS,
         moneyValue=messages.Money(currencyCode=u'JPY', units=100, nanos=0))
 def test_should_update_temp_response_with_actual(self):
     req = _make_test_request(self.SERVICE_NAME, self.FAKE_OPERATION_ID)
     temp_response = sc_messages.AllocateQuotaResponse(
         operationId=self.FAKE_OPERATION_ID)
     real_response = sc_messages.AllocateQuotaResponse(
         operationId=self.FAKE_OPERATION_ID,
         quotaMetrics=[sc_messages.MetricValueSet(
             metricName=u'a_float',
             metricValues=[
                 metric_value.create(
                     labels={
                         u'key1': u'value1',
                         u'key2': u'value2'},
                     doubleValue=1.1,
                 ),
             ]
         )]
     )
     agg = self.agg
     agg.allocate_quota(req)
     signature = quota_request.sign(req.allocateQuotaRequest)
     with agg._cache as cache:
         item = cache[signature]
         expect(item.response).to(equal(temp_response))
         expect(item.is_in_flight).to(be_true)
         agg.add_response(req, real_response)
         item = cache[signature]
         expect(item.response).to(equal(real_response))
         expect(item.is_in_flight).to(be_false)
 def test_expiration(self):
     req = _make_test_request(self.SERVICE_NAME, self.FAKE_OPERATION_ID)
     temp_response = sc_messages.AllocateQuotaResponse(
         operationId=self.FAKE_OPERATION_ID)
     real_response = sc_messages.AllocateQuotaResponse(
         operationId=self.FAKE_OPERATION_ID,
         quotaMetrics=[sc_messages.MetricValueSet(
             metricName=u'a_float',
             metricValues=[
                 metric_value.create(
                     labels={
                         u'key1': u'value1',
                         u'key2': u'value2'},
                     doubleValue=1.1,
                 ),
             ]
         )]
     )
     agg = self.agg
     agg.allocate_quota(req)
     assert len(agg.flush()) == 1
     agg.add_response(req, real_response)
     signature = quota_request.sign(req.allocateQuotaRequest)
     with agg._cache as cache, agg._out as out:
         assert len(out) == 0
         assert signature in cache
         self.timer.tick()
         self.timer.tick()
         assert len(agg.flush()) == 0
         assert len(out) == 0
         assert signature in cache
         self.timer.tick()  # expired at 3rd second
         assert len(agg.flush()) == 0
         assert len(out) == 0
         assert signature not in cache
    def test_request_extraction_with_aggregation(self):
        req = _make_test_request(self.SERVICE_NAME, self.FAKE_OPERATION_ID)
        req = req.allocateQuotaRequest
        req.allocateOperation.quotaMetrics = [
            sc_messages.MetricValueSet(
                metricName=u'a_float',
                metricValues=[
                    metric_value.create(
                        labels={
                            u'key1': u'value1',
                            u'key2': u'value2'},
                        int64Value=12,
                    ),
                ]
            )
        ]

        resp = sc_messages.AllocateQuotaResponse(
            operationId=self.FAKE_OPERATION_ID)
        item = quota_request.CachedItem(req, resp, self.SERVICE_NAME, None)
        expect(item._op_aggregator).to(be_none)
        item.aggregate(req)
        item.aggregate(req)

        extracted = item.extract_request()
        op = extracted.allocateQuotaRequest.allocateOperation
        expect(op.quotaMetrics[0].metricValues[0].int64Value).to(equal(24))
 def test_should_succeed_for_delta_metrics_with_the_distribution_type(self):
     test_distribution = distribution.create_explicit([0.1, 0.3, 0.5])
     distribution.add_sample(0.4, test_distribution)
     v = metric_value.create(labels=self.TEST_LABELS,
                             distributionValue=test_distribution)
     want = 2 * test_distribution.count
     got = metric_value.merge(MetricKind.DELTA, v, v)
     expect(got.distributionValue.count).to(equal(want))
Esempio n. 10
0
class TestProducerBackendLatencies(KnownMetricsBase, unittest2.TestCase):
    SUBJECT = _KNOWN.PRODUCER_BACKEND_LATENCIES
    WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
        KnownMetricsBase.GIVEN_INFO.backend_time.seconds,
        *metric_descriptor._TIME_DISTRIBUTION_ARGS)
    WANTED_ADDED_METRICS = messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[
            metric_value.create(distributionValue=WANTED_DISTRIBUTION)
        ])
Esempio n. 11
0
class TestConsumerTotalLatencies(KnownMetricsBase, unittest2.TestCase):
    SUBJECT = _KNOWN.CONSUMER_TOTAL_LATENCIES
    WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
        KnownMetricsBase.GIVEN_INFO.request_time.seconds,
        *metric_descriptor._TIME_DISTRIBUTION_ARGS)
    WANTED_ADDED_METRICS = messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[
            metric_value.create(distributionValue=WANTED_DISTRIBUTION)
        ])
Esempio n. 12
0
class TestProducerErrorCountWithErrors(KnownMetricsBase, unittest2.TestCase):
    SUBJECT = _KNOWN.PRODUCER_ERROR_COUNT
    GIVEN_INFO = report_request.Info(
        response_code=401,
        api_key=KnownMetricsBase.TEST_API_KEY,
        api_key_valid=True,
    )
    WANTED_ADDED_METRICS = messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[metric_value.create(int64Value=1)])
Esempio n. 13
0
class TestConsumerResponseSizes(KnownMetricsBase, unittest2.TestCase):
    SUBJECT = _KNOWN.CONSUMER_RESPONSE_SIZES
    WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
        KnownMetricsBase.WANTED_SIZE,
        *metric_descriptor._SIZE_DISTRIBUTION_ARGS)
    WANTED_ADDED_METRICS = messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[
            metric_value.create(distributionValue=WANTED_DISTRIBUTION)
        ])
Esempio n. 14
0
class TestProducerRequestSizes(KnownMetricsBase, unittest2.TestCase):
    SUBJECT = _KNOWN.PRODUCER_REQUEST_SIZES
    WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
        KnownMetricsBase.WANTED_SIZE,
        *metric_descriptor._SIZE_DISTRIBUTION_ARGS)
    WANTED_ADDED_METRICS = sc_messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[
            metric_value.create(distributionValue=WANTED_DISTRIBUTION)
        ])
Esempio n. 15
0
class TestProducerByConsumerRequestOverheadLatencies(KnownMetricsBase,
                                                     unittest2.TestCase):
    SUBJECT = _KNOWN.PRODUCER_BY_CONSUMER_REQUEST_OVERHEAD_LATENCIES
    WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
        KnownMetricsBase.GIVEN_INFO.overhead_time.seconds,
        *metric_descriptor._TIME_DISTRIBUTION_ARGS)
    WANTED_ADDED_METRICS = sc_messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[
            metric_value.create(distributionValue=WANTED_DISTRIBUTION)
        ])
Esempio n. 16
0
 def test_should_change_signature_when_metric_values_are_added(self):
     without_mvs = check_request.sign(self.test_check_request)
     self.test_op.metricValueSets = [
         messages.MetricValueSet(metricName=u'a_float',
                                 metricValues=[
                                     metric_value.create(
                                         labels={
                                             u'key1': u'value1',
                                             u'key2': u'value2'
                                         },
                                         doubleValue=1.1,
                                     ),
                                 ])
     ]
     with_mvs = check_request.sign(self.test_check_request)
     expect(with_mvs).not_to(equal(without_mvs))
 def test_should_change_signature_when_metric_values_are_added(self):
     without_mvs = quota_request.sign(self.test_quota_request)
     self.test_op.quotaMetrics = [
         sc_messages.MetricValueSet(
             metricName=u'a_float',
             metricValues=[
                 metric_value.create(
                     labels={
                         u'key1': u'value1',
                         u'key2': u'value2'},
                     doubleValue=1.1,
                 ),
             ]
         )
     ]
     with_mvs = quota_request.sign(self.test_quota_request)
     expect(with_mvs).not_to(equal(without_mvs))
Esempio n. 18
0
 def test_should_cache_responses(self):
     req = _make_test_request(self.SERVICE_NAME, self.FAKE_OPERATION_ID)
     temp_response = sc_messages.AllocateQuotaResponse(
         operationId=self.FAKE_OPERATION_ID)
     real_response = sc_messages.AllocateQuotaResponse(
         operationId=self.FAKE_OPERATION_ID,
         quotaMetrics=[sc_messages.MetricValueSet(
             metricName=u'a_float',
             metricValues=[
                 metric_value.create(
                     labels={
                         u'key1': u'value1',
                         u'key2': u'value2'},
                     doubleValue=1.1,
                 ),
             ]
         )]
     )
     agg = self.agg
     expect(agg.allocate_quota(req)).to(equal(temp_response))
     agg.add_response(req, real_response)
     expect(agg.allocate_quota(req)).to(equal(real_response))
Esempio n. 19
0
 def test_should_fail_for_metric_values_with_different_types(self):
     changed = metric_value.create(labels=self.TEST_LABELS, int64Value=1)
     for kind in (MetricKind.GAUGE, MetricKind.CUMULATIVE,
                  MetricKind.DELTA):
         testf = lambda: metric_value.merge(kind, self.test_value, changed)
         expect(testf).to(raise_error(ValueError))
Esempio n. 20
0
         ]
     )
 },
 {
     u'description': u'combines the metric value using the default kind',
     u'kinds': None,
     u'initial': messages.Operation(
         startTime=_EARLY,
         endTime=_LATER,
         metricValueSets = [
             messages.MetricValueSet(
                 metricName=u'some_floats',
                 metricValues=[
                     metric_value.create(
                         labels=_TEST_LABELS,
                         doubleValue=_A_FLOAT_VALUE,
                         endTime=_EARLY
                     ),
                 ]
             ),
             messages.MetricValueSet(
                 metricName=u'other_floats',
                 metricValues=[
                     metric_value.create(
                         labels=_TEST_LABELS,
                         doubleValue=_A_FLOAT_VALUE,
                         endTime=_EARLY
                     ),
                 ]
             )
         ]
  messages.Operation(
      importance=messages.Operation.ImportanceValueValuesEnum.LOW,
      logEntries=[],
      labels=encoding.PyValueToMessage(
          messages.Operation.LabelsValue, {
              u'servicecontrol.googleapis.com/service_agent':
              _WANTED_SERVICE_AGENT,
              u'servicecontrol.googleapis.com/user_agent':
              _WANTED_USER_AGENT,
              u'servicecontrol.googleapis.com/platform': _WANTED_PLATFORM,
          }),
      metricValueSets=[
          messages.MetricValueSet(
              metricName=_EXPECTED_OK_METRIC.metric_name,
              metricValues=[
                  metric_value.create(int64Value=1),
              ]),
      ],
      consumerId=u'api_key:' + _TEST_API_KEY,
      operationId=u'an_op_id',
      operationName=u'an_op_name',
      startTime=_START_OF_EPOCH_TIMESTAMP,
      endTime=_START_OF_EPOCH_TIMESTAMP)),
 (report_request.Info(response_code=404,
                      operation_id=u'an_op_id',
                      operation_name=u'an_op_name',
                      method=u'GET',
                      referer=u'a_referer',
                      backend_time=_TEST_LATENCY,
                      overhead_time=_TEST_LATENCY,
                      request_time=_TEST_LATENCY,
      importance=messages.Operation.ImportanceValueValuesEnum.LOW,
      logEntries=[],
      labels=encoding.PyValueToMessage(
          messages.Operation.LabelsValue, {
              u'servicecontrol.googleapis.com/service_agent':
                  _WANTED_SERVICE_AGENT,
              u'servicecontrol.googleapis.com/user_agent':
                  _WANTED_USER_AGENT,
              u'servicecontrol.googleapis.com/platform':
                  _WANTED_PLATFORM,
          }),
      metricValueSets = [
          messages.MetricValueSet(
              metricName=_EXPECTED_OK_METRIC.metric_name,
              metricValues=[
                  metric_value.create(int64Value=1),
              ]
          ),
      ],
      consumerId=u'api_key:' + _TEST_API_KEY,
      operationId=u'an_op_id',
      operationName=u'an_op_name',
      startTime=_START_OF_EPOCH_TIMESTAMP,
      endTime=_START_OF_EPOCH_TIMESTAMP)
 ),
 (report_request.Info(
     response_code=404,
     operation_id=u'an_op_id',
     operation_name=u'an_op_name',
     method=u'GET',
     referer=u'a_referer',
Esempio n. 23
0
 def test_should_succeed_for_delta_metrics_with_the_int64_type(self):
     test_int = 4
     v = metric_value.create(labels=self.TEST_LABELS, int64Value=test_int)
     want = 2 * test_int
     got = metric_value.merge(MetricKind.DELTA, v, v)
     expect(got.int64Value).to(equal(want))
Esempio n. 24
0
 def test_should_fail_for_metric_values_with_different_types(self):
     changed = metric_value.create(labels=self.TEST_LABELS, int64Value=1)
     for kind in (MetricKind.GAUGE, MetricKind.CUMULATIVE, MetricKind.DELTA):
         testf = lambda: metric_value.merge(kind, self.test_value, changed)
         expect(testf).to(raise_error(ValueError))
Esempio n. 25
0
 def test_should_fail_for_uninitialized_metric_values(self):
     no_init = metric_value.create()
     for kind in (MetricKind.GAUGE, MetricKind.CUMULATIVE, MetricKind.DELTA):
         testf = lambda: metric_value.merge(kind, no_init, no_init)
         expect(testf).to(raise_error(ValueError))
Esempio n. 26
0
class TestConsumerRequestCount(KnownMetricsBase, unittest2.TestCase):
    SUBJECT = _KNOWN.CONSUMER_REQUEST_COUNT
    WANTED_ADDED_METRICS = sc_messages.MetricValueSet(
        metricName=SUBJECT.metric_name,
        metricValues=[metric_value.create(int64Value=1)])
Esempio n. 27
0
 def test_should_succeed_for_delta_metrics_with_the_int64_type(self):
     test_int = 4
     v = metric_value.create(labels=self.TEST_LABELS, int64Value=test_int)
     want = 2 * test_int
     got = metric_value.merge(MetricKind.DELTA, v, v)
     expect(got.int64Value).to(equal(want))
Esempio n. 28
0
 def test_should_fail_for_uninitialized_metric_values(self):
     no_init = metric_value.create()
     for kind in (MetricKind.GAUGE, MetricKind.CUMULATIVE,
                  MetricKind.DELTA):
         testf = lambda: metric_value.merge(kind, no_init, no_init)
         expect(testf).to(raise_error(ValueError))