@@ -382,6 +382,64 @@ def test_bad_constructors(self):
382382 self .assertRaises (ValueError , HistogramMetricFamily , 'h' , 'help' , buckets = {}, sum_value = 1 , labels = ['a' ])
383383 self .assertRaises (KeyError , HistogramMetricFamily , 'h' , 'help' , buckets = {}, sum_value = 1 )
384384
385+ class TestCollectorRegistry (unittest .TestCase ):
386+ def test_duplicate_metrics_raises (self ):
387+ registry = CollectorRegistry ()
388+ Counter ('c' , 'help' , registry = registry )
389+ self .assertRaises (ValueError , Counter , 'c' , 'help' , registry = registry )
390+ self .assertRaises (ValueError , Gauge , 'c' , 'help' , registry = registry )
391+
392+ Gauge ('g' , 'help' , registry = registry )
393+ self .assertRaises (ValueError , Gauge , 'g' , 'help' , registry = registry )
394+ self .assertRaises (ValueError , Counter , 'g' , 'help' , registry = registry )
395+
396+ Summary ('s' , 'help' , registry = registry )
397+ self .assertRaises (ValueError , Summary , 's' , 'help' , registry = registry )
398+ # We don't currently expose quantiles, but let's prevent future
399+ # clashes anyway.
400+ self .assertRaises (ValueError , Gauge , 's' , 'help' , registry = registry )
401+
402+ Histogram ('h' , 'help' , registry = registry )
403+ self .assertRaises (ValueError , Histogram , 'h' , 'help' , registry = registry )
404+ # Clashes aggaint various suffixes.
405+ self .assertRaises (ValueError , Summary , 'h' , 'help' , registry = registry )
406+ self .assertRaises (ValueError , Counter , 'h_count' , 'help' , registry = registry )
407+ self .assertRaises (ValueError , Counter , 'h_sum' , 'help' , registry = registry )
408+ self .assertRaises (ValueError , Counter , 'h_bucket' , 'help' , registry = registry )
409+ # The name of the histogram itself isn't taken.
410+ Counter ('h' , 'help' , registry = registry )
411+
412+ def test_unregister_works (self ):
413+ registry = CollectorRegistry ()
414+ s = Summary ('s' , 'help' , registry = registry )
415+ self .assertRaises (ValueError , Counter , 's_count' , 'help' , registry = registry )
416+ registry .unregister (s )
417+ Counter ('s_count' , 'help' , registry = registry )
418+
419+ def custom_collector (self , metric_family , registry ):
420+ class CustomCollector (object ):
421+ def collect (self ):
422+ return [metric_family ]
423+ registry .register (CustomCollector ())
424+
425+ def test_autodescribe_disabled_by_default (self ):
426+ registry = CollectorRegistry ()
427+ self .custom_collector (CounterMetricFamily ('c' , 'help' , value = 1 ), registry )
428+ self .custom_collector (CounterMetricFamily ('c' , 'help' , value = 1 ), registry )
429+
430+ registry = CollectorRegistry (auto_describe = True )
431+ self .custom_collector (CounterMetricFamily ('c' , 'help' , value = 1 ), registry )
432+ self .assertRaises (ValueError , self .custom_collector , CounterMetricFamily ('c' , 'help' , value = 1 ), registry )
433+
434+ def test_restricted_registry (self ):
435+ registry = CollectorRegistry ()
436+ Counter ('c' , 'help' , registry = registry )
437+ Summary ('s' , 'help' , registry = registry ).observe (7 )
438+
439+ m = Metric ('s' , 'help' , 'summary' )
440+ m .samples = [('s_sum' , {}, 7 )]
441+ self .assertEquals ([m ], registry .restricted_registry (['s_sum' ]).collect ())
442+
385443
386444if __name__ == '__main__' :
387445 unittest .main ()
0 commit comments