Add MJR_AM_DELETE_RATE_LIMIT (default 20) and MJR_AM_ASSET_WRITE_RATE_LIMIT (default 30) env knobs, clamped to 1..10000 per 60 s window, and wire the single-asset delete route and the shared rating/tags request preparation to use them instead of hard-coded literals. Defaults are unchanged.
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""
|
|
Tests for the configurable write rate-limit knobs in mjr_am_backend.config.
|
|
|
|
Covers the I/O matrix for MJR_AM_DELETE_RATE_LIMIT and
|
|
MJR_AM_ASSET_WRITE_RATE_LIMIT (defaults, valid values, invalid values,
|
|
clamping).
|
|
"""
|
|
|
|
import importlib
|
|
import os
|
|
|
|
import pytest
|
|
|
|
_KNOB_VARS = ("MJR_AM_DELETE_RATE_LIMIT", "MJR_AM_ASSET_WRITE_RATE_LIMIT")
|
|
|
|
|
|
@pytest.fixture
|
|
def reloadable_config():
|
|
"""Yield the config module and restore env + module state afterwards."""
|
|
import mjr_am_backend.config as cfg
|
|
|
|
saved = {name: os.environ.get(name) for name in _KNOB_VARS}
|
|
yield cfg
|
|
for name, value in saved.items():
|
|
if value is None:
|
|
os.environ.pop(name, None)
|
|
else:
|
|
os.environ[name] = value
|
|
importlib.reload(cfg)
|
|
|
|
|
|
def _reloaded(cfg):
|
|
return importlib.reload(cfg)
|
|
|
|
|
|
def test_knobs_default_when_unset(reloadable_config, monkeypatch):
|
|
for name in _KNOB_VARS:
|
|
monkeypatch.delenv(name, raising=False)
|
|
cfg = _reloaded(reloadable_config)
|
|
assert cfg.DELETE_RATE_LIMIT_PER_MIN == 20
|
|
assert cfg.ASSET_WRITE_RATE_LIMIT_PER_MIN == 30
|
|
|
|
|
|
def test_knobs_accept_valid_values(reloadable_config, monkeypatch):
|
|
monkeypatch.setenv("MJR_AM_DELETE_RATE_LIMIT", "600")
|
|
monkeypatch.setenv("MJR_AM_ASSET_WRITE_RATE_LIMIT", "600")
|
|
cfg = _reloaded(reloadable_config)
|
|
assert cfg.DELETE_RATE_LIMIT_PER_MIN == 600
|
|
assert cfg.ASSET_WRITE_RATE_LIMIT_PER_MIN == 600
|
|
|
|
|
|
def test_delete_knob_falls_back_to_default_on_non_integer(reloadable_config, monkeypatch):
|
|
monkeypatch.setenv("MJR_AM_DELETE_RATE_LIMIT", "abc")
|
|
cfg = _reloaded(reloadable_config)
|
|
assert cfg.DELETE_RATE_LIMIT_PER_MIN == 20
|
|
|
|
|
|
def test_asset_write_knob_clamps_below_range(reloadable_config, monkeypatch):
|
|
monkeypatch.setenv("MJR_AM_ASSET_WRITE_RATE_LIMIT", "0")
|
|
cfg = _reloaded(reloadable_config)
|
|
assert cfg.ASSET_WRITE_RATE_LIMIT_PER_MIN == 1
|
|
|
|
|
|
def test_delete_knob_clamps_above_range(reloadable_config, monkeypatch):
|
|
monkeypatch.setenv("MJR_AM_DELETE_RATE_LIMIT", "999999")
|
|
cfg = _reloaded(reloadable_config)
|
|
assert cfg.DELETE_RATE_LIMIT_PER_MIN == 10000
|