Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba2e62d

Browse files
author
Andrew Xue
authored
chore: add test coverage for Cloud Monitoring exporter (open-telemetry#804)
Previously cloud monitoring was missing coverage.
1 parent 43e78ae commit ba2e62d

File tree

4 files changed

+46
-27
lines changed

4 files changed

+46
-27
lines changed

ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,17 @@ def _get_metric_descriptor(
6767
:param record:
6868
:return:
6969
"""
70+
instrument = record.instrument
7071
descriptor_type = "custom.googleapis.com/OpenTelemetry/{}".format(
71-
record.metric.name
72+
instrument.name
7273
)
7374
if descriptor_type in self._metric_descriptors:
7475
return self._metric_descriptors[descriptor_type]
7576
descriptor = {
7677
"name": None,
7778
"type": descriptor_type,
78-
"display_name": record.metric.name,
79-
"description": record.metric.description,
79+
"display_name": instrument.name,
80+
"description": instrument.description,
8081
"labels": [],
8182
}
8283
for key, value in record.labels:
@@ -104,9 +105,9 @@ def _get_metric_descriptor(
104105
type(record.aggregator).__name__,
105106
)
106107
return None
107-
if record.metric.value_type == int:
108+
if instrument.value_type == int:
108109
descriptor["value_type"] = MetricDescriptor.ValueType.INT64
109-
elif record.metric.value_type == float:
110+
elif instrument.value_type == float:
110111
descriptor["value_type"] = MetricDescriptor.ValueType.DOUBLE
111112
proto_descriptor = MetricDescriptor(**descriptor)
112113
try:
@@ -129,6 +130,7 @@ def export(
129130
) -> "MetricsExportResult":
130131
all_series = []
131132
for record in metric_records:
133+
instrument = record.instrument
132134
metric_descriptor = self._get_metric_descriptor(record)
133135
if not metric_descriptor:
134136
continue
@@ -140,9 +142,9 @@ def export(
140142
series.metric.labels[key] = str(value)
141143

142144
point = series.points.add()
143-
if record.metric.value_type == int:
145+
if instrument.value_type == int:
144146
point.value.int64_value = record.aggregator.checkpoint
145-
elif record.metric.value_type == float:
147+
elif instrument.value_type == float:
146148
point.value.double_value = record.aggregator.checkpoint
147149
seconds, nanos = divmod(
148150
record.aggregator.last_update_timestamp, 1e9

ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ def test_constructor_explicit(self):
7171

7272
def test_batch_write(self):
7373
client = mock.Mock()
74-
exporter = CloudMonitoringMetricsExporter(client=client)
74+
exporter = CloudMonitoringMetricsExporter(
75+
project_id=self.project_id, client=client
76+
)
7577
exporter.project_name = self.project_name
7678
exporter._batch_write(range(2 * MAX_BATCH_WRITE + 1))
7779
client.create_time_series.assert_has_calls(
@@ -100,17 +102,19 @@ def test_batch_write(self):
100102

101103
def test_get_metric_descriptor(self):
102104
client = mock.Mock()
103-
exporter = CloudMonitoringMetricsExporter(client=client)
105+
exporter = CloudMonitoringMetricsExporter(
106+
project_id=self.project_id, client=client
107+
)
104108
exporter.project_name = self.project_name
105109

106110
self.assertIsNone(
107111
exporter._get_metric_descriptor(
108-
MetricRecord(UnsupportedAggregator(), (), MockMetric())
112+
MetricRecord(MockMetric(), (), UnsupportedAggregator())
109113
)
110114
)
111115

112116
record = MetricRecord(
113-
CounterAggregator(), (("label1", "value1"),), MockMetric()
117+
MockMetric(), (("label1", "value1"),), CounterAggregator(),
114118
)
115119
metric_descriptor = exporter._get_metric_descriptor(record)
116120
client.create_metric_descriptor.assert_called_with(
@@ -132,20 +136,20 @@ def test_get_metric_descriptor(self):
132136

133137
# Getting a cached metric descriptor shouldn't use another call
134138
cached_metric_descriptor = exporter._get_metric_descriptor(record)
135-
client.create_metric_descriptor.assert_called_once()
139+
self.assertEqual(client.create_metric_descriptor.call_count, 1)
136140
self.assertEqual(metric_descriptor, cached_metric_descriptor)
137141

138142
# Drop labels with values that aren't string, int or bool
139143
exporter._get_metric_descriptor(
140144
MetricRecord(
141-
CounterAggregator(),
145+
MockMetric(name="name2", value_type=float),
142146
(
143147
("label1", "value1"),
144148
("label2", dict()),
145149
("label3", 3),
146150
("label4", False),
147151
),
148-
MockMetric(name="name2", value_type=float),
152+
CounterAggregator(),
149153
)
150154
)
151155
client.create_metric_descriptor.assert_called_with(
@@ -169,15 +173,17 @@ def test_get_metric_descriptor(self):
169173

170174
def test_export(self):
171175
client = mock.Mock()
172-
exporter = CloudMonitoringMetricsExporter(client=client)
176+
exporter = CloudMonitoringMetricsExporter(
177+
project_id=self.project_id, client=client
178+
)
173179
exporter.project_name = self.project_name
174180

175181
exporter.export(
176182
[
177183
MetricRecord(
178-
UnsupportedAggregator(),
179-
(("label1", "value1"),),
180184
MockMetric(),
185+
(("label1", "value1"),),
186+
UnsupportedAggregator(),
181187
)
182188
]
183189
)
@@ -204,14 +210,14 @@ def test_export(self):
204210
exporter.export(
205211
[
206212
MetricRecord(
207-
counter_one,
208-
(("label1", "value1"), ("label2", 1),),
209213
MockMetric(),
214+
(("label1", "value1"), ("label2", 1),),
215+
counter_one,
210216
),
211217
MetricRecord(
212-
counter_one,
213-
(("label1", "value2"), ("label2", 2),),
214218
MockMetric(),
219+
(("label1", "value2"), ("label2", 2),),
220+
counter_one,
215221
),
216222
]
217223
)
@@ -245,14 +251,14 @@ def test_export(self):
245251
exporter.export(
246252
[
247253
MetricRecord(
248-
counter_two,
249-
(("label1", "value1"), ("label2", 1),),
250254
MockMetric(),
255+
(("label1", "value1"), ("label2", 1),),
256+
counter_two,
251257
),
252258
MetricRecord(
253-
counter_two,
254-
(("label1", "value2"), ("label2", 2),),
255259
MockMetric(),
260+
(("label1", "value2"), ("label2", 2),),
261+
counter_two,
256262
),
257263
]
258264
)
@@ -263,9 +269,9 @@ def test_export(self):
263269
exporter.export(
264270
[
265271
MetricRecord(
266-
counter_two,
267-
(("label1", "changed_label"), ("label2", 2),),
268272
MockMetric(),
273+
(("label1", "changed_label"), ("label2", 2),),
274+
counter_two,
269275
),
270276
]
271277
)

scripts/coverage.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ cov ext/opentelemetry-ext-requests
3737
cov ext/opentelemetry-ext-jaeger
3838
cov ext/opentelemetry-ext-opentracing-shim
3939
cov ext/opentelemetry-exporter-cloud-trace
40+
cov ext/opentelemetry-exporter-cloud-monitoring
4041
cov ext/opentelemetry-ext-wsgi
4142
cov ext/opentelemetry-ext-zipkin
4243
cov docs/examples/opentelemetry-example-app

tox.ini

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ envlist =
142142
; Coverage is temporarily disabled for pypy3 due to the pytest bug.
143143
; pypy3-coverage
144144

145+
; opentelemetry-exporter-cloud-monitoring
146+
py3{4,5,6,7,8}-test-exporter-cloud-monitoring
147+
148+
; opentelemetry-exporter-cloud-trace
149+
py3{4,5,6,7,8}-test-exporter-cloud-trace
150+
145151
lint
146152
py38-tracecontext
147153
py38-{mypy,mypyinstalled}
@@ -178,6 +184,7 @@ changedir =
178184
test-ext-prometheus: ext/opentelemetry-ext-prometheus/tests
179185
test-ext-pymongo: ext/opentelemetry-ext-pymongo/tests
180186
test-exporter-cloud-trace: ext/opentelemetry-exporter-cloud-trace/tests
187+
test-exporter-cloud-monitoring: ext/opentelemetry-exporter-cloud-monitoring/tests
181188
test-ext-psycopg2: ext/opentelemetry-ext-psycopg2/tests
182189
test-ext-pymysql: ext/opentelemetry-ext-pymysql/tests
183190
test-ext-pyramid: ext/opentelemetry-ext-pyramid/tests
@@ -267,6 +274,9 @@ commands_pre =
267274

268275
system-metrics: pip install {toxinidir}/ext/opentelemetry-ext-system-metrics[test]
269276

277+
exporter-cloud-monitoring: pip install {toxinidir}/ext/opentelemetry-exporter-cloud-monitoring
278+
exporter-cloud-trace: pip install {toxinidir}/ext/opentelemetry-exporter-cloud-trace
279+
270280
; In order to get a healthy coverage report,
271281
; we have to install packages in editable mode.
272282
coverage: python {toxinidir}/scripts/eachdist.py install --editable

0 commit comments

Comments
 (0)