@@ -305,9 +305,37 @@ def test_add(self):
305305 metric .add (2 , labels )
306306 self .assertEqual (bound_counter .aggregator .current , 5 )
307307
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+
308335
309336class TestUpDownCounter (unittest .TestCase ):
310- def test_add (self ):
337+ @mock .patch ("opentelemetry.sdk.metrics.logger" )
338+ def test_add (self , logger_mock ):
311339 meter = metrics .MeterProvider ().get_meter (__name__ )
312340 metric = metrics .UpDownCounter (
313341 "name" , "desc" , "unit" , int , meter , ("key" ,)
@@ -322,6 +350,7 @@ def test_add(self):
322350 metric .add (- 3 , labels )
323351 metric .add (- 1 , labels )
324352 self .assertEqual (bound_counter .aggregator .current , 1 )
353+ self .assertEqual (logger_mock .warning .call_count , 0 )
325354
326355
327356class TestValueRecorder (unittest .TestCase ):
0 commit comments