Cleanup removed MQTT broker settings (#116633)

pull/116653/head
Jan Bouwhuis 2024-05-02 20:37:21 +02:00 committed by GitHub
parent ecc431e231
commit bedd5c1cef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 120 additions and 168 deletions

View File

@ -13,16 +13,7 @@ import voluptuous as vol
from homeassistant import config as conf_util from homeassistant import config as conf_util
from homeassistant.components import websocket_api from homeassistant.components import websocket_api
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import CONF_DISCOVERY, CONF_PAYLOAD, SERVICE_RELOAD
CONF_CLIENT_ID,
CONF_DISCOVERY,
CONF_PASSWORD,
CONF_PAYLOAD,
CONF_PORT,
CONF_PROTOCOL,
CONF_USERNAME,
SERVICE_RELOAD,
)
from homeassistant.core import HassJob, HomeAssistant, ServiceCall, callback from homeassistant.core import HassJob, HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import ( from homeassistant.exceptions import (
ConfigValidationError, ConfigValidationError,
@ -122,45 +113,6 @@ CONNECTION_SUCCESS = "connection_success"
CONNECTION_FAILED = "connection_failed" CONNECTION_FAILED = "connection_failed"
CONNECTION_FAILED_RECOVERABLE = "connection_failed_recoverable" CONNECTION_FAILED_RECOVERABLE = "connection_failed_recoverable"
CONFIG_ENTRY_CONFIG_KEYS = [
CONF_BIRTH_MESSAGE,
CONF_BROKER,
CONF_CERTIFICATE,
CONF_CLIENT_ID,
CONF_CLIENT_CERT,
CONF_CLIENT_KEY,
CONF_DISCOVERY,
CONF_DISCOVERY_PREFIX,
CONF_KEEPALIVE,
CONF_PASSWORD,
CONF_PORT,
CONF_PROTOCOL,
CONF_TLS_INSECURE,
CONF_TRANSPORT,
CONF_WS_PATH,
CONF_WS_HEADERS,
CONF_USERNAME,
CONF_WILL_MESSAGE,
]
REMOVED_OPTIONS = vol.All(
cv.removed(CONF_BIRTH_MESSAGE), # Removed in HA Core 2023.4
cv.removed(CONF_BROKER), # Removed in HA Core 2023.4
cv.removed(CONF_CERTIFICATE), # Removed in HA Core 2023.4
cv.removed(CONF_CLIENT_ID), # Removed in HA Core 2023.4
cv.removed(CONF_CLIENT_CERT), # Removed in HA Core 2023.4
cv.removed(CONF_CLIENT_KEY), # Removed in HA Core 2023.4
cv.removed(CONF_DISCOVERY), # Removed in HA Core 2022.3
cv.removed(CONF_DISCOVERY_PREFIX), # Removed in HA Core 2023.4
cv.removed(CONF_KEEPALIVE), # Removed in HA Core 2023.4
cv.removed(CONF_PASSWORD), # Removed in HA Core 2023.4
cv.removed(CONF_PORT), # Removed in HA Core 2023.4
cv.removed(CONF_PROTOCOL), # Removed in HA Core 2023.4
cv.removed(CONF_TLS_INSECURE), # Removed in HA Core 2023.4
cv.removed(CONF_USERNAME), # Removed in HA Core 2023.4
cv.removed(CONF_WILL_MESSAGE), # Removed in HA Core 2023.4
)
# We accept 2 schemes for configuring manual MQTT items # We accept 2 schemes for configuring manual MQTT items
# #
# Preferred style: # Preferred style:
@ -187,7 +139,6 @@ CONFIG_SCHEMA = vol.Schema(
DOMAIN: vol.All( DOMAIN: vol.All(
cv.ensure_list, cv.ensure_list,
cv.remove_falsy, cv.remove_falsy,
[REMOVED_OPTIONS],
[CONFIG_SCHEMA_BASE], [CONFIG_SCHEMA_BASE],
) )
}, },

View File

@ -15,6 +15,13 @@ from homeassistant import config_entries
from homeassistant.components import mqtt from homeassistant.components import mqtt
from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.hassio import HassioServiceInfo
from homeassistant.components.mqtt.config_flow import PWD_NOT_CHANGED from homeassistant.components.mqtt.config_flow import PWD_NOT_CHANGED
from homeassistant.const import (
CONF_CLIENT_ID,
CONF_PASSWORD,
CONF_PORT,
CONF_PROTOCOL,
CONF_USERNAME,
)
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
@ -230,8 +237,8 @@ async def test_user_v5_connection_works(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_PROTOCOL: "5", CONF_PROTOCOL: "5",
}, },
) )
assert result["type"] is FlowResultType.CREATE_ENTRY assert result["type"] is FlowResultType.CREATE_ENTRY
@ -468,7 +475,7 @@ async def test_option_flow(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
@ -482,9 +489,9 @@ async def test_option_flow(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "pass", CONF_PASSWORD: "pass",
}, },
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -516,9 +523,9 @@ async def test_option_flow(
assert result["data"] == {} assert result["data"] == {}
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "pass", CONF_PASSWORD: "pass",
mqtt.CONF_DISCOVERY: True, mqtt.CONF_DISCOVERY: True,
mqtt.CONF_DISCOVERY_PREFIX: "homeassistant", mqtt.CONF_DISCOVERY_PREFIX: "homeassistant",
mqtt.CONF_BIRTH_MESSAGE: { mqtt.CONF_BIRTH_MESSAGE: {
@ -565,7 +572,7 @@ async def test_bad_certificate(
file_id = mock_process_uploaded_file.file_id file_id = mock_process_uploaded_file.file_id
test_input = { test_input = {
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_CERTIFICATE: file_id[mqtt.CONF_CERTIFICATE], mqtt.CONF_CERTIFICATE: file_id[mqtt.CONF_CERTIFICATE],
mqtt.CONF_CLIENT_CERT: file_id[mqtt.CONF_CLIENT_CERT], mqtt.CONF_CLIENT_CERT: file_id[mqtt.CONF_CLIENT_CERT],
mqtt.CONF_CLIENT_KEY: file_id[mqtt.CONF_CLIENT_KEY], mqtt.CONF_CLIENT_KEY: file_id[mqtt.CONF_CLIENT_KEY],
@ -599,11 +606,11 @@ async def test_bad_certificate(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_CLIENT_ID: "custom1234", CONF_CLIENT_ID: "custom1234",
mqtt.CONF_KEEPALIVE: 60, mqtt.CONF_KEEPALIVE: 60,
mqtt.CONF_TLS_INSECURE: False, mqtt.CONF_TLS_INSECURE: False,
mqtt.CONF_PROTOCOL: "3.1.1", CONF_PROTOCOL: "3.1.1",
}, },
) )
await hass.async_block_till_done() await hass.async_block_till_done()
@ -618,13 +625,13 @@ async def test_bad_certificate(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_KEEPALIVE: 60, mqtt.CONF_KEEPALIVE: 60,
"set_client_cert": set_client_cert, "set_client_cert": set_client_cert,
"set_ca_cert": set_ca_cert, "set_ca_cert": set_ca_cert,
mqtt.CONF_TLS_INSECURE: tls_insecure, mqtt.CONF_TLS_INSECURE: tls_insecure,
mqtt.CONF_PROTOCOL: "3.1.1", CONF_PROTOCOL: "3.1.1",
mqtt.CONF_CLIENT_ID: "custom1234", CONF_CLIENT_ID: "custom1234",
}, },
) )
test_input["set_client_cert"] = set_client_cert test_input["set_client_cert"] = set_client_cert
@ -664,7 +671,7 @@ async def test_keepalive_validation(
test_input = { test_input = {
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_KEEPALIVE: input_value, mqtt.CONF_KEEPALIVE: input_value,
} }
@ -676,8 +683,8 @@ async def test_keepalive_validation(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_CLIENT_ID: "custom1234", CONF_CLIENT_ID: "custom1234",
}, },
) )
@ -715,7 +722,7 @@ async def test_disable_birth_will(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
await hass.async_block_till_done() await hass.async_block_till_done()
@ -731,9 +738,9 @@ async def test_disable_birth_will(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "pass", CONF_PASSWORD: "pass",
}, },
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -763,9 +770,9 @@ async def test_disable_birth_will(
assert result["data"] == {} assert result["data"] == {}
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "pass", CONF_PASSWORD: "pass",
mqtt.CONF_DISCOVERY: True, mqtt.CONF_DISCOVERY: True,
mqtt.CONF_DISCOVERY_PREFIX: "homeassistant", mqtt.CONF_DISCOVERY_PREFIX: "homeassistant",
mqtt.CONF_BIRTH_MESSAGE: {}, mqtt.CONF_BIRTH_MESSAGE: {},
@ -791,7 +798,7 @@ async def test_invalid_discovery_prefix(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_DISCOVERY: True, mqtt.CONF_DISCOVERY: True,
mqtt.CONF_DISCOVERY_PREFIX: "homeassistant", mqtt.CONF_DISCOVERY_PREFIX: "homeassistant",
}, },
@ -808,7 +815,7 @@ async def test_invalid_discovery_prefix(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
}, },
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -829,7 +836,7 @@ async def test_invalid_discovery_prefix(
assert result["errors"]["base"] == "bad_discovery_prefix" assert result["errors"]["base"] == "bad_discovery_prefix"
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_DISCOVERY: True, mqtt.CONF_DISCOVERY: True,
mqtt.CONF_DISCOVERY_PREFIX: "homeassistant", mqtt.CONF_DISCOVERY_PREFIX: "homeassistant",
} }
@ -873,9 +880,9 @@ async def test_option_flow_default_suggested_values(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "pass", CONF_PASSWORD: "pass",
mqtt.CONF_DISCOVERY: True, mqtt.CONF_DISCOVERY: True,
mqtt.CONF_BIRTH_MESSAGE: { mqtt.CONF_BIRTH_MESSAGE: {
mqtt.ATTR_TOPIC: "ha_state/online", mqtt.ATTR_TOPIC: "ha_state/online",
@ -898,11 +905,11 @@ async def test_option_flow_default_suggested_values(
assert result["step_id"] == "broker" assert result["step_id"] == "broker"
defaults = { defaults = {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
} }
suggested = { suggested = {
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: PWD_NOT_CHANGED, CONF_PASSWORD: PWD_NOT_CHANGED,
} }
for key, value in defaults.items(): for key, value in defaults.items():
assert get_default(result["data_schema"].schema, key) == value assert get_default(result["data_schema"].schema, key) == value
@ -913,9 +920,9 @@ async def test_option_flow_default_suggested_values(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "us3r", CONF_USERNAME: "us3r",
mqtt.CONF_PASSWORD: "p4ss", CONF_PASSWORD: "p4ss",
}, },
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -960,11 +967,11 @@ async def test_option_flow_default_suggested_values(
assert result["step_id"] == "broker" assert result["step_id"] == "broker"
defaults = { defaults = {
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
} }
suggested = { suggested = {
mqtt.CONF_USERNAME: "us3r", CONF_USERNAME: "us3r",
mqtt.CONF_PASSWORD: PWD_NOT_CHANGED, CONF_PASSWORD: PWD_NOT_CHANGED,
} }
for key, value in defaults.items(): for key, value in defaults.items():
assert get_default(result["data_schema"].schema, key) == value assert get_default(result["data_schema"].schema, key) == value
@ -973,7 +980,7 @@ async def test_option_flow_default_suggested_values(
result = await hass.config_entries.options.async_configure( result = await hass.config_entries.options.async_configure(
result["flow_id"], result["flow_id"],
user_input={mqtt.CONF_BROKER: "another-broker", mqtt.CONF_PORT: 2345}, user_input={mqtt.CONF_BROKER: "another-broker", CONF_PORT: 2345},
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
assert result["step_id"] == "options" assert result["step_id"] == "options"
@ -1030,7 +1037,7 @@ async def test_skipping_advanced_options(
test_input = { test_input = {
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
"advanced_options": advanced_options, "advanced_options": advanced_options,
} }
@ -1042,7 +1049,7 @@ async def test_skipping_advanced_options(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
@ -1067,24 +1074,24 @@ async def test_skipping_advanced_options(
( (
{ {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_USERNAME: "username", CONF_USERNAME: "username",
mqtt.CONF_PASSWORD: "verysecret", CONF_PASSWORD: "verysecret",
}, },
{ {
mqtt.CONF_USERNAME: "username", CONF_USERNAME: "username",
mqtt.CONF_PASSWORD: "newpassword", CONF_PASSWORD: "newpassword",
}, },
"newpassword", "newpassword",
), ),
( (
{ {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_USERNAME: "username", CONF_USERNAME: "username",
mqtt.CONF_PASSWORD: "verysecret", CONF_PASSWORD: "verysecret",
}, },
{ {
mqtt.CONF_USERNAME: "username", CONF_USERNAME: "username",
mqtt.CONF_PASSWORD: PWD_NOT_CHANGED, CONF_PASSWORD: PWD_NOT_CHANGED,
}, },
"verysecret", "verysecret",
), ),
@ -1153,7 +1160,7 @@ async def test_step_reauth(
assert result["reason"] == "reauth_successful" assert result["reason"] == "reauth_successful"
assert len(hass.config_entries.async_entries()) == 1 assert len(hass.config_entries.async_entries()) == 1
assert config_entry.data.get(mqtt.CONF_PASSWORD) == new_password assert config_entry.data.get(CONF_PASSWORD) == new_password
await hass.async_block_till_done() await hass.async_block_till_done()
@ -1167,7 +1174,7 @@ async def test_options_user_connection_fails(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
result = await hass.config_entries.options.async_init(config_entry.entry_id) result = await hass.config_entries.options.async_init(config_entry.entry_id)
@ -1176,7 +1183,7 @@ async def test_options_user_connection_fails(
mock_try_connection_time_out.reset_mock() mock_try_connection_time_out.reset_mock()
result = await hass.config_entries.options.async_configure( result = await hass.config_entries.options.async_configure(
result["flow_id"], result["flow_id"],
user_input={mqtt.CONF_BROKER: "bad-broker", mqtt.CONF_PORT: 2345}, user_input={mqtt.CONF_BROKER: "bad-broker", CONF_PORT: 2345},
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -1187,7 +1194,7 @@ async def test_options_user_connection_fails(
# Check config entry did not update # Check config entry did not update
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
} }
@ -1201,7 +1208,7 @@ async def test_options_bad_birth_message_fails(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
@ -1212,7 +1219,7 @@ async def test_options_bad_birth_message_fails(
result = await hass.config_entries.options.async_configure( result = await hass.config_entries.options.async_configure(
result["flow_id"], result["flow_id"],
user_input={mqtt.CONF_BROKER: "another-broker", mqtt.CONF_PORT: 2345}, user_input={mqtt.CONF_BROKER: "another-broker", CONF_PORT: 2345},
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -1228,7 +1235,7 @@ async def test_options_bad_birth_message_fails(
# Check config entry did not update # Check config entry did not update
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
} }
@ -1242,7 +1249,7 @@ async def test_options_bad_will_message_fails(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
@ -1253,7 +1260,7 @@ async def test_options_bad_will_message_fails(
result = await hass.config_entries.options.async_configure( result = await hass.config_entries.options.async_configure(
result["flow_id"], result["flow_id"],
user_input={mqtt.CONF_BROKER: "another-broker", mqtt.CONF_PORT: 2345}, user_input={mqtt.CONF_BROKER: "another-broker", CONF_PORT: 2345},
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
@ -1269,7 +1276,7 @@ async def test_options_bad_will_message_fails(
# Check config entry did not update # Check config entry did not update
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
} }
@ -1290,9 +1297,9 @@ async def test_try_connection_with_advanced_parameters(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "pass", CONF_PASSWORD: "pass",
mqtt.CONF_TRANSPORT: "websockets", mqtt.CONF_TRANSPORT: "websockets",
mqtt.CONF_CERTIFICATE: "auto", mqtt.CONF_CERTIFICATE: "auto",
mqtt.CONF_TLS_INSECURE: True, mqtt.CONF_TLS_INSECURE: True,
@ -1323,15 +1330,15 @@ async def test_try_connection_with_advanced_parameters(
assert result["step_id"] == "broker" assert result["step_id"] == "broker"
defaults = { defaults = {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
"set_client_cert": True, "set_client_cert": True,
"set_ca_cert": "auto", "set_ca_cert": "auto",
} }
suggested = { suggested = {
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: PWD_NOT_CHANGED, CONF_PASSWORD: PWD_NOT_CHANGED,
mqtt.CONF_TLS_INSECURE: True, mqtt.CONF_TLS_INSECURE: True,
mqtt.CONF_PROTOCOL: "3.1.1", CONF_PROTOCOL: "3.1.1",
mqtt.CONF_TRANSPORT: "websockets", mqtt.CONF_TRANSPORT: "websockets",
mqtt.CONF_WS_PATH: "/path/", mqtt.CONF_WS_PATH: "/path/",
mqtt.CONF_WS_HEADERS: '{"h1":"v1","h2":"v2"}', mqtt.CONF_WS_HEADERS: '{"h1":"v1","h2":"v2"}',
@ -1348,9 +1355,9 @@ async def test_try_connection_with_advanced_parameters(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "another-broker", mqtt.CONF_BROKER: "another-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "us3r", CONF_USERNAME: "us3r",
mqtt.CONF_PASSWORD: "p4ss", CONF_PASSWORD: "p4ss",
"set_ca_cert": "auto", "set_ca_cert": "auto",
"set_client_cert": True, "set_client_cert": True,
mqtt.CONF_TLS_INSECURE: True, mqtt.CONF_TLS_INSECURE: True,
@ -1409,7 +1416,7 @@ async def test_setup_with_advanced_settings(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
}, },
) )
@ -1427,21 +1434,21 @@ async def test_setup_with_advanced_settings(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "secret", CONF_PASSWORD: "secret",
"advanced_options": True, "advanced_options": True,
}, },
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
assert result["step_id"] == "broker" assert result["step_id"] == "broker"
assert "advanced_options" not in result["data_schema"].schema assert "advanced_options" not in result["data_schema"].schema
assert result["data_schema"].schema[mqtt.CONF_CLIENT_ID] assert result["data_schema"].schema[CONF_CLIENT_ID]
assert result["data_schema"].schema[mqtt.CONF_KEEPALIVE] assert result["data_schema"].schema[mqtt.CONF_KEEPALIVE]
assert result["data_schema"].schema["set_client_cert"] assert result["data_schema"].schema["set_client_cert"]
assert result["data_schema"].schema["set_ca_cert"] assert result["data_schema"].schema["set_ca_cert"]
assert result["data_schema"].schema[mqtt.CONF_TLS_INSECURE] assert result["data_schema"].schema[mqtt.CONF_TLS_INSECURE]
assert result["data_schema"].schema[mqtt.CONF_PROTOCOL] assert result["data_schema"].schema[CONF_PROTOCOL]
assert result["data_schema"].schema[mqtt.CONF_TRANSPORT] assert result["data_schema"].schema[mqtt.CONF_TRANSPORT]
assert mqtt.CONF_CLIENT_CERT not in result["data_schema"].schema assert mqtt.CONF_CLIENT_CERT not in result["data_schema"].schema
assert mqtt.CONF_CLIENT_KEY not in result["data_schema"].schema assert mqtt.CONF_CLIENT_KEY not in result["data_schema"].schema
@ -1451,26 +1458,26 @@ async def test_setup_with_advanced_settings(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "secret", CONF_PASSWORD: "secret",
mqtt.CONF_KEEPALIVE: 30, mqtt.CONF_KEEPALIVE: 30,
"set_ca_cert": "auto", "set_ca_cert": "auto",
"set_client_cert": True, "set_client_cert": True,
mqtt.CONF_TLS_INSECURE: True, mqtt.CONF_TLS_INSECURE: True,
mqtt.CONF_PROTOCOL: "3.1.1", CONF_PROTOCOL: "3.1.1",
mqtt.CONF_TRANSPORT: "websockets", mqtt.CONF_TRANSPORT: "websockets",
}, },
) )
assert result["type"] is FlowResultType.FORM assert result["type"] is FlowResultType.FORM
assert result["step_id"] == "broker" assert result["step_id"] == "broker"
assert "advanced_options" not in result["data_schema"].schema assert "advanced_options" not in result["data_schema"].schema
assert result["data_schema"].schema[mqtt.CONF_CLIENT_ID] assert result["data_schema"].schema[CONF_CLIENT_ID]
assert result["data_schema"].schema[mqtt.CONF_KEEPALIVE] assert result["data_schema"].schema[mqtt.CONF_KEEPALIVE]
assert result["data_schema"].schema["set_client_cert"] assert result["data_schema"].schema["set_client_cert"]
assert result["data_schema"].schema["set_ca_cert"] assert result["data_schema"].schema["set_ca_cert"]
assert result["data_schema"].schema[mqtt.CONF_TLS_INSECURE] assert result["data_schema"].schema[mqtt.CONF_TLS_INSECURE]
assert result["data_schema"].schema[mqtt.CONF_PROTOCOL] assert result["data_schema"].schema[CONF_PROTOCOL]
assert result["data_schema"].schema[mqtt.CONF_CLIENT_CERT] assert result["data_schema"].schema[mqtt.CONF_CLIENT_CERT]
assert result["data_schema"].schema[mqtt.CONF_CLIENT_KEY] assert result["data_schema"].schema[mqtt.CONF_CLIENT_KEY]
assert result["data_schema"].schema[mqtt.CONF_TRANSPORT] assert result["data_schema"].schema[mqtt.CONF_TRANSPORT]
@ -1482,9 +1489,9 @@ async def test_setup_with_advanced_settings(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "secret", CONF_PASSWORD: "secret",
mqtt.CONF_KEEPALIVE: 30, mqtt.CONF_KEEPALIVE: 30,
"set_ca_cert": "auto", "set_ca_cert": "auto",
"set_client_cert": True, "set_client_cert": True,
@ -1507,9 +1514,9 @@ async def test_setup_with_advanced_settings(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "secret", CONF_PASSWORD: "secret",
mqtt.CONF_KEEPALIVE: 30, mqtt.CONF_KEEPALIVE: 30,
"set_ca_cert": "auto", "set_ca_cert": "auto",
"set_client_cert": True, "set_client_cert": True,
@ -1537,9 +1544,9 @@ async def test_setup_with_advanced_settings(
# Check config entry result # Check config entry result
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 2345, CONF_PORT: 2345,
mqtt.CONF_USERNAME: "user", CONF_USERNAME: "user",
mqtt.CONF_PASSWORD: "secret", CONF_PASSWORD: "secret",
mqtt.CONF_KEEPALIVE: 30, mqtt.CONF_KEEPALIVE: 30,
mqtt.CONF_CLIENT_CERT: "## mock client certificate file ##", mqtt.CONF_CLIENT_CERT: "## mock client certificate file ##",
mqtt.CONF_CLIENT_KEY: "## mock key file ##", mqtt.CONF_CLIENT_KEY: "## mock key file ##",
@ -1569,7 +1576,7 @@ async def test_change_websockets_transport_to_tcp(
config_entry, config_entry,
data={ data={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_TRANSPORT: "websockets", mqtt.CONF_TRANSPORT: "websockets",
mqtt.CONF_WS_HEADERS: {"header_1": "custom_header1"}, mqtt.CONF_WS_HEADERS: {"header_1": "custom_header1"},
mqtt.CONF_WS_PATH: "/some_path", mqtt.CONF_WS_PATH: "/some_path",
@ -1590,7 +1597,7 @@ async def test_change_websockets_transport_to_tcp(
result["flow_id"], result["flow_id"],
user_input={ user_input={
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_TRANSPORT: "tcp", mqtt.CONF_TRANSPORT: "tcp",
mqtt.CONF_WS_HEADERS: '{"header_1": "custom_header1"}', mqtt.CONF_WS_HEADERS: '{"header_1": "custom_header1"}',
mqtt.CONF_WS_PATH: "/some_path", mqtt.CONF_WS_PATH: "/some_path",
@ -1611,7 +1618,7 @@ async def test_change_websockets_transport_to_tcp(
# Check config entry result # Check config entry result
assert config_entry.data == { assert config_entry.data == {
mqtt.CONF_BROKER: "test-broker", mqtt.CONF_BROKER: "test-broker",
mqtt.CONF_PORT: 1234, CONF_PORT: 1234,
mqtt.CONF_TRANSPORT: "tcp", mqtt.CONF_TRANSPORT: "tcp",
mqtt.CONF_DISCOVERY: True, mqtt.CONF_DISCOVERY: True,
mqtt.CONF_DISCOVERY_PREFIX: "homeassistant_test", mqtt.CONF_DISCOVERY_PREFIX: "homeassistant_test",

View File

@ -6,6 +6,7 @@ from unittest.mock import ANY
import pytest import pytest
from homeassistant.components import mqtt from homeassistant.components import mqtt
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
@ -143,8 +144,8 @@ async def test_entry_diagnostics(
{ {
mqtt.CONF_BROKER: "mock-broker", mqtt.CONF_BROKER: "mock-broker",
mqtt.CONF_BIRTH_MESSAGE: {}, mqtt.CONF_BIRTH_MESSAGE: {},
mqtt.CONF_PASSWORD: "hunter2", CONF_PASSWORD: "hunter2",
mqtt.CONF_USERNAME: "my_user", CONF_USERNAME: "my_user",
} }
], ],
) )

View File

@ -1338,22 +1338,6 @@ async def test_discovery_expansion_without_encoding_and_value_template_2(
ABBREVIATIONS_WHITE_LIST = [ ABBREVIATIONS_WHITE_LIST = [
# MQTT client/server/trigger settings # MQTT client/server/trigger settings
"CONF_BIRTH_MESSAGE",
"CONF_BROKER",
"CONF_CERTIFICATE",
"CONF_CLIENT_CERT",
"CONF_CLIENT_ID",
"CONF_CLIENT_KEY",
"CONF_DISCOVERY",
"CONF_DISCOVERY_ID",
"CONF_DISCOVERY_PREFIX",
"CONF_EMBEDDED",
"CONF_KEEPALIVE",
"CONF_TLS_INSECURE",
"CONF_TRANSPORT",
"CONF_WILL_MESSAGE",
"CONF_WS_PATH",
"CONF_WS_HEADERS",
# Integration info # Integration info
"CONF_SUPPORT_URL", "CONF_SUPPORT_URL",
# Undocumented device configuration # Undocumented device configuration
@ -1373,6 +1357,14 @@ ABBREVIATIONS_WHITE_LIST = [
"CONF_WHITE_VALUE", "CONF_WHITE_VALUE",
] ]
EXCLUDED_MODULES = {
"const.py",
"config.py",
"config_flow.py",
"device_trigger.py",
"trigger.py",
}
async def test_missing_discover_abbreviations( async def test_missing_discover_abbreviations(
hass: HomeAssistant, hass: HomeAssistant,
@ -1383,7 +1375,7 @@ async def test_missing_discover_abbreviations(
missing = [] missing = []
regex = re.compile(r"(CONF_[a-zA-Z\d_]*) *= *[\'\"]([a-zA-Z\d_]*)[\'\"]") regex = re.compile(r"(CONF_[a-zA-Z\d_]*) *= *[\'\"]([a-zA-Z\d_]*)[\'\"]")
for fil in Path(mqtt.__file__).parent.rglob("*.py"): for fil in Path(mqtt.__file__).parent.rglob("*.py"):
if fil.name == "trigger.py": if fil.name in EXCLUDED_MODULES:
continue continue
with open(fil, encoding="utf-8") as file: with open(fil, encoding="utf-8") as file:
matches = re.findall(regex, file.read()) matches = re.findall(regex, file.read())

View File

@ -31,6 +31,7 @@ from homeassistant.components.sensor import SensorDeviceClass
from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState
from homeassistant.const import ( from homeassistant.const import (
ATTR_ASSUMED_STATE, ATTR_ASSUMED_STATE,
CONF_PROTOCOL,
EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STARTED,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
SERVICE_RELOAD, SERVICE_RELOAD,
@ -2221,21 +2222,21 @@ async def test_setup_manual_mqtt_with_invalid_config(
( (
{ {
mqtt.CONF_BROKER: "mock-broker", mqtt.CONF_BROKER: "mock-broker",
mqtt.CONF_PROTOCOL: "3.1", CONF_PROTOCOL: "3.1",
}, },
3, 3,
), ),
( (
{ {
mqtt.CONF_BROKER: "mock-broker", mqtt.CONF_BROKER: "mock-broker",
mqtt.CONF_PROTOCOL: "3.1.1", CONF_PROTOCOL: "3.1.1",
}, },
4, 4,
), ),
( (
{ {
mqtt.CONF_BROKER: "mock-broker", mqtt.CONF_BROKER: "mock-broker",
mqtt.CONF_PROTOCOL: "5", CONF_PROTOCOL: "5",
}, },
5, 5,
), ),