From eee9fc08583eee71eade2671c3df3d8e03d6a301 Mon Sep 17 00:00:00 2001 From: Dennis Gaebler Date: Mon, 24 Feb 2025 01:00:26 +0100 Subject: [PATCH 1/2] Fix order-dependent flaky tests related to UTF-8 support Signed-off-by: Dennis Gaebler --- tests/test_core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index f28c9abc..2855caf7 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -513,9 +513,9 @@ def test_exemplar_invalid_legacy_label_name(self): enable_legacy_validation() self.assertRaises(ValueError, self.histogram.observe, 3.0, exemplar={':o)': 'smile'}) self.assertRaises(ValueError, self.histogram.observe, 3.0, exemplar={'1': 'number'}) + disable_legacy_validation() def test_exemplar_invalid_label_name(self): - disable_legacy_validation() self.histogram.observe(3.0, exemplar={':o)': 'smile'}) self.histogram.observe(3.0, exemplar={'1': 'number'}) @@ -669,9 +669,9 @@ def test_invalid_legacy_names_raise(self): self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['a:b']) self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['__reserved']) self.assertRaises(ValueError, Summary, 'c_total', '', labelnames=['quantile']) + disable_legacy_validation() def test_invalid_names_raise(self): - disable_legacy_validation() self.assertRaises(ValueError, Counter, '', 'help') self.assertRaises(ValueError, Counter, '', 'help', namespace='&') self.assertRaises(ValueError, Counter, '', 'help', subsystem='(') From 0d28ae21c77facedbcf1e95987ec104046c881dd Mon Sep 17 00:00:00 2001 From: Dennis Gaebler Date: Mon, 3 Mar 2025 16:42:16 +0100 Subject: [PATCH 2/2] Add context-manager for legacy validation Signed-off-by: Dennis Gaebler --- tests/test_core.py | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index 2855caf7..284bce09 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -109,10 +109,9 @@ def test_inc_not_observable(self): assert_not_observable(counter.inc) def test_exemplar_invalid_label_name(self): - enable_legacy_validation() - self.assertRaises(ValueError, self.counter.inc, exemplar={':o)': 'smile'}) - self.assertRaises(ValueError, self.counter.inc, exemplar={'1': 'number'}) - disable_legacy_validation() + with LegacyValidationContextManager(): + self.assertRaises(ValueError, self.counter.inc, exemplar={':o)': 'smile'}) + self.assertRaises(ValueError, self.counter.inc, exemplar={'1': 'number'}) self.counter.inc(exemplar={':o)': 'smile'}) self.counter.inc(exemplar={'1': 'number'}) @@ -510,11 +509,10 @@ def test_block_decorator_with_label(self): self.assertEqual(1, value('hl_bucket', {'le': '+Inf', 'l': 'a'})) def test_exemplar_invalid_legacy_label_name(self): - enable_legacy_validation() - self.assertRaises(ValueError, self.histogram.observe, 3.0, exemplar={':o)': 'smile'}) - self.assertRaises(ValueError, self.histogram.observe, 3.0, exemplar={'1': 'number'}) - disable_legacy_validation() - + with LegacyValidationContextManager(): + self.assertRaises(ValueError, self.histogram.observe, 3.0, exemplar={':o)': 'smile'}) + self.assertRaises(ValueError, self.histogram.observe, 3.0, exemplar={'1': 'number'}) + def test_exemplar_invalid_label_name(self): self.histogram.observe(3.0, exemplar={':o)': 'smile'}) self.histogram.observe(3.0, exemplar={'1': 'number'}) @@ -660,16 +658,15 @@ def test_labels_by_kwarg(self): self.assertRaises(ValueError, self.two_labels.labels, {'a': 'x'}, b='y') def test_invalid_legacy_names_raise(self): - enable_legacy_validation() - self.assertRaises(ValueError, Counter, '', 'help') - self.assertRaises(ValueError, Counter, '^', 'help') - self.assertRaises(ValueError, Counter, '', 'help', namespace='&') - self.assertRaises(ValueError, Counter, '', 'help', subsystem='(') - self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['^']) - self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['a:b']) - self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['__reserved']) - self.assertRaises(ValueError, Summary, 'c_total', '', labelnames=['quantile']) - disable_legacy_validation() + with LegacyValidationContextManager(): + self.assertRaises(ValueError, Counter, '', 'help') + self.assertRaises(ValueError, Counter, '^', 'help') + self.assertRaises(ValueError, Counter, '', 'help', namespace='&') + self.assertRaises(ValueError, Counter, '', 'help', subsystem='(') + self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['^']) + self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['a:b']) + self.assertRaises(ValueError, Counter, 'c_total', '', labelnames=['__reserved']) + self.assertRaises(ValueError, Summary, 'c_total', '', labelnames=['quantile']) def test_invalid_names_raise(self): self.assertRaises(ValueError, Counter, '', 'help') @@ -1007,5 +1004,13 @@ def test_restricted_registry_does_not_yield_while_locked(self): self.assertFalse(registry._lock.locked()) +class LegacyValidationContextManager: + def __enter__(self): + enable_legacy_validation() + + def __exit__(self, exc_type, exc_value, exc_tb): + disable_legacy_validation() + + if __name__ == '__main__': unittest.main()