78 lines
2.3 KiB
Python
78 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 "global_plugin /usr/lib/mosquitto_dynamic_security.so" in result.config_text
|
|
assert "allow_anonymous false" in result.config_text
|
|
# Must NOT use options deprecated in 2.1 (spec 3.1).
|
|
assert "per_listener_settings" not 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 |