All components from payload processing downwards are tested. Tests that depend on docker compose have been disabled by default because they take too long to use during development. Furthermore, the queue manager tests are not stable, a refactoring with inversion of control is urgently needed to make the components properly testable. The storage tests are stable and should be run once before releasing, this should be implemented via the CI script. Also adds, if present, tenant Id and operation kwargs to storage and queue response.
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
import re
|
|
import time
|
|
|
|
import pytest
|
|
import requests
|
|
|
|
from pyinfra.payload_processing.monitor import PrometheusMonitor
|
|
|
|
|
|
@pytest.fixture(scope="class")
|
|
def monitored_mock_function(metric_prefix, host, port):
|
|
def process(data=None):
|
|
time.sleep(2)
|
|
return ["result1", "result2", "result3"]
|
|
|
|
monitor = PrometheusMonitor(metric_prefix, host, port)
|
|
return monitor(process)
|
|
|
|
|
|
@pytest.fixture
|
|
def metric_endpoint(host, port):
|
|
return f"http://{host}:{port}/prometheus"
|
|
|
|
|
|
@pytest.mark.parametrize("metric_prefix, host, port", [("test", "0.0.0.0", 8000)], scope="class")
|
|
class TestPrometheusMonitor:
|
|
def test_prometheus_endpoint_is_available(self, metric_endpoint, monitored_mock_function):
|
|
resp = requests.get(metric_endpoint)
|
|
assert resp.status_code == 200
|
|
|
|
def test_processing_with_a_monitored_fn_increases_parameter_counter(
|
|
self,
|
|
metric_endpoint,
|
|
metric_prefix,
|
|
monitored_mock_function,
|
|
):
|
|
monitored_mock_function(data=None)
|
|
resp = requests.get(metric_endpoint)
|
|
pattern = re.compile(rf".*{metric_prefix}_processing_time_count (\d\.\d).*")
|
|
assert pattern.search(resp.text).group(1) == "1.0"
|
|
|
|
monitored_mock_function(data=None)
|
|
resp = requests.get(metric_endpoint)
|
|
assert pattern.search(resp.text).group(1) == "2.0"
|