85 lines
3.4 KiB
Python
85 lines
3.4 KiB
Python
"""The tests for the MQTT component embedded server."""
|
|
from unittest.mock import MagicMock, Mock
|
|
|
|
from asynctest import CoroutineMock, patch
|
|
|
|
import homeassistant.components.mqtt as mqtt
|
|
from homeassistant.const import CONF_PASSWORD
|
|
from homeassistant.setup import setup_component
|
|
|
|
from tests.common import get_test_home_assistant, mock_coro, mock_storage
|
|
|
|
|
|
class TestMQTT:
|
|
"""Test the MQTT component."""
|
|
|
|
def setup_method(self, method):
|
|
"""Set up things to be run when tests are started."""
|
|
self.hass = get_test_home_assistant()
|
|
self.mock_storage = mock_storage()
|
|
self.mock_storage.__enter__()
|
|
|
|
def teardown_method(self, method):
|
|
"""Stop everything that was started."""
|
|
self.hass.stop()
|
|
self.mock_storage.__exit__(None, None, None)
|
|
|
|
@patch("passlib.apps.custom_app_context", Mock(return_value=""))
|
|
@patch("tempfile.NamedTemporaryFile", Mock(return_value=MagicMock()))
|
|
@patch("hbmqtt.broker.Broker", Mock(return_value=MagicMock(start=CoroutineMock())))
|
|
@patch("hbmqtt.broker.Broker.start", Mock(return_value=mock_coro()))
|
|
@patch("homeassistant.components.mqtt.MQTT")
|
|
def test_creating_config_with_pass_and_no_http_pass(self, mock_mqtt):
|
|
"""Test if the MQTT server gets started with password.
|
|
|
|
Since 0.77, MQTT server has to set up its own password.
|
|
"""
|
|
mock_mqtt().async_connect.return_value = mock_coro(True)
|
|
self.hass.bus.listen_once = MagicMock()
|
|
password = "mqtt_secret"
|
|
|
|
assert setup_component(
|
|
self.hass, mqtt.DOMAIN, {mqtt.DOMAIN: {CONF_PASSWORD: password}}
|
|
)
|
|
self.hass.block_till_done()
|
|
assert mock_mqtt.called
|
|
assert mock_mqtt.mock_calls[1][2]["username"] == "homeassistant"
|
|
assert mock_mqtt.mock_calls[1][2]["password"] == password
|
|
|
|
@patch("passlib.apps.custom_app_context", Mock(return_value=""))
|
|
@patch("tempfile.NamedTemporaryFile", Mock(return_value=MagicMock()))
|
|
@patch("hbmqtt.broker.Broker", Mock(return_value=MagicMock(start=CoroutineMock())))
|
|
@patch("hbmqtt.broker.Broker.start", Mock(return_value=mock_coro()))
|
|
@patch("homeassistant.components.mqtt.MQTT")
|
|
def test_creating_config_with_pass_and_http_pass(self, mock_mqtt):
|
|
"""Test if the MQTT server gets started with password.
|
|
|
|
Since 0.77, MQTT server has to set up its own password.
|
|
"""
|
|
mock_mqtt().async_connect.return_value = mock_coro(True)
|
|
self.hass.bus.listen_once = MagicMock()
|
|
password = "mqtt_secret"
|
|
|
|
self.hass.config.api = MagicMock(api_password="api_password")
|
|
assert setup_component(
|
|
self.hass, mqtt.DOMAIN, {mqtt.DOMAIN: {CONF_PASSWORD: password}}
|
|
)
|
|
self.hass.block_till_done()
|
|
assert mock_mqtt.called
|
|
assert mock_mqtt.mock_calls[1][2]["username"] == "homeassistant"
|
|
assert mock_mqtt.mock_calls[1][2]["password"] == password
|
|
|
|
@patch("tempfile.NamedTemporaryFile", Mock(return_value=MagicMock()))
|
|
@patch("hbmqtt.broker.Broker.start", return_value=mock_coro())
|
|
def test_broker_config_fails(self, mock_run):
|
|
"""Test if the MQTT component fails if server fails."""
|
|
from hbmqtt.broker import BrokerException
|
|
|
|
mock_run.side_effect = BrokerException
|
|
|
|
self.hass.config.api = MagicMock(api_password=None)
|
|
|
|
assert not setup_component(
|
|
self.hass, mqtt.DOMAIN, {mqtt.DOMAIN: {mqtt.CONF_EMBEDDED: {}}}
|
|
)
|