Replace the CLI-subprocess parametrization (6 hermes processes per run) with a direct normalizer invariant: non-finite cadence -> default cadence, non-finite temperatures -> None while finite values (0, 0.75) survive.
35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
"""Malformed numeric MoA settings must degrade to defaults, not break the CLI or JSON."""
|
|
|
|
import json
|
|
import math
|
|
|
|
import pytest
|
|
|
|
from hermes_cli.moa_config import normalize_moa_config
|
|
|
|
|
|
@pytest.mark.parametrize("fanout", [
|
|
{"mode": "every_n", "n": float("inf")},
|
|
{"mode": "every_n", "n": "-inf"},
|
|
"every_n:inf",
|
|
"every_n:nan",
|
|
])
|
|
def test_nonfinite_fanout_falls_back_to_default_cadence(fanout):
|
|
assert normalize_moa_config({"fanout": fanout})["fanout"] == normalize_moa_config({})["fanout"]
|
|
assert normalize_moa_config({"fanout": {"mode": "every_n", "n": "3.0"}})["fanout"] == "every_n:3"
|
|
|
|
|
|
@pytest.mark.parametrize("temperature", [float("nan"), float("inf"), "-inf", "NaN"])
|
|
def test_nonfinite_temperatures_do_not_escape_into_json(temperature):
|
|
normalized = normalize_moa_config({
|
|
"reference_temperature": temperature,
|
|
"aggregator_temperature": temperature,
|
|
})
|
|
assert normalized["reference_temperature"] is None
|
|
assert normalized["aggregator_temperature"] is None
|
|
json.dumps(normalized, allow_nan=False)
|
|
|
|
finite = normalize_moa_config({"reference_temperature": 0, "aggregator_temperature": "0.75"})
|
|
assert finite["reference_temperature"] == 0 and math.isfinite(finite["reference_temperature"])
|
|
assert finite["aggregator_temperature"] == 0.75
|