summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/accel-pppd/general/test_metrics.py91
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"]