Skip to content

Commit a7bd563

Browse files
authored
Change metrics test to work with base_test.py (#1688)
1 parent a50caf2 commit a7bd563

File tree

5 files changed

+358
-393
lines changed

5 files changed

+358
-393
lines changed

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
- 'release/*'
77
pull_request:
88
env:
9-
CORE_REPO_SHA: d0bb12b34b0c487198c935001636b6163485a50f
9+
CORE_REPO_SHA: 2d1f0b9f5fce62549d1338882f37b91b95881c75
1010

1111
jobs:
1212
build:

instrumentation/opentelemetry-instrumentation-tornado/tests/test_metrics_instrumentation.py

+91-147
Original file line numberDiff line numberDiff line change
@@ -15,97 +15,23 @@
1515

1616
from timeit import default_timer
1717

18-
from tornado.testing import AsyncHTTPTestCase
19-
20-
from opentelemetry import trace
2118
from opentelemetry.instrumentation.tornado import TornadoInstrumentor
22-
from opentelemetry.sdk.metrics.export import (
23-
HistogramDataPoint,
24-
NumberDataPoint,
25-
)
26-
from opentelemetry.test.test_base import TestBase
27-
28-
from .tornado_test_app import make_app
29-
19+
from opentelemetry.sdk.metrics.export import HistogramDataPoint
3020

31-
class TornadoTest(AsyncHTTPTestCase, TestBase):
32-
# pylint:disable=no-self-use
33-
def get_app(self):
34-
tracer = trace.get_tracer(__name__)
35-
app = make_app(tracer)
36-
return app
37-
38-
def get_sorted_metrics(self):
39-
resource_metrics = (
40-
self.memory_metrics_reader.get_metrics_data().resource_metrics
41-
)
42-
for metrics in resource_metrics:
43-
for scope_metrics in metrics.scope_metrics:
44-
all_metrics = list(scope_metrics.metrics)
45-
return self.sorted_metrics(all_metrics)
46-
47-
@staticmethod
48-
def sorted_metrics(metrics):
49-
"""
50-
Sorts metrics by metric name.
51-
"""
52-
return sorted(
53-
metrics,
54-
key=lambda m: m.name,
55-
)
21+
from .test_instrumentation import ( # pylint: disable=no-name-in-module,import-error
22+
TornadoTest,
23+
)
5624

57-
def assert_metric_expected(
58-
self, metric, expected_value, expected_attributes
59-
):
60-
data_point = next(iter(metric.data.data_points))
6125

62-
if isinstance(data_point, HistogramDataPoint):
63-
self.assertEqual(
64-
data_point.sum,
65-
expected_value,
66-
)
67-
elif isinstance(data_point, NumberDataPoint):
68-
self.assertEqual(
69-
data_point.value,
70-
expected_value,
26+
class TestTornadoMetricsInstrumentation(TornadoTest):
27+
# Return Sequence with one histogram
28+
def create_histogram_data_points(self, sum_data_point, attributes):
29+
return [
30+
self.create_histogram_data_point(
31+
sum_data_point, 1, sum_data_point, sum_data_point, attributes
7132
)
33+
]
7234

73-
self.assertDictEqual(
74-
expected_attributes,
75-
dict(data_point.attributes),
76-
)
77-
78-
def assert_duration_metric_expected(
79-
self, metric, duration_estimated, expected_attributes
80-
):
81-
data_point = next(iter(metric.data.data_points))
82-
83-
self.assertAlmostEqual(
84-
data_point.sum,
85-
duration_estimated,
86-
delta=200,
87-
)
88-
89-
self.assertDictEqual(
90-
expected_attributes,
91-
dict(data_point.attributes),
92-
)
93-
94-
def setUp(self):
95-
super().setUp()
96-
TornadoInstrumentor().instrument(
97-
server_request_hook=getattr(self, "server_request_hook", None),
98-
client_request_hook=getattr(self, "client_request_hook", None),
99-
client_response_hook=getattr(self, "client_response_hook", None),
100-
meter_provider=self.meter_provider,
101-
)
102-
103-
def tearDown(self):
104-
TornadoInstrumentor().uninstrument()
105-
super().tearDown()
106-
107-
108-
class TestTornadoInstrumentor(TornadoTest):
10935
def test_basic_metrics(self):
11036
start_time = default_timer()
11137
response = self.fetch("/")
@@ -132,104 +58,122 @@ def test_basic_metrics(self):
13258
)
13359
self.assert_metric_expected(
13460
server_active_request,
135-
0,
136-
{
137-
"http.method": "GET",
138-
"http.flavor": "HTTP/1.1",
139-
"http.scheme": "http",
140-
"http.target": "/",
141-
"http.host": response.request.headers["host"],
142-
},
61+
[
62+
self.create_number_data_point(
63+
0,
64+
attributes={
65+
"http.method": "GET",
66+
"http.flavor": "HTTP/1.1",
67+
"http.scheme": "http",
68+
"http.target": "/",
69+
"http.host": response.request.headers["host"],
70+
},
71+
),
72+
],
14373
)
14474

14575
self.assertEqual(server_duration.name, "http.server.duration")
146-
self.assert_duration_metric_expected(
76+
self.assert_metric_expected(
14777
server_duration,
148-
client_duration_estimated,
149-
{
150-
"http.status_code": response.code,
151-
"http.method": "GET",
152-
"http.flavor": "HTTP/1.1",
153-
"http.scheme": "http",
154-
"http.target": "/",
155-
"http.host": response.request.headers["host"],
156-
},
78+
self.create_histogram_data_points(
79+
client_duration_estimated,
80+
attributes={
81+
"http.method": "GET",
82+
"http.flavor": "HTTP/1.1",
83+
"http.scheme": "http",
84+
"http.target": "/",
85+
"http.host": response.request.headers["host"],
86+
"http.status_code": response.code,
87+
},
88+
),
89+
est_value_delta=200,
15790
)
15891

15992
self.assertEqual(server_request_size.name, "http.server.request.size")
16093
self.assert_metric_expected(
16194
server_request_size,
162-
0,
163-
{
164-
"http.status_code": 200,
165-
"http.method": "GET",
166-
"http.flavor": "HTTP/1.1",
167-
"http.scheme": "http",
168-
"http.target": "/",
169-
"http.host": response.request.headers["host"],
170-
},
95+
self.create_histogram_data_points(
96+
0,
97+
attributes={
98+
"http.status_code": 200,
99+
"http.method": "GET",
100+
"http.flavor": "HTTP/1.1",
101+
"http.scheme": "http",
102+
"http.target": "/",
103+
"http.host": response.request.headers["host"],
104+
},
105+
),
171106
)
172107

173108
self.assertEqual(
174109
server_response_size.name, "http.server.response.size"
175110
)
176111
self.assert_metric_expected(
177112
server_response_size,
178-
len(response.body),
179-
{
180-
"http.status_code": response.code,
181-
"http.method": "GET",
182-
"http.flavor": "HTTP/1.1",
183-
"http.scheme": "http",
184-
"http.target": "/",
185-
"http.host": response.request.headers["host"],
186-
},
113+
self.create_histogram_data_points(
114+
len(response.body),
115+
attributes={
116+
"http.status_code": response.code,
117+
"http.method": "GET",
118+
"http.flavor": "HTTP/1.1",
119+
"http.scheme": "http",
120+
"http.target": "/",
121+
"http.host": response.request.headers["host"],
122+
},
123+
),
187124
)
188125

189126
self.assertEqual(client_duration.name, "http.client.duration")
190-
self.assert_duration_metric_expected(
127+
self.assert_metric_expected(
191128
client_duration,
192-
client_duration_estimated,
193-
{
194-
"http.status_code": response.code,
195-
"http.method": "GET",
196-
"http.url": response.effective_url,
197-
},
129+
self.create_histogram_data_points(
130+
client_duration_estimated,
131+
attributes={
132+
"http.status_code": response.code,
133+
"http.method": "GET",
134+
"http.url": response.effective_url,
135+
},
136+
),
137+
est_value_delta=200,
198138
)
199139

200140
self.assertEqual(client_request_size.name, "http.client.request.size")
201141
self.assert_metric_expected(
202142
client_request_size,
203-
0,
204-
{
205-
"http.status_code": response.code,
206-
"http.method": "GET",
207-
"http.url": response.effective_url,
208-
},
143+
self.create_histogram_data_points(
144+
0,
145+
attributes={
146+
"http.status_code": response.code,
147+
"http.method": "GET",
148+
"http.url": response.effective_url,
149+
},
150+
),
209151
)
210152

211153
self.assertEqual(
212154
client_response_size.name, "http.client.response.size"
213155
)
214156
self.assert_metric_expected(
215157
client_response_size,
216-
len(response.body),
217-
{
218-
"http.status_code": response.code,
219-
"http.method": "GET",
220-
"http.url": response.effective_url,
221-
},
158+
self.create_histogram_data_points(
159+
len(response.body),
160+
attributes={
161+
"http.status_code": response.code,
162+
"http.method": "GET",
163+
"http.url": response.effective_url,
164+
},
165+
),
222166
)
223167

224168
def test_metric_uninstrument(self):
225169
self.fetch("/")
226170
TornadoInstrumentor().uninstrument()
227171
self.fetch("/")
228172

229-
metrics_list = self.memory_metrics_reader.get_metrics_data()
230-
for resource_metric in metrics_list.resource_metrics:
231-
for scope_metric in resource_metric.scope_metrics:
232-
for metric in scope_metric.metrics:
233-
for point in list(metric.data.data_points):
234-
if isinstance(point, HistogramDataPoint):
235-
self.assertEqual(point.count, 1)
173+
metrics = self.get_sorted_metrics()
174+
self.assertEqual(len(metrics), 7)
175+
176+
for metric in metrics:
177+
for point in list(metric.data.data_points):
178+
if isinstance(point, HistogramDataPoint):
179+
self.assertEqual(point.count, 1)

0 commit comments

Comments
 (0)