|
12 | 12 | # See the License for the specific language governing permissions and
|
13 | 13 | # limitations under the License.
|
14 | 14 |
|
15 |
| -import unittest |
16 |
| -from unittest import mock |
17 |
| - |
18 |
| -import grpc |
19 |
| -from google.protobuf.timestamp_pb2 import Timestamp |
20 |
| -from opencensus.proto.metrics.v1 import metrics_pb2 |
21 |
| - |
22 |
| -from opentelemetry import metrics |
23 |
| -from opentelemetry.ext.otcollector import metrics_exporter |
24 |
| -from opentelemetry.sdk.metrics import ( |
25 |
| - Counter, |
26 |
| - Measure, |
27 |
| - MeterProvider, |
28 |
| - get_labels_as_key, |
29 |
| -) |
30 |
| -from opentelemetry.sdk.metrics.export import ( |
31 |
| - MetricRecord, |
32 |
| - MetricsExportResult, |
33 |
| - aggregate, |
34 |
| -) |
| 15 | +from unittest import TestCase |
35 | 16 |
|
36 | 17 |
|
37 | 18 | # pylint: disable=no-member
|
38 |
| -class TestCollectorMetricsExporter(unittest.TestCase): |
39 |
| - @classmethod |
40 |
| - def setUpClass(cls): |
41 |
| - # pylint: disable=protected-access |
42 |
| - metrics.set_meter_provider(MeterProvider()) |
43 |
| - cls._meter = metrics.get_meter(__name__) |
44 |
| - cls._labels = {"environment": "staging"} |
45 |
| - cls._key_labels = get_labels_as_key(cls._labels) |
46 |
| - |
47 |
| - def test_constructor(self): |
48 |
| - mock_get_node = mock.Mock() |
49 |
| - patch = mock.patch( |
50 |
| - "opentelemetry.ext.otcollector.util.get_node", |
51 |
| - side_effect=mock_get_node, |
52 |
| - ) |
53 |
| - service_name = "testServiceName" |
54 |
| - host_name = "testHostName" |
55 |
| - client = grpc.insecure_channel("") |
56 |
| - endpoint = "testEndpoint" |
57 |
| - with patch: |
58 |
| - exporter = metrics_exporter.CollectorMetricsExporter( |
59 |
| - service_name=service_name, |
60 |
| - host_name=host_name, |
61 |
| - endpoint=endpoint, |
62 |
| - client=client, |
63 |
| - ) |
64 |
| - |
65 |
| - self.assertIs(exporter.client, client) |
66 |
| - self.assertEqual(exporter.endpoint, endpoint) |
67 |
| - mock_get_node.assert_called_with(service_name, host_name) |
68 |
| - |
69 |
| - def test_get_collector_metric_type(self): |
70 |
| - result = metrics_exporter.get_collector_metric_type( |
71 |
| - Counter("testName", "testDescription", "unit", int, None) |
72 |
| - ) |
73 |
| - self.assertIs(result, metrics_pb2.MetricDescriptor.CUMULATIVE_INT64) |
74 |
| - result = metrics_exporter.get_collector_metric_type( |
75 |
| - Counter("testName", "testDescription", "unit", float, None) |
76 |
| - ) |
77 |
| - self.assertIs(result, metrics_pb2.MetricDescriptor.CUMULATIVE_DOUBLE) |
78 |
| - result = metrics_exporter.get_collector_metric_type( |
79 |
| - Measure("testName", "testDescription", "unit", None, None) |
80 |
| - ) |
81 |
| - self.assertIs(result, metrics_pb2.MetricDescriptor.UNSPECIFIED) |
82 |
| - |
83 |
| - def test_get_collector_point(self): |
84 |
| - aggregator = aggregate.CounterAggregator() |
85 |
| - int_counter = self._meter.create_metric( |
86 |
| - "testName", "testDescription", "unit", int, Counter |
87 |
| - ) |
88 |
| - float_counter = self._meter.create_metric( |
89 |
| - "testName", "testDescription", "unit", float, Counter |
90 |
| - ) |
91 |
| - measure = self._meter.create_metric( |
92 |
| - "testName", "testDescription", "unit", float, Measure |
93 |
| - ) |
94 |
| - result = metrics_exporter.get_collector_point( |
95 |
| - MetricRecord(aggregator, self._key_labels, int_counter) |
96 |
| - ) |
97 |
| - self.assertIsInstance(result, metrics_pb2.Point) |
98 |
| - self.assertIsInstance(result.timestamp, Timestamp) |
99 |
| - self.assertEqual(result.int64_value, 0) |
100 |
| - aggregator.update(123.5) |
101 |
| - aggregator.take_checkpoint() |
102 |
| - result = metrics_exporter.get_collector_point( |
103 |
| - MetricRecord(aggregator, self._key_labels, float_counter) |
104 |
| - ) |
105 |
| - self.assertEqual(result.double_value, 123.5) |
106 |
| - self.assertRaises( |
107 |
| - TypeError, |
108 |
| - metrics_exporter.get_collector_point( |
109 |
| - MetricRecord(aggregator, self._key_labels, measure) |
110 |
| - ), |
111 |
| - ) |
112 |
| - |
113 |
| - def test_export(self): |
114 |
| - mock_client = mock.MagicMock() |
115 |
| - mock_export = mock.MagicMock() |
116 |
| - mock_client.Export = mock_export |
117 |
| - host_name = "testHostName" |
118 |
| - collector_exporter = metrics_exporter.CollectorMetricsExporter( |
119 |
| - client=mock_client, host_name=host_name |
120 |
| - ) |
121 |
| - test_metric = self._meter.create_metric( |
122 |
| - "testname", "testdesc", "unit", int, Counter, ["environment"] |
123 |
| - ) |
124 |
| - record = MetricRecord( |
125 |
| - aggregate.CounterAggregator(), self._key_labels, test_metric |
126 |
| - ) |
127 |
| - |
128 |
| - result = collector_exporter.export([record]) |
129 |
| - self.assertIs(result, MetricsExportResult.SUCCESS) |
130 |
| - # pylint: disable=unsubscriptable-object |
131 |
| - export_arg = mock_export.call_args[0] |
132 |
| - service_request = next(export_arg[0]) |
133 |
| - output_metrics = getattr(service_request, "metrics") |
134 |
| - output_node = getattr(service_request, "node") |
135 |
| - self.assertEqual(len(output_metrics), 1) |
136 |
| - self.assertIsNotNone(getattr(output_node, "library_info")) |
137 |
| - self.assertIsNotNone(getattr(output_node, "service_info")) |
138 |
| - output_identifier = getattr(output_node, "identifier") |
139 |
| - self.assertEqual( |
140 |
| - getattr(output_identifier, "host_name"), "testHostName" |
141 |
| - ) |
| 19 | +class TestOTLPMetricsExporter(TestCase): |
142 | 20 |
|
143 |
| - def test_translate_to_collector(self): |
144 |
| - test_metric = self._meter.create_metric( |
145 |
| - "testname", "testdesc", "unit", int, Counter, ["environment"] |
146 |
| - ) |
147 |
| - aggregator = aggregate.CounterAggregator() |
148 |
| - aggregator.update(123) |
149 |
| - aggregator.take_checkpoint() |
150 |
| - record = MetricRecord(aggregator, self._key_labels, test_metric) |
151 |
| - output_metrics = metrics_exporter.translate_to_collector([record]) |
152 |
| - self.assertEqual(len(output_metrics), 1) |
153 |
| - self.assertIsInstance(output_metrics[0], metrics_pb2.Metric) |
154 |
| - self.assertEqual(output_metrics[0].metric_descriptor.name, "testname") |
155 |
| - self.assertEqual( |
156 |
| - output_metrics[0].metric_descriptor.description, "testdesc" |
157 |
| - ) |
158 |
| - self.assertEqual(output_metrics[0].metric_descriptor.unit, "unit") |
159 |
| - self.assertEqual( |
160 |
| - output_metrics[0].metric_descriptor.type, |
161 |
| - metrics_pb2.MetricDescriptor.CUMULATIVE_INT64, |
162 |
| - ) |
163 |
| - self.assertEqual( |
164 |
| - len(output_metrics[0].metric_descriptor.label_keys), 1 |
165 |
| - ) |
166 |
| - self.assertEqual( |
167 |
| - output_metrics[0].metric_descriptor.label_keys[0].key, |
168 |
| - "environment", |
169 |
| - ) |
170 |
| - self.assertEqual(len(output_metrics[0].timeseries), 1) |
171 |
| - self.assertEqual(len(output_metrics[0].timeseries[0].label_values), 1) |
172 |
| - self.assertEqual( |
173 |
| - output_metrics[0].timeseries[0].label_values[0].has_value, True |
174 |
| - ) |
175 |
| - self.assertEqual( |
176 |
| - output_metrics[0].timeseries[0].label_values[0].value, "staging" |
177 |
| - ) |
178 |
| - self.assertEqual(len(output_metrics[0].timeseries[0].points), 1) |
179 |
| - self.assertEqual( |
180 |
| - output_metrics[0].timeseries[0].points[0].timestamp.seconds, |
181 |
| - record.aggregator.last_update_timestamp // 1000000000, |
182 |
| - ) |
183 |
| - self.assertEqual( |
184 |
| - output_metrics[0].timeseries[0].points[0].timestamp.nanos, |
185 |
| - record.aggregator.last_update_timestamp % 1000000000, |
186 |
| - ) |
187 |
| - self.assertEqual( |
188 |
| - output_metrics[0].timeseries[0].points[0].int64_value, 123 |
189 |
| - ) |
| 21 | + def test_case(self): |
| 22 | + pass |
0 commit comments