File: test_testutils.py

package info (click to toggle)
django-prometheus 2.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 568 kB
  • sloc: python: 1,776; sh: 5; makefile: 3
file content (146 lines) | stat: -rw-r--r-- 4,934 bytes parent folder | download
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",
        )