| Index: third_party/google-endpoints/test/test_metric_descriptor.py
|
| diff --git a/third_party/google-endpoints/test/test_metric_descriptor.py b/third_party/google-endpoints/test/test_metric_descriptor.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..37d5ec13aba1e05dfc287e7cc5c4532338702f3e
|
| --- /dev/null
|
| +++ b/third_party/google-endpoints/test/test_metric_descriptor.py
|
| @@ -0,0 +1,277 @@
|
| +# Copyright 2016 Google Inc. All Rights Reserved.
|
| +#
|
| +# Licensed under the Apache License, Version 2.0 (the "License");
|
| +# you may not use this file except in compliance with the License.
|
| +# You may obtain a copy of the License at
|
| +#
|
| +# http://www.apache.org/licenses/LICENSE-2.0
|
| +#
|
| +# Unless required by applicable law or agreed to in writing, software
|
| +# distributed under the License is distributed on an "AS IS" BASIS,
|
| +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +# See the License for the specific language governing permissions and
|
| +# limitations under the License.
|
| +
|
| +from __future__ import absolute_import
|
| +
|
| +import datetime
|
| +import unittest2
|
| +from expects import be_none, be_true, expect, equal, raise_error
|
| +
|
| +import google.api.gen.servicecontrol_v1_messages as messages
|
| +from google.api.control import (distribution, metric_descriptor, timestamp, MetricKind,
|
| + ValueType)
|
| +from google.api.control import metric_value, operation, report_request
|
| +
|
| +
|
| +_KNOWN = metric_descriptor.KnownMetrics
|
| +
|
| +
|
| +def _wanted_distribution_with_sample(value, *args):
|
| + d = distribution.create_exponential(*args)
|
| + distribution.add_sample(value, d)
|
| + return d
|
| +
|
| +
|
| +def _given_info(wanted_size, test_api_key, api_key_valid=True):
|
| + return report_request.Info(
|
| + request_size=wanted_size,
|
| + response_size=wanted_size,
|
| + request_time=datetime.timedelta(seconds=3),
|
| + backend_time=datetime.timedelta(seconds=2),
|
| + overhead_time=datetime.timedelta(seconds=1),
|
| + api_key=test_api_key,
|
| + api_key_valid=api_key_valid,
|
| + )
|
| +
|
| +
|
| +class KnownMetricsBase(object):
|
| + SUBJECT = None
|
| + WANTED_ADDED_METRICS = []
|
| + WANTED_SIZE = 7426 # arbitrary
|
| + TEST_API_KEY = 'test_key'
|
| + GIVEN_INFO = _given_info(WANTED_SIZE, TEST_API_KEY, api_key_valid=True)
|
| +
|
| + def _base_operation(self):
|
| + return messages.Operation(
|
| + consumerId='project:project_id',
|
| + operationId='an_op_id',
|
| + operationName='an_op_name')
|
| +
|
| + def _wanted_operation(self):
|
| + op = self._base_operation()
|
| + if self.WANTED_ADDED_METRICS:
|
| + op.metricValueSets.append(self.WANTED_ADDED_METRICS)
|
| + return op
|
| +
|
| + def _matching_descriptor(self):
|
| + return messages.MetricDescriptor(
|
| + name=self.SUBJECT.metric_name,
|
| + metricKind=self.SUBJECT.kind,
|
| + valueType=self.SUBJECT.value_type)
|
| +
|
| + def _not_matched(self):
|
| + d = self._matching_descriptor()
|
| + d.metricKind = MetricKind.METRIC_KIND_UNSPECIFIED
|
| + return d
|
| +
|
| + def test_should_be_supported(self):
|
| + expect(_KNOWN.is_supported(self._matching_descriptor())).to(be_true)
|
| + expect(_KNOWN.is_supported(self._not_matched())).not_to(be_true)
|
| +
|
| + def test_should_be_matched_correctly(self):
|
| + expect(self.SUBJECT.matches(self._matching_descriptor())).to(be_true)
|
| + expect(self.SUBJECT.matches(self._not_matched())).not_to(be_true)
|
| +
|
| + def test_should_update_request_info(self):
|
| + an_op = self._base_operation()
|
| + wanted_op = self._wanted_operation()
|
| + self.SUBJECT.do_operation_update(self.GIVEN_INFO, an_op)
|
| + expect(an_op).to(equal(wanted_op))
|
| +
|
| +
|
| +class KnownMetricsInvalidApiKey(KnownMetricsBase):
|
| + GIVEN_INFO = _given_info(KnownMetricsBase.WANTED_SIZE,
|
| + KnownMetricsBase.TEST_API_KEY,
|
| + api_key_valid=False)
|
| +
|
| +
|
| +class TestConsumerRequestCount(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_REQUEST_COUNT
|
| + WANTED_ADDED_METRICS = messages.MetricValueSet(
|
| + metricName=SUBJECT.metric_name,
|
| + metricValues=[metric_value.create(int64Value=1)])
|
| +
|
| +
|
| +class TestConsumerRequestCountInvalidApiKey(KnownMetricsInvalidApiKey,
|
| + unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_REQUEST_COUNT
|
| +
|
| +
|
| +class TestProducerRequestCount(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.PRODUCER_REQUEST_COUNT
|
| + WANTED_ADDED_METRICS = messages.MetricValueSet(
|
| + metricName=SUBJECT.metric_name,
|
| + metricValues=[metric_value.create(int64Value=1)])
|
| +
|
| +
|
| +class TestConsumerRequestSizes(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_REQUEST_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)])
|
| +
|
| +
|
| +class TestConsumerRequestSizesInvalidApiKey(KnownMetricsInvalidApiKey,
|
| + unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_REQUEST_SIZES
|
| +
|
| +
|
| +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 = messages.MetricValueSet(
|
| + metricName=SUBJECT.metric_name,
|
| + metricValues=[metric_value.create(distributionValue=WANTED_DISTRIBUTION)])
|
| +
|
| +
|
| +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)])
|
| +
|
| +
|
| +class TestConsumerResponseSizesInvalidApiKey(KnownMetricsInvalidApiKey,
|
| + unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_RESPONSE_SIZES
|
| +
|
| +
|
| +class TestProducerResponseSizes(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.PRODUCER_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)])
|
| +
|
| +
|
| +class TestConsumerErrorCountNoError(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_ERROR_COUNT
|
| +
|
| +
|
| +class TestConsumerErrorCountWithErrors(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_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)])
|
| +
|
| +
|
| +class TestConsumerErrorCountInvalidApiKey(KnownMetricsInvalidApiKey,
|
| + unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_ERROR_COUNT
|
| +
|
| +
|
| +class TestProducerErrorCountNoError(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.PRODUCER_ERROR_COUNT
|
| +
|
| +
|
| +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)])
|
| +
|
| +
|
| +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)])
|
| +
|
| +
|
| +class TestConsumerTotalLatenciesInvalidApiKey(KnownMetricsInvalidApiKey,
|
| + unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_TOTAL_LATENCIES
|
| +
|
| +
|
| +class TestProducerTotalLatencies(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.PRODUCER_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)])
|
| +
|
| +
|
| +class TestConsumerRequestOverheadLatencies(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_REQUEST_OVERHEAD_LATENCIES
|
| + WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
|
| + KnownMetricsBase.GIVEN_INFO.overhead_time.seconds,
|
| + *metric_descriptor._TIME_DISTRIBUTION_ARGS)
|
| + WANTED_ADDED_METRICS = messages.MetricValueSet(
|
| + metricName=SUBJECT.metric_name,
|
| + metricValues=[metric_value.create(distributionValue=WANTED_DISTRIBUTION)])
|
| +
|
| +
|
| +class TestConsumerRequestOverheadLatenciesInvalidApiKey(
|
| + KnownMetricsInvalidApiKey, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_REQUEST_OVERHEAD_LATENCIES
|
| +
|
| +
|
| +class TestProducerRequestOverheadLatencies(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.PRODUCER_REQUEST_OVERHEAD_LATENCIES
|
| + WANTED_DISTRIBUTION = _wanted_distribution_with_sample(
|
| + KnownMetricsBase.GIVEN_INFO.overhead_time.seconds,
|
| + *metric_descriptor._TIME_DISTRIBUTION_ARGS)
|
| + WANTED_ADDED_METRICS = messages.MetricValueSet(
|
| + metricName=SUBJECT.metric_name,
|
| + metricValues=[metric_value.create(distributionValue=WANTED_DISTRIBUTION)])
|
| +
|
| +
|
| +class TestConsumerBackendLatencies(KnownMetricsBase, unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_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)])
|
| +
|
| +
|
| +class TestConsumerBackendLatenciesInvalidApiKey(KnownMetricsInvalidApiKey,
|
| + unittest2.TestCase):
|
| + SUBJECT = _KNOWN.CONSUMER_BACKEND_LATENCIES
|
| +
|
| +
|
| +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)])
|
|
|