Skip to content

Commit 947d559

Browse files
committed
Add more test cases
1 parent ab59f20 commit 947d559

File tree

1 file changed

+43
-245
lines changed

1 file changed

+43
-245
lines changed

opentelemetry-sdk/tests/metrics/integration_test/test_explicit_bucket_histogram_aggregation.py

Lines changed: 43 additions & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -12,244 +12,23 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from itertools import count
16-
from logging import ERROR
1715
from platform import system
1816
from unittest import TestCase
1917

2018
from pytest import mark
2119

22-
from opentelemetry.metrics import Observation
23-
from opentelemetry.sdk.metrics import Counter, MeterProvider, ObservableCounter
20+
from opentelemetry.sdk.metrics import Histogram, MeterProvider
2421
from opentelemetry.sdk.metrics.export import (
2522
AggregationTemporality,
2623
InMemoryMetricReader,
2724
)
28-
from opentelemetry.sdk.metrics.view import SumAggregation
25+
from opentelemetry.sdk.metrics.view import ExplicitBucketHistogramAggregation
2926

3027

31-
class TestSumAggregation(TestCase):
32-
@mark.skipif(
33-
system() != "Linux",
34-
reason=(
35-
"Tests fail because Windows time_ns resolution is too low so "
36-
"two different time measurements may end up having the exact same"
37-
"value."
38-
),
39-
)
40-
def test_asynchronous_delta_temporality(self):
41-
42-
eight_multiple_generator = count(start=8, step=8)
43-
44-
counter = 0
45-
46-
def observable_counter_callback(callback_options):
47-
nonlocal counter
48-
counter += 1
49-
50-
if counter < 11:
51-
yield
52-
53-
elif counter < 21:
54-
yield Observation(next(eight_multiple_generator))
55-
56-
else:
57-
yield
58-
59-
aggregation = SumAggregation()
60-
61-
reader = InMemoryMetricReader(
62-
preferred_aggregation={ObservableCounter: aggregation},
63-
preferred_temporality={
64-
ObservableCounter: AggregationTemporality.DELTA
65-
},
66-
)
67-
68-
provider = MeterProvider(metric_readers=[reader])
69-
meter = provider.get_meter("name", "version")
70-
71-
meter.create_observable_counter(
72-
"observable_counter", [observable_counter_callback]
73-
)
74-
75-
results = []
76-
77-
for _ in range(10):
78-
with self.assertLogs(level=ERROR):
79-
results.append(reader.get_metrics_data())
80-
81-
self.assertEqual(counter, 10)
82-
83-
for metrics_data in results:
84-
self.assertIsNone(metrics_data)
85-
86-
results = []
28+
class TestExplicitBucketHistogramAggregation(TestCase):
8729

88-
for _ in range(10):
89-
results.append(reader.get_metrics_data())
90-
91-
self.assertEqual(counter, 20)
92-
93-
previous_time_unix_nano = (
94-
results[0]
95-
.resource_metrics[0]
96-
.scope_metrics[0]
97-
.metrics[0]
98-
.data.data_points[0]
99-
.time_unix_nano
100-
)
101-
102-
self.assertEqual(
103-
(
104-
results[0]
105-
.resource_metrics[0]
106-
.scope_metrics[0]
107-
.metrics[0]
108-
.data.data_points[0]
109-
.value
110-
),
111-
8,
112-
)
113-
114-
self.assertLess(
115-
(
116-
results[0]
117-
.resource_metrics[0]
118-
.scope_metrics[0]
119-
.metrics[0]
120-
.data.data_points[0]
121-
.start_time_unix_nano
122-
),
123-
previous_time_unix_nano,
124-
)
125-
126-
for metrics_data in results[1:]:
127-
128-
metric_data = (
129-
metrics_data.resource_metrics[0]
130-
.scope_metrics[0]
131-
.metrics[0]
132-
.data.data_points[0]
133-
)
134-
135-
self.assertEqual(
136-
previous_time_unix_nano, metric_data.start_time_unix_nano
137-
)
138-
previous_time_unix_nano = metric_data.time_unix_nano
139-
self.assertEqual(metric_data.value, 8)
140-
self.assertLess(
141-
metric_data.start_time_unix_nano, metric_data.time_unix_nano
142-
)
143-
144-
results = []
145-
146-
for _ in range(10):
147-
with self.assertLogs(level=ERROR):
148-
results.append(reader.get_metrics_data())
149-
150-
self.assertEqual(counter, 30)
151-
152-
provider.shutdown()
153-
154-
for metrics_data in results:
155-
self.assertIsNone(metrics_data)
156-
157-
@mark.skipif(
158-
system() != "Linux",
159-
reason=(
160-
"Tests fail because Windows time_ns resolution is too low so "
161-
"two different time measurements may end up having the exact same"
162-
"value."
163-
),
164-
)
165-
def test_asynchronous_cumulative_temporality(self):
166-
167-
eight_multiple_generator = count(start=8, step=8)
168-
169-
counter = 0
170-
171-
def observable_counter_callback(callback_options):
172-
nonlocal counter
173-
counter += 1
174-
175-
if counter < 11:
176-
yield
177-
178-
elif counter < 21:
179-
yield Observation(next(eight_multiple_generator))
180-
181-
else:
182-
yield
183-
184-
aggregation = SumAggregation()
185-
186-
reader = InMemoryMetricReader(
187-
preferred_aggregation={ObservableCounter: aggregation},
188-
preferred_temporality={
189-
ObservableCounter: AggregationTemporality.CUMULATIVE
190-
},
191-
)
192-
193-
provider = MeterProvider(metric_readers=[reader])
194-
meter = provider.get_meter("name", "version")
195-
196-
meter.create_observable_counter(
197-
"observable_counter", [observable_counter_callback]
198-
)
199-
200-
results = []
201-
202-
for _ in range(10):
203-
with self.assertLogs(level=ERROR):
204-
results.append(reader.get_metrics_data())
205-
206-
self.assertEqual(counter, 10)
207-
208-
for metrics_data in results:
209-
self.assertIsNone(metrics_data)
210-
211-
results = []
212-
213-
for _ in range(10):
214-
results.append(reader.get_metrics_data())
215-
216-
self.assertEqual(counter, 20)
217-
218-
start_time_unix_nano = (
219-
results[0]
220-
.resource_metrics[0]
221-
.scope_metrics[0]
222-
.metrics[0]
223-
.data.data_points[0]
224-
.start_time_unix_nano
225-
)
226-
227-
for index, metrics_data in enumerate(results):
228-
229-
metric_data = (
230-
metrics_data.resource_metrics[0]
231-
.scope_metrics[0]
232-
.metrics[0]
233-
.data.data_points[0]
234-
)
235-
236-
self.assertEqual(
237-
start_time_unix_nano, metric_data.start_time_unix_nano
238-
)
239-
self.assertEqual(metric_data.value, 8 * (index + 1))
240-
241-
results = []
242-
243-
for _ in range(10):
244-
with self.assertLogs(level=ERROR):
245-
results.append(reader.get_metrics_data())
246-
247-
self.assertEqual(counter, 30)
248-
249-
provider.shutdown()
250-
251-
for metrics_data in results:
252-
self.assertIsNone(metrics_data)
30+
def setUp(self):
31+
self.test_values = iter([1, 6, 11, 26, 51, 76, 101, 251, 501, 751])
25332

25433
@mark.skipif(
25534
system() != "Linux",
@@ -261,17 +40,17 @@ def observable_counter_callback(callback_options):
26140
)
26241
def test_synchronous_delta_temporality(self):
26342

264-
aggregation = SumAggregation()
43+
aggregation = ExplicitBucketHistogramAggregation()
26544

26645
reader = InMemoryMetricReader(
267-
preferred_aggregation={Counter: aggregation},
268-
preferred_temporality={Counter: AggregationTemporality.DELTA},
46+
preferred_aggregation={Histogram: aggregation},
47+
preferred_temporality={Histogram: AggregationTemporality.DELTA},
26948
)
27049

27150
provider = MeterProvider(metric_readers=[reader])
27251
meter = provider.get_meter("name", "version")
27352

274-
counter = meter.create_counter("counter")
53+
histogram = meter.create_histogram("histogram")
27554

27655
results = []
27756

@@ -284,8 +63,8 @@ def test_synchronous_delta_temporality(self):
28463

28564
results = []
28665

287-
for _ in range(10):
288-
counter.add(8)
66+
for test_value in self.test_values:
67+
histogram.record(test_value)
28968
results.append(reader.get_metrics_data())
29069

29170
previous_time_unix_nano = (
@@ -304,9 +83,9 @@ def test_synchronous_delta_temporality(self):
30483
.scope_metrics[0]
30584
.metrics[0]
30685
.data.data_points[0]
307-
.value
86+
.bucket_counts
30887
),
309-
8,
88+
(0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
31089
)
31190

31291
self.assertLess(
@@ -321,8 +100,7 @@ def test_synchronous_delta_temporality(self):
321100
previous_time_unix_nano,
322101
)
323102

324-
for metrics_data in results[1:]:
325-
103+
for index, metrics_data in enumerate(results[1:]):
326104
metric_data = (
327105
metrics_data.resource_metrics[0]
328106
.scope_metrics[0]
@@ -334,7 +112,16 @@ def test_synchronous_delta_temporality(self):
334112
previous_time_unix_nano, metric_data.start_time_unix_nano
335113
)
336114
previous_time_unix_nano = metric_data.time_unix_nano
337-
self.assertEqual(metric_data.value, 8)
115+
self.assertEqual(
116+
metric_data.bucket_counts,
117+
tuple(
118+
[
119+
1 if internal_index == index + 2 else 0
120+
for internal_index in range(16)
121+
]
122+
)
123+
124+
)
338125
self.assertLess(
339126
metric_data.start_time_unix_nano, metric_data.time_unix_nano
340127
)
@@ -360,17 +147,17 @@ def test_synchronous_delta_temporality(self):
360147
)
361148
def test_synchronous_cumulative_temporality(self):
362149

363-
aggregation = SumAggregation()
150+
aggregation = ExplicitBucketHistogramAggregation()
364151

365152
reader = InMemoryMetricReader(
366-
preferred_aggregation={Counter: aggregation},
367-
preferred_temporality={Counter: AggregationTemporality.CUMULATIVE},
153+
preferred_aggregation={Histogram: aggregation},
154+
preferred_temporality={Histogram: AggregationTemporality.CUMULATIVE},
368155
)
369156

370157
provider = MeterProvider(metric_readers=[reader])
371158
meter = provider.get_meter("name", "version")
372159

373-
counter = meter.create_counter("counter")
160+
histogram = meter.create_histogram("histogram")
374161

375162
results = []
376163

@@ -383,9 +170,9 @@ def test_synchronous_cumulative_temporality(self):
383170

384171
results = []
385172

386-
for _ in range(10):
173+
for test_value in self.test_values:
387174

388-
counter.add(8)
175+
histogram.record(test_value)
389176
results.append(reader.get_metrics_data())
390177

391178
start_time_unix_nano = (
@@ -409,7 +196,15 @@ def test_synchronous_cumulative_temporality(self):
409196
self.assertEqual(
410197
start_time_unix_nano, metric_data.start_time_unix_nano
411198
)
412-
self.assertEqual(metric_data.value, 8 * (index + 1))
199+
self.assertEqual(
200+
metric_data.bucket_counts,
201+
tuple(
202+
[
203+
0 if internal_index < 1 or internal_index > index + 1 else 1
204+
for internal_index in range(16)
205+
]
206+
)
207+
)
413208

414209
results = []
415210

@@ -440,4 +235,7 @@ def test_synchronous_cumulative_temporality(self):
440235
self.assertEqual(
441236
start_time_unix_nano, metric_data.start_time_unix_nano
442237
)
443-
self.assertEqual(metric_data.value, 80)
238+
self.assertEqual(
239+
metric_data.bucket_counts,
240+
(0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0)
241+
)

0 commit comments

Comments
 (0)