@@ -174,6 +174,15 @@ def test_create_metric(self):
174
174
self .assertEqual (counter .name , "name" )
175
175
self .assertIs (counter .meter .resource , resource )
176
176
177
+ def test_create_updowncounter (self ):
178
+ meter = metrics .MeterProvider ().get_meter (__name__ )
179
+ updowncounter = meter .create_metric (
180
+ "name" , "desc" , "unit" , float , metrics .UpDownCounter , ()
181
+ )
182
+ self .assertIsInstance (updowncounter , metrics .UpDownCounter )
183
+ self .assertEqual (updowncounter .value_type , float )
184
+ self .assertEqual (updowncounter .name , "name" )
185
+
177
186
def test_create_valuerecorder (self ):
178
187
meter = metrics .MeterProvider ().get_meter (__name__ )
179
188
valuerecorder = meter .create_metric (
@@ -296,6 +305,53 @@ def test_add(self):
296
305
metric .add (2 , labels )
297
306
self .assertEqual (bound_counter .aggregator .current , 5 )
298
307
308
+ @mock .patch ("opentelemetry.sdk.metrics.logger" )
309
+ def test_add_non_decreasing_int_error (self , logger_mock ):
310
+ meter = metrics .MeterProvider ().get_meter (__name__ )
311
+ metric = metrics .Counter ("name" , "desc" , "unit" , int , meter , ("key" ,))
312
+ labels = {"key" : "value" }
313
+ bound_counter = metric .bind (labels )
314
+ metric .add (3 , labels )
315
+ metric .add (0 , labels )
316
+ metric .add (- 1 , labels )
317
+ self .assertEqual (bound_counter .aggregator .current , 3 )
318
+ self .assertEqual (logger_mock .warning .call_count , 1 )
319
+
320
+ @mock .patch ("opentelemetry.sdk.metrics.logger" )
321
+ def test_add_non_decreasing_float_error (self , logger_mock ):
322
+ meter = metrics .MeterProvider ().get_meter (__name__ )
323
+ metric = metrics .Counter (
324
+ "name" , "desc" , "unit" , float , meter , ("key" ,)
325
+ )
326
+ labels = {"key" : "value" }
327
+ bound_counter = metric .bind (labels )
328
+ metric .add (3.3 , labels )
329
+ metric .add (0.0 , labels )
330
+ metric .add (0.1 , labels )
331
+ metric .add (- 0.1 , labels )
332
+ self .assertEqual (bound_counter .aggregator .current , 3.4 )
333
+ self .assertEqual (logger_mock .warning .call_count , 1 )
334
+
335
+
336
+ class TestUpDownCounter (unittest .TestCase ):
337
+ @mock .patch ("opentelemetry.sdk.metrics.logger" )
338
+ def test_add (self , logger_mock ):
339
+ meter = metrics .MeterProvider ().get_meter (__name__ )
340
+ metric = metrics .UpDownCounter (
341
+ "name" , "desc" , "unit" , int , meter , ("key" ,)
342
+ )
343
+ labels = {"key" : "value" }
344
+ bound_counter = metric .bind (labels )
345
+ metric .add (3 , labels )
346
+ metric .add (2 , labels )
347
+ self .assertEqual (bound_counter .aggregator .current , 5 )
348
+
349
+ metric .add (0 , labels )
350
+ metric .add (- 3 , labels )
351
+ metric .add (- 1 , labels )
352
+ self .assertEqual (bound_counter .aggregator .current , 1 )
353
+ self .assertEqual (logger_mock .warning .call_count , 0 )
354
+
299
355
300
356
class TestValueRecorder (unittest .TestCase ):
301
357
def test_record (self ):
0 commit comments