diff options
| author | Denys Fedoryshchenko <denys.f@collabora.com> | 2026-05-14 11:42:17 +0300 |
|---|---|---|
| committer | Denys Fedoryshchenko <denys.f@collabora.com> | 2026-05-14 11:42:17 +0300 |
| commit | 73f1da37630c1799d32f881ebafdfe353ecffdd6 (patch) | |
| tree | a5631b0cd20b69db8f1976ec8e61be484b6d3fc3 /tests | |
| parent | 391edc5c59b4c66ef97ef435a64eff4f68c32e63 (diff) | |
| download | accel-ppp-73f1da37630c1799d32f881ebafdfe353ecffdd6.tar.gz accel-ppp-73f1da37630c1799d32f881ebafdfe353ecffdd6.zip | |
tests: Add metrics module coverage
Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/accel-pppd/general/test_metrics.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/accel-pppd/general/test_metrics.py b/tests/accel-pppd/general/test_metrics.py new file mode 100644 index 00000000..6344d3d0 --- /dev/null +++ b/tests/accel-pppd/general/test_metrics.py @@ -0,0 +1,91 @@ +import http.client +import json + +import pytest + + +PROM_PORT = 9099 + + +def _config(fmt): + return f""" + [modules] + metrics + + [core] + log-error=/dev/stderr + + [log] + log-emerg=/dev/stderr + level=1 + + [cli] + tcp=127.0.0.1:2001 + + [metrics] + address=127.0.0.1:{PROM_PORT} + format={fmt} + """ + + +def _request(path, method="GET"): + conn = http.client.HTTPConnection("127.0.0.1", PROM_PORT, timeout=5) + try: + conn.request(method, path) + resp = conn.getresponse() + body = resp.read().decode("utf-8", "replace") + headers = {k.lower(): v for k, v in resp.getheaders()} + return resp.status, headers, body + finally: + conn.close() + + +class TestPrometheus: + @pytest.fixture() + def accel_pppd_config(self): + return _config("prometheus") + + def test_metrics_prometheus(self, accel_pppd_instance): + assert accel_pppd_instance + + status, headers, body = _request("/metrics") + + assert status == 200 + assert "text/plain" in headers.get("content-type", "") + assert "accel_ppp_build_info{version=" in body + assert "# TYPE accel_ppp_uptime_seconds gauge" in body + assert 'accel_ppp_sessions{state="active"}' in body + + def test_metrics_404_unknown_path(self, accel_pppd_instance): + assert accel_pppd_instance + + status, _, _ = _request("/nope") + + assert status == 404 + + def test_metrics_405_non_get(self, accel_pppd_instance): + assert accel_pppd_instance + + status, _, _ = _request("/metrics", method="POST") + + assert status == 405 + + +class TestJson: + @pytest.fixture() + def accel_pppd_config(self): + return _config("json") + + def test_metrics_json(self, accel_pppd_instance): + assert accel_pppd_instance + + status, headers, body = _request("/metrics") + + assert status == 200 + assert headers.get("content-type") == "application/json" + + doc = json.loads(body) + assert "build" in doc and "version" in doc["build"] + assert "uptime_seconds" in doc + assert "active" in doc["sessions"] + assert "threads" in doc["core"] |
