Skip to content
Snippets Groups Projects
Commit 965bb503 authored by Erik Reid's avatar Erik Reid
Browse files

added a unit test for the brian query response processing

parent af131e6a
No related branches found
No related tags found
No related merge requests found
...@@ -19,6 +19,44 @@ logger = logging.getLogger(__name__) ...@@ -19,6 +19,44 @@ logger = logging.getLogger(__name__)
BRIAN_SCID_RATES_FILENAME = 'brian-scid-rates.json' BRIAN_SCID_RATES_FILENAME = 'brian-scid-rates.json'
CACHED_SCID_RATES_SCHEMA = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"definitions": {
"in-out-rates": {
"type": "object",
"properties": {
"ingress": {"type": ["number", "null"]},
"egress": {"type": ["number", "null"]},
},
"required": ["ingress", "egress"],
"additionalProperties": False,
},
"rate-stats": {
"type": "object",
"properties": {
"latest": {"$ref": "#/definitions/in-out-rates"},
"mean": {"$ref": "#/definitions/in-out-rates"},
"max": {"$ref": "#/definitions/in-out-rates"},
},
"required": ["latest", "mean", "max"],
"additionalProperties": False,
},
"service-rate": {
"type": "object",
"properties": {
"scid": {"type": "string"},
"values": {"$ref": "#/definitions/rate-stats"},
},
"required": ["scid", "values"],
"additionalProperties": False,
},
},
"type": "array",
"items": {"$ref": "#/definitions/service-rate"},
}
@contextlib.contextmanager @contextlib.contextmanager
def influx_client(influx_params: config.InfluxConnectionParams): def influx_client(influx_params: config.InfluxConnectionParams):
...@@ -90,7 +128,7 @@ def _load_scid_rates_rows(influx_params: config.InfluxConnectionParams, window: ...@@ -90,7 +128,7 @@ def _load_scid_rates_rows(influx_params: config.InfluxConnectionParams, window:
def load_scid_rates(influx_params: config.InfluxConnectionParams): def load_scid_rates(influx_params: config.InfluxConnectionParams):
rates = {} rates = []
for r in _load_scid_rates_rows(influx_params): for r in _load_scid_rates_rows(influx_params):
def _bitrate_or_none(field_name: str) -> float | None: def _bitrate_or_none(field_name: str) -> float | None:
...@@ -112,10 +150,13 @@ def load_scid_rates(influx_params: config.InfluxConnectionParams): ...@@ -112,10 +150,13 @@ def load_scid_rates(influx_params: config.InfluxConnectionParams):
'egress': _bitrate_or_none('max_egress') 'egress': _bitrate_or_none('max_egress')
}, },
} }
rates[r['scid']] = values rates.append({
'scid': r['scid'],
'values': values
})
cache.set(BRIAN_SCID_RATES_FILENAME, rates) cache.set(BRIAN_SCID_RATES_FILENAME, rates)
return rates return rates # <-- caller can also retrieve this from the cache
def worker_proc( def worker_proc(
......
This diff is collapsed.
import tempfile
from unittest.mock import patch, MagicMock
import jsonschema
from .common import load_test_data
from mapping_provider.backends import brian, cache
from mapping_provider.config import InfluxConnectionParams
def test_utilization():
with tempfile.TemporaryDirectory() as tmpdir:
cache.init(tmpdir)
with patch('mapping_provider.backends.brian.InfluxDBClient') as mocked_influx:
# with patch('influxdb.InfluxDBClient') as mocked_influx_client:
mocked_client_instance = MagicMock()
mocked_influx.return_value = mocked_client_instance
mocked_query = MagicMock()
mocked_query.return_value.raw = load_test_data('brian-scid-rates.json')
mocked_client_instance.query = mocked_query
brian.load_scid_rates(InfluxConnectionParams(
hostname='bogus hostname',
username='bogus username',
password='bogus password',
database='bogus database name',
measurement='bogus measurement'))
cached_scid_rates = cache.get(brian.BRIAN_SCID_RATES_FILENAME)
assert cached_scid_rates, "test data is not empty"
jsonschema.validate(cached_scid_rates, brian.CACHED_SCID_RATES_SCHEMA)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment