Files
mqtt-broker-stack/backend/tests/test_configgen.py
T
2026-09-16 06:08:37 +02:00

77 lines
2.3 KiB
Python

"""Config generator unit tests (spec section 64: configuration generation)."""
from __future__ import annotations
import pytest
from app.configgen import generate_config
from app.models import BrokerSettings, ListenerConfig
@pytest.fixture()
def session(db_session):
yield db_session
def test_generate_with_one_listener(session):
session.add(
ListenerConfig(
name="Production MQTT",
port=1883,
protocol="mqtt",
allow_anonymous=False,
max_connections=-1,
tls_enabled=False,
require_certificate=False,
use_identity_as_username=False,
)
)
session.commit()
result = generate_config(session)
assert "listener 1883" in result.config_text
assert "per_listener_settings false" in result.config_text
assert "global_plugin /usr/lib/mosquitto_dynamic_security.so" in result.config_text
assert "allow_anonymous false" in result.config_text
assert result.warnings == []
def test_generate_includes_global_settings(session):
session.add(ListenerConfig(name="l", port=1883, protocol="mqtt"))
session.add(BrokerSettings(key="max_packet_size", value="2000000", value_type="int"))
session.commit()
result = generate_config(session)
assert "max_packet_size 2000000" in result.config_text
def test_generate_refuses_without_listeners(session):
with pytest.raises(ValueError, match="no enabled listeners"):
generate_config(session)
def test_disabled_listeners_are_omitted(session):
session.add(ListenerConfig(name="off", port=1884, protocol="mqtt", enabled=False))
session.add(ListenerConfig(name="on", port=1883, protocol="mqtt"))
session.commit()
result = generate_config(session)
assert "listener 1883" in result.config_text
assert "listener 1884" not in result.config_text
def test_tls_listener_without_pki_warns(session):
session.add(
ListenerConfig(
name="tls-later",
port=8883,
protocol="mqtt",
tls_enabled=True,
tls_min_version="tlsv1.2",
)
)
session.commit()
result = generate_config(session)
assert any("PKI is not available" in w for w in result.warnings)
assert "tls_version tlsv1.2" in result.config_text