ceph/monitoring/prometheus/tests/test_syntax.py
Paul Cuzner 4750ac0d77 mgr/prometheus: add test cases and validation using tox
Focus all tests inside a tests directory, and use pytest/tox to
perform validation of the overall content. tox tests also use
promtool if available to provide rule checks and unittest runs.

In addition to these checks a validate_rules script provides the
format, and content checks against all rules - which is also
called via tox (but can be run independently too)

Signed-off-by: Paul Cuzner <pcuzner@redhat.com>
2021-10-22 13:36:40 +13:00

43 lines
1.1 KiB
Python
Executable File

import pytest
import os
import yaml
from .utils import promtool_available, call
from .settings import ALERTS_FILE, UNIT_TESTS_FILE
def load_yaml(file_name):
yaml_data = None
with open(file_name, 'r') as alert_file:
raw = alert_file.read()
try:
yaml_data = yaml.safe_load(raw)
except yaml.YAMLError as e:
pass
return yaml_data
def test_alerts_present():
assert os.path.exists(ALERTS_FILE), f"{ALERTS_FILE} not found"
def test_unittests_present():
assert os.path.exists(UNIT_TESTS_FILE), f"{UNIT_TESTS_FILE} not found"
@pytest.mark.skipif(not os.path.exists(ALERTS_FILE), reason=f"{ALERTS_FILE} missing")
def test_rules_format():
assert load_yaml(ALERTS_FILE)
@pytest.mark.skipif(not os.path.exists(UNIT_TESTS_FILE), reason=f"{UNIT_TESTS_FILE} missing")
def test_unittests_format():
assert load_yaml(UNIT_TESTS_FILE)
@pytest.mark.skipif(not promtool_available(), reason="promtool is not installed. Unable to check syntax")
def test_rule_syntax():
completion = call(f"promtool check rules {ALERTS_FILE}")
assert completion.returncode == 0
assert b"SUCCESS" in completion.stdout