1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
#!/usr/bin/env python
from operator import itemgetter
import prometheus_client
import pytest
from django_prometheus.testutils import (
assert_metric_diff,
assert_metric_equal,
assert_metric_no_diff,
assert_metric_not_equal,
get_metric,
get_metric_from_frozen_registry,
get_metrics_vector,
save_registry,
)
class TestPrometheusTestCaseMixin:
@pytest.fixture
def registry(self):
return prometheus_client.CollectorRegistry()
@pytest.fixture(autouse=True)
def some_gauge(self, registry):
some_gauge = prometheus_client.Gauge("some_gauge", "Some gauge.", registry=registry)
some_gauge.set(42)
return some_gauge
@pytest.fixture(autouse=True)
def some_labelled_gauge(self, registry):
some_labelled_gauge = prometheus_client.Gauge(
"some_labelled_gauge",
"Some labelled gauge.",
["labelred", "labelblue"],
registry=registry,
)
some_labelled_gauge.labels("pink", "indigo").set(1)
some_labelled_gauge.labels("pink", "royal").set(2)
some_labelled_gauge.labels("carmin", "indigo").set(3)
some_labelled_gauge.labels("carmin", "royal").set(4)
return some_labelled_gauge
def test_get_metric(self, registry):
"""Tests get_metric."""
assert get_metric("some_gauge", registry=registry) == 42
assert (
get_metric(
"some_labelled_gauge",
registry=registry,
labelred="pink",
labelblue="indigo",
)
== 1
)
def test_get_metrics_vector(self, registry):
"""Tests get_metrics_vector."""
vector = get_metrics_vector("some_nonexistent_gauge", registry=registry)
assert vector == []
vector = get_metrics_vector("some_gauge", registry=registry)
assert vector == [({}, 42)]
vector = get_metrics_vector("some_labelled_gauge", registry=registry)
assert sorted(
[
({"labelred": "pink", "labelblue": "indigo"}, 1),
({"labelred": "pink", "labelblue": "royal"}, 2),
({"labelred": "carmin", "labelblue": "indigo"}, 3),
({"labelred": "carmin", "labelblue": "royal"}, 4),
],
key=itemgetter(1),
) == sorted(vector, key=itemgetter(1))
def test_assert_metric_equal(self, registry):
"""Tests assert_metric_equal."""
# First we test that a scalar metric can be tested.
assert_metric_equal(42, "some_gauge", registry=registry)
assert_metric_not_equal(43, "some_gauge", registry=registry)
# Here we test that assert_metric_equal fails on nonexistent gauges.
assert_metric_not_equal(42, "some_nonexistent_gauge", registry=registry)
# Here we test that labelled metrics can be tested.
assert_metric_equal(
1,
"some_labelled_gauge",
registry=registry,
labelred="pink",
labelblue="indigo",
)
assert_metric_not_equal(
1,
"some_labelled_gauge",
registry=registry,
labelred="tomato",
labelblue="sky",
)
def test_registry_saving(self, registry, some_gauge, some_labelled_gauge):
"""Tests save_registry and frozen registries operations."""
frozen_registry = save_registry(registry=registry)
# Test that we can manipulate a frozen scalar metric.
assert get_metric_from_frozen_registry("some_gauge", frozen_registry) == 42
some_gauge.set(99)
assert get_metric_from_frozen_registry("some_gauge", frozen_registry) == 42
assert_metric_diff(frozen_registry, 99 - 42, "some_gauge", registry=registry)
assert_metric_no_diff(frozen_registry, 1, "some_gauge", registry=registry)
# Now test the same thing with a labelled metric.
assert (
get_metric_from_frozen_registry(
"some_labelled_gauge",
frozen_registry,
labelred="pink",
labelblue="indigo",
)
== 1
)
some_labelled_gauge.labels("pink", "indigo").set(5)
assert (
get_metric_from_frozen_registry(
"some_labelled_gauge",
frozen_registry,
labelred="pink",
labelblue="indigo",
)
== 1
)
assert_metric_diff(
frozen_registry,
5 - 1,
"some_labelled_gauge",
registry=registry,
labelred="pink",
labelblue="indigo",
)
assert_metric_no_diff(
frozen_registry,
1,
"some_labelled_gauge",
registry=registry,
labelred="pink",
labelblue="indigo",
)
|