mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-13 07:29:39 +00:00
96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
# This file is part of the Indico plugins.
|
|
# Copyright (C) 2002 - 2024 CERN
|
|
#
|
|
# The Indico plugins are free software; you can redistribute
|
|
# them and/or modify them under the terms of the MIT License;
|
|
# see the LICENSE file for more details.
|
|
|
|
import pytest
|
|
from prometheus_client.parser import text_string_to_metric_families
|
|
|
|
from indico.core.plugins import plugin_engine
|
|
|
|
|
|
@pytest.fixture
|
|
def get_metrics(make_test_client):
|
|
def _get_metrics(token=None, expect_status_code=200):
|
|
client = make_test_client()
|
|
resp = client.get('/metrics', headers=({'Authorization': f'Bearer {token}'} if token else {}))
|
|
assert resp.status_code == expect_status_code
|
|
|
|
if resp.status_code == 200:
|
|
return {
|
|
metric.name: metric.samples[0].value
|
|
for metric in text_string_to_metric_families(resp.data.decode('utf-8'))
|
|
}, resp.headers
|
|
else:
|
|
return None
|
|
return _get_metrics
|
|
|
|
|
|
@pytest.fixture
|
|
def enable_plugin():
|
|
plugin_engine.get_plugin('prometheus').settings.set('enabled', True)
|
|
|
|
|
|
@pytest.mark.usefixtures('db')
|
|
def test_endpoint_disabled_by_default(get_metrics):
|
|
get_metrics(expect_status_code=503)
|
|
|
|
|
|
@pytest.mark.usefixtures('db', 'enable_plugin')
|
|
def test_endpoint_works(get_metrics):
|
|
get_metrics()
|
|
|
|
|
|
@pytest.mark.usefixtures('db', 'enable_plugin')
|
|
def test_endpoint_empty(get_metrics):
|
|
|
|
metrics = get_metrics()[0]
|
|
|
|
assert metrics['indico_num_users'] == 1.0
|
|
assert metrics['indico_num_active_users'] == 0.0
|
|
assert metrics['indico_num_events'] == 0.0
|
|
assert metrics['indico_num_categories'] == 1.0
|
|
assert metrics['indico_num_attachment_files'] == 0.0
|
|
assert metrics['indico_num_active_attachment_files'] == 0.0
|
|
|
|
|
|
@pytest.mark.usefixtures('db', 'enable_plugin')
|
|
def test_endpoint_cached(get_metrics, create_event):
|
|
metrics, headers = get_metrics()
|
|
assert metrics['indico_num_events'] == 0.0
|
|
assert headers['X-Cached'] == 'no'
|
|
|
|
# create an event
|
|
create_event(title='Test event #1')
|
|
|
|
metrics, headers = get_metrics()
|
|
|
|
# cached information should show zero events
|
|
assert metrics['indico_num_events'] == 0.0
|
|
assert headers['X-Cached'] == 'yes'
|
|
|
|
|
|
@pytest.mark.usefixtures('db', 'enable_plugin')
|
|
def test_endpoint_returning_data(get_metrics, create_event):
|
|
# create an event
|
|
create_event(title='Test event #1')
|
|
|
|
metrics = get_metrics()[0]
|
|
assert metrics['indico_num_users'] == 2.0
|
|
assert metrics['indico_num_active_users'] == 0.0
|
|
assert metrics['indico_num_events'] == 1.0
|
|
assert metrics['indico_num_categories'] == 2.0
|
|
assert metrics['indico_num_attachment_files'] == 0.0
|
|
assert metrics['indico_num_active_attachment_files'] == 0.0
|
|
|
|
|
|
@pytest.mark.usefixtures('db', 'enable_plugin')
|
|
def test_endpoint_authentication(get_metrics):
|
|
plugin_engine.get_plugin('prometheus').settings.set('token', 'schnitzel_with_naughty_rice')
|
|
get_metrics(expect_status_code=401)
|
|
|
|
get_metrics(token='schnitzel_with_naughty_rice')
|
|
get_metrics(token='spiritual_codfish', expect_status_code=401)
|