1+ import asyncio
2+ import aiounittest
13from concurrent .futures import ThreadPoolExecutor
24import time
35import unittest
46
5- import pytest
6-
77from prometheus_client .core import (
88 CollectorRegistry , Counter , CounterMetricFamily , Enum , Gauge ,
99 GaugeHistogramMetricFamily , GaugeMetricFamily , Histogram ,
@@ -28,7 +28,7 @@ def assert_not_observable(fn, *args, **kwargs):
2828 assert False , "Did not raise a 'missing label values' exception"
2929
3030
31- class TestCounter (unittest . TestCase ):
31+ class TestCounter (aiounittest . AsyncTestCase ):
3232 def setUp (self ):
3333 self .registry = CollectorRegistry ()
3434 self .counter = Counter ('c_total' , 'help' , registry = self .registry )
@@ -56,30 +56,42 @@ def f(r):
5656
5757 self .assertEqual ((["r" ], None , None , None ), getargspec (f ))
5858
59- try :
59+ with self . assertRaises ( TypeError ) :
6060 f (False )
61- except TypeError :
62- pass
6361 self .assertEqual (0 , self .registry .get_sample_value ('c_total' ))
6462
65- try :
63+ with self . assertRaises ( ValueError ) :
6664 f (True )
67- except ValueError :
68- pass
65+ self .assertEqual (1 , self .registry .get_sample_value ('c_total' ))
66+
67+ async def test_async_function_decorator (self ):
68+ @self .counter .count_exceptions (ValueError )
69+ async def f (r ):
70+ if r :
71+ raise ValueError
72+ else :
73+ raise TypeError
74+
75+ self .assertEqual ((["r" ], None , None , None ), getargspec (f ))
76+
77+ with self .assertRaises (TypeError ):
78+ await f (False )
79+
80+ self .assertEqual (0 , self .registry .get_sample_value ('c_total' ))
81+
82+ with self .assertRaises (ValueError ):
83+ await f (True )
84+
6985 self .assertEqual (1 , self .registry .get_sample_value ('c_total' ))
7086
7187 def test_block_decorator (self ):
7288 with self .counter .count_exceptions ():
7389 pass
7490 self .assertEqual (0 , self .registry .get_sample_value ('c_total' ))
7591
76- raised = False
77- try :
92+ with self .assertRaises (ValueError ):
7893 with self .counter .count_exceptions ():
7994 raise ValueError
80- except :
81- raised = True
82- self .assertTrue (raised )
8395 self .assertEqual (1 , self .registry .get_sample_value ('c_total' ))
8496
8597 def test_count_exceptions_not_observable (self ):
@@ -115,7 +127,7 @@ def test_exemplar_too_long(self):
115127 })
116128
117129
118- class TestGauge (unittest . TestCase ):
130+ class TestGauge (aiounittest . AsyncTestCase ):
119131 def setUp (self ):
120132 self .registry = CollectorRegistry ()
121133 self .gauge = Gauge ('g' , 'help' , registry = self .registry )
@@ -160,6 +172,18 @@ def f():
160172 f ()
161173 self .assertEqual (0 , self .registry .get_sample_value ('g' ))
162174
175+ async def test_inprogress_async_function_decorator (self ):
176+ self .assertEqual (0 , self .registry .get_sample_value ('g' ))
177+
178+ @self .gauge .track_inprogress ()
179+ async def f ():
180+ self .assertEqual (1 , self .registry .get_sample_value ('g' ))
181+
182+ self .assertEqual (([], None , None , None ), getargspec (f ))
183+
184+ await f ()
185+ self .assertEqual (0 , self .registry .get_sample_value ('g' ))
186+
163187 def test_inprogress_block_decorator (self ):
164188 self .assertEqual (0 , self .registry .get_sample_value ('g' ))
165189 with self .gauge .track_inprogress ():
@@ -185,12 +209,24 @@ def test_time_function_decorator(self):
185209
186210 @self .gauge .time ()
187211 def f ():
188- time .sleep (.001 )
212+ time .sleep (.05 )
189213
190214 self .assertEqual (([], None , None , None ), getargspec (f ))
191215
192216 f ()
193- self .assertNotEqual (0 , self .registry .get_sample_value ('g' ))
217+ self .assertTrue (0.05 <= self .registry .get_sample_value ('g' ) <= 0.1 )
218+
219+ async def test_time_async_function_decorator (self ):
220+ self .assertEqual (0 , self .registry .get_sample_value ('g' ))
221+
222+ @self .gauge .time ()
223+ async def f ():
224+ await asyncio .sleep (.05 )
225+
226+ self .assertEqual (([], None , None , None ), getargspec (f ))
227+
228+ await f ()
229+ self .assertTrue (0.05 <= self .registry .get_sample_value ('g' ) <= 0.1 )
194230
195231 def test_function_decorator_multithread (self ):
196232 self .assertEqual (0 , self .registry .get_sample_value ('g' ))
@@ -239,7 +275,7 @@ def manager():
239275 assert_not_observable (manager )
240276
241277
242- class TestSummary (unittest . TestCase ):
278+ class TestSummary (aiounittest . AsyncTestCase ):
243279 def setUp (self ):
244280 self .registry = CollectorRegistry ()
245281 self .summary = Summary ('s' , 'help' , registry = self .registry )
@@ -264,12 +300,26 @@ def test_function_decorator(self):
264300
265301 @self .summary .time ()
266302 def f ():
267- pass
303+ time . sleep ( .05 )
268304
269305 self .assertEqual (([], None , None , None ), getargspec (f ))
270306
271307 f ()
272308 self .assertEqual (1 , self .registry .get_sample_value ('s_count' ))
309+ self .assertTrue (.05 < self .registry .get_sample_value ('s_sum' ) < 0.1 )
310+
311+ async def test_async_function_decorator (self ):
312+ self .assertEqual (0 , self .registry .get_sample_value ('s_count' ))
313+
314+ @self .summary .time ()
315+ async def f ():
316+ await asyncio .sleep (.05 )
317+
318+ self .assertEqual (([], None , None , None ), getargspec (f ))
319+
320+ await f ()
321+ self .assertEqual (1 , self .registry .get_sample_value ('s_count' ))
322+ self .assertTrue (.05 < self .registry .get_sample_value ('s_sum' ) < 0.1 )
273323
274324 def test_function_decorator_multithread (self ):
275325 self .assertEqual (0 , self .registry .get_sample_value ('s_count' ))
@@ -343,7 +393,7 @@ def manager():
343393 assert_not_observable (manager )
344394
345395
346- class TestHistogram (unittest . TestCase ):
396+ class TestHistogram (aiounittest . AsyncTestCase ):
347397 def setUp (self ):
348398 self .registry = CollectorRegistry ()
349399 self .histogram = Histogram ('h' , 'help' , registry = self .registry )
@@ -417,13 +467,29 @@ def test_function_decorator(self):
417467
418468 @self .histogram .time ()
419469 def f ():
420- pass
470+ time . sleep ( .05 )
421471
422472 self .assertEqual (([], None , None , None ), getargspec (f ))
423473
424474 f ()
425475 self .assertEqual (1 , self .registry .get_sample_value ('h_count' ))
426476 self .assertEqual (1 , self .registry .get_sample_value ('h_bucket' , {'le' : '+Inf' }))
477+ self .assertTrue (.05 < self .registry .get_sample_value ('h_sum' ) < 0.1 )
478+
479+ async def test_async_function_decorator (self ):
480+ self .assertEqual (0 , self .registry .get_sample_value ('h_count' ))
481+ self .assertEqual (0 , self .registry .get_sample_value ('h_bucket' , {'le' : '+Inf' }))
482+
483+ @self .histogram .time ()
484+ async def f ():
485+ await asyncio .sleep (.05 )
486+
487+ self .assertEqual (([], None , None , None ), getargspec (f ))
488+
489+ await f ()
490+ self .assertEqual (1 , self .registry .get_sample_value ('h_count' ))
491+ self .assertEqual (1 , self .registry .get_sample_value ('h_bucket' , {'le' : '+Inf' }))
492+ self .assertTrue (.05 < self .registry .get_sample_value ('h_sum' ) < 0.1 )
427493
428494 def test_function_decorator_multithread (self ):
429495 self .assertEqual (0 , self .registry .get_sample_value ('h_count' ))
@@ -527,7 +593,7 @@ def test_labels(self):
527593 self .assertRaises (ValueError , self .labels .state , 'a' )
528594
529595 def test_overlapping_labels (self ):
530- with pytest . raises (ValueError ):
596+ with self . assertRaises (ValueError ):
531597 Enum ('e' , 'help' , registry = None , labelnames = ['e' ])
532598
533599
@@ -568,7 +634,7 @@ def test_incorrect_label_count_raises(self):
568634 self .assertRaises (ValueError , self .counter .remove , 'a' , 'b' )
569635
570636 def test_labels_on_labels (self ):
571- with pytest . raises (ValueError ):
637+ with self . assertRaises (ValueError ):
572638 self .counter .labels ('a' ).labels ('b' )
573639
574640 def test_labels_coerced_to_string (self ):
0 commit comments