Skip to content

Commit e992f8b

Browse files
authored
Add assert_metric_no_diff (#386)
1 parent 198c028 commit e992f8b

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

django_prometheus/tests/test_testutils.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from django_prometheus.testutils import (
88
PrometheusTestCaseMixin,
9+
assert_metric_no_diff,
910
assert_metric_not_equal,
1011
get_metric,
1112
get_metric_from_frozen_registry,
@@ -105,9 +106,7 @@ def test_registry_saving(self):
105106
assert 42 == get_metric_from_frozen_registry("some_gauge", frozen_registry)
106107
self.test_case.assertMetricDiff(frozen_registry, 99 - 42, "some_gauge", registry=self.registry)
107108
assert self.test_case.passes is True
108-
self.test_case.assertMetricDiff(frozen_registry, 1, "some_gauge", registry=self.registry)
109-
assert self.test_case.passes is False
110-
self.test_case.passes = True
109+
assert_metric_no_diff(frozen_registry, 1, "some_gauge", registry=self.registry)
111110

112111
# Now test the same thing with a labelled metric.
113112
assert 1 == get_metric_from_frozen_registry(
@@ -126,12 +125,11 @@ def test_registry_saving(self):
126125
labelblue="indigo",
127126
)
128127
assert self.test_case.passes is True
129-
self.test_case.assertMetricDiff(
128+
assert_metric_no_diff(
130129
frozen_registry,
131130
1,
132131
"some_labelled_gauge",
133132
registry=self.registry,
134133
labelred="pink",
135134
labelblue="indigo",
136135
)
137-
assert self.test_case.passes is False

django_prometheus/testutils.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,32 @@ def assertMetricDiff(self, frozen_registry, expected_diff, metric_name, registry
7070
self.assertEqual(expected_diff, diff, assert_err)
7171

7272

73+
def assert_metric_no_diff(frozen_registry, expected_diff, metric_name, registry=REGISTRY, **labels):
74+
"""Asserts that metric_name{**labels} isn't changed by expected_diff between
75+
the frozen registry and now. A frozen registry can be obtained
76+
by calling save_registry, typically at the beginning of a test
77+
case.
78+
"""
79+
saved_value = get_metric_from_frozen_registry(metric_name, frozen_registry, **labels)
80+
current_value = get_metric(metric_name, registry=registry, **labels)
81+
assert current_value is not None, METRIC_DIFF_ERR_NONE_EXPLANATION % (
82+
metric_name,
83+
format_labels(labels),
84+
saved_value,
85+
current_value,
86+
)
87+
diff = current_value - (saved_value or 0.0)
88+
assert_err = METRIC_DIFF_ERR_EXPLANATION % (
89+
metric_name,
90+
format_labels(labels),
91+
diff,
92+
expected_diff,
93+
saved_value,
94+
current_value,
95+
)
96+
assert expected_diff != diff, assert_err
97+
98+
7399
def assert_metric_not_equal(expected_value, metric_name, registry=REGISTRY, **labels):
74100
"""Asserts that metric_name{**labels} == expected_value."""
75101
value = get_metric(metric_name, registry=registry, **labels)

0 commit comments

Comments
 (0)