Make API init async in Minecraft Server (#105403)
* Make api init async * Remove duplicate assignment of address and set server to None in constructor
This commit is contained in:
parent
a8148cea65
commit
7b32e4142e
11 changed files with 219 additions and 91 deletions
|
@ -30,13 +30,16 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
"""Set up Minecraft Server from a config entry."""
|
"""Set up Minecraft Server from a config entry."""
|
||||||
|
|
||||||
# Check and create API instance.
|
# Create API instance.
|
||||||
|
api = MinecraftServer(
|
||||||
|
hass,
|
||||||
|
entry.data.get(CONF_TYPE, MinecraftServerType.JAVA_EDITION),
|
||||||
|
entry.data[CONF_ADDRESS],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Initialize API instance.
|
||||||
try:
|
try:
|
||||||
api = await hass.async_add_executor_job(
|
await api.async_initialize()
|
||||||
MinecraftServer,
|
|
||||||
entry.data.get(CONF_TYPE, MinecraftServerType.JAVA_EDITION),
|
|
||||||
entry.data[CONF_ADDRESS],
|
|
||||||
)
|
|
||||||
except MinecraftServerAddressError as error:
|
except MinecraftServerAddressError as error:
|
||||||
raise ConfigEntryError(
|
raise ConfigEntryError(
|
||||||
f"Server address in configuration entry is invalid: {error}"
|
f"Server address in configuration entry is invalid: {error}"
|
||||||
|
@ -102,9 +105,11 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
|
||||||
config_data = config_entry.data
|
config_data = config_entry.data
|
||||||
|
|
||||||
# Migrate config entry.
|
# Migrate config entry.
|
||||||
|
address = config_data[CONF_HOST]
|
||||||
|
api = MinecraftServer(hass, MinecraftServerType.JAVA_EDITION, address)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
address = config_data[CONF_HOST]
|
await api.async_initialize()
|
||||||
MinecraftServer(MinecraftServerType.JAVA_EDITION, address)
|
|
||||||
host_only_lookup_success = True
|
host_only_lookup_success = True
|
||||||
except MinecraftServerAddressError as error:
|
except MinecraftServerAddressError as error:
|
||||||
host_only_lookup_success = False
|
host_only_lookup_success = False
|
||||||
|
@ -114,9 +119,11 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
|
||||||
)
|
)
|
||||||
|
|
||||||
if not host_only_lookup_success:
|
if not host_only_lookup_success:
|
||||||
|
address = f"{config_data[CONF_HOST]}:{config_data[CONF_PORT]}"
|
||||||
|
api = MinecraftServer(hass, MinecraftServerType.JAVA_EDITION, address)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
address = f"{config_data[CONF_HOST]}:{config_data[CONF_PORT]}"
|
await api.async_initialize()
|
||||||
MinecraftServer(MinecraftServerType.JAVA_EDITION, address)
|
|
||||||
except MinecraftServerAddressError as error:
|
except MinecraftServerAddressError as error:
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
"Can't migrate configuration entry due to error while parsing server address, try again later: %s",
|
"Can't migrate configuration entry due to error while parsing server address, try again later: %s",
|
||||||
|
|
|
@ -9,6 +9,8 @@ from dns.resolver import LifetimeTimeout
|
||||||
from mcstatus import BedrockServer, JavaServer
|
from mcstatus import BedrockServer, JavaServer
|
||||||
from mcstatus.status_response import BedrockStatusResponse, JavaStatusResponse
|
from mcstatus.status_response import BedrockStatusResponse, JavaStatusResponse
|
||||||
|
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
LOOKUP_TIMEOUT: float = 10
|
LOOKUP_TIMEOUT: float = 10
|
||||||
|
@ -52,35 +54,51 @@ class MinecraftServerConnectionError(Exception):
|
||||||
"""Raised when no data can be fechted from the server."""
|
"""Raised when no data can be fechted from the server."""
|
||||||
|
|
||||||
|
|
||||||
|
class MinecraftServerNotInitializedError(Exception):
|
||||||
|
"""Raised when APIs are used although server instance is not initialized yet."""
|
||||||
|
|
||||||
|
|
||||||
class MinecraftServer:
|
class MinecraftServer:
|
||||||
"""Minecraft Server wrapper class for 3rd party library mcstatus."""
|
"""Minecraft Server wrapper class for 3rd party library mcstatus."""
|
||||||
|
|
||||||
_server: BedrockServer | JavaServer
|
_server: BedrockServer | JavaServer | None
|
||||||
|
|
||||||
def __init__(self, server_type: MinecraftServerType, address: str) -> None:
|
def __init__(
|
||||||
|
self, hass: HomeAssistant, server_type: MinecraftServerType, address: str
|
||||||
|
) -> None:
|
||||||
"""Initialize server instance."""
|
"""Initialize server instance."""
|
||||||
|
self._server = None
|
||||||
|
self._hass = hass
|
||||||
|
self._server_type = server_type
|
||||||
|
self._address = address
|
||||||
|
|
||||||
|
async def async_initialize(self) -> None:
|
||||||
|
"""Perform async initialization of server instance."""
|
||||||
try:
|
try:
|
||||||
if server_type == MinecraftServerType.JAVA_EDITION:
|
if self._server_type == MinecraftServerType.JAVA_EDITION:
|
||||||
self._server = JavaServer.lookup(address, timeout=LOOKUP_TIMEOUT)
|
self._server = await JavaServer.async_lookup(self._address)
|
||||||
else:
|
else:
|
||||||
self._server = BedrockServer.lookup(address, timeout=LOOKUP_TIMEOUT)
|
self._server = await self._hass.async_add_executor_job(
|
||||||
|
BedrockServer.lookup, self._address
|
||||||
|
)
|
||||||
except (ValueError, LifetimeTimeout) as error:
|
except (ValueError, LifetimeTimeout) as error:
|
||||||
raise MinecraftServerAddressError(
|
raise MinecraftServerAddressError(
|
||||||
f"Lookup of '{address}' failed: {self._get_error_message(error)}"
|
f"Lookup of '{self._address}' failed: {self._get_error_message(error)}"
|
||||||
) from error
|
) from error
|
||||||
|
|
||||||
self._server.timeout = DATA_UPDATE_TIMEOUT
|
self._server.timeout = DATA_UPDATE_TIMEOUT
|
||||||
self._address = address
|
|
||||||
|
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"%s server instance created with address '%s'", server_type, address
|
"%s server instance created with address '%s'",
|
||||||
|
self._server_type,
|
||||||
|
self._address,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_is_online(self) -> bool:
|
async def async_is_online(self) -> bool:
|
||||||
"""Check if the server is online, supporting both Java and Bedrock Edition servers."""
|
"""Check if the server is online, supporting both Java and Bedrock Edition servers."""
|
||||||
try:
|
try:
|
||||||
await self.async_get_data()
|
await self.async_get_data()
|
||||||
except MinecraftServerConnectionError:
|
except (MinecraftServerConnectionError, MinecraftServerNotInitializedError):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -89,6 +107,9 @@ class MinecraftServer:
|
||||||
"""Get updated data from the server, supporting both Java and Bedrock Edition servers."""
|
"""Get updated data from the server, supporting both Java and Bedrock Edition servers."""
|
||||||
status_response: BedrockStatusResponse | JavaStatusResponse
|
status_response: BedrockStatusResponse | JavaStatusResponse
|
||||||
|
|
||||||
|
if self._server is None:
|
||||||
|
raise MinecraftServerNotInitializedError()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
status_response = await self._server.async_status(tries=DATA_UPDATE_RETRIES)
|
status_response = await self._server.async_status(tries=DATA_UPDATE_RETRIES)
|
||||||
except OSError as error:
|
except OSError as error:
|
||||||
|
|
|
@ -35,10 +35,10 @@ class MinecraftServerConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||||
|
|
||||||
# Some Bedrock Edition servers mimic a Java Edition server, therefore check for a Bedrock Edition server first.
|
# Some Bedrock Edition servers mimic a Java Edition server, therefore check for a Bedrock Edition server first.
|
||||||
for server_type in MinecraftServerType:
|
for server_type in MinecraftServerType:
|
||||||
|
api = MinecraftServer(self.hass, server_type, address)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
api = await self.hass.async_add_executor_job(
|
await api.async_initialize()
|
||||||
MinecraftServer, server_type, address
|
|
||||||
)
|
|
||||||
except MinecraftServerAddressError:
|
except MinecraftServerAddressError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -7,7 +7,12 @@ import logging
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||||
|
|
||||||
from .api import MinecraftServer, MinecraftServerConnectionError, MinecraftServerData
|
from .api import (
|
||||||
|
MinecraftServer,
|
||||||
|
MinecraftServerConnectionError,
|
||||||
|
MinecraftServerData,
|
||||||
|
MinecraftServerNotInitializedError,
|
||||||
|
)
|
||||||
|
|
||||||
SCAN_INTERVAL = timedelta(seconds=60)
|
SCAN_INTERVAL = timedelta(seconds=60)
|
||||||
|
|
||||||
|
@ -32,5 +37,8 @@ class MinecraftServerCoordinator(DataUpdateCoordinator[MinecraftServerData]):
|
||||||
"""Get updated data from the server."""
|
"""Get updated data from the server."""
|
||||||
try:
|
try:
|
||||||
return await self._api.async_get_data()
|
return await self._api.async_get_data()
|
||||||
except MinecraftServerConnectionError as error:
|
except (
|
||||||
|
MinecraftServerConnectionError,
|
||||||
|
MinecraftServerNotInitializedError,
|
||||||
|
) as error:
|
||||||
raise UpdateFailed(error) from error
|
raise UpdateFailed(error) from error
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# serializer version: 1
|
# serializer version: 1
|
||||||
# name: test_binary_sensor[bedrock_mock_config_entry-BedrockServer-status_response1]
|
# name: test_binary_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'device_class': 'connectivity',
|
'device_class': 'connectivity',
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
'state': 'on',
|
'state': 'on',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_binary_sensor[java_mock_config_entry-JavaServer-status_response0]
|
# name: test_binary_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'device_class': 'connectivity',
|
'device_class': 'connectivity',
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
'state': 'on',
|
'state': 'on',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_binary_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1]
|
# name: test_binary_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'device_class': 'connectivity',
|
'device_class': 'connectivity',
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
'state': 'on',
|
'state': 'on',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_binary_sensor_update[java_mock_config_entry-JavaServer-status_response0]
|
# name: test_binary_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'device_class': 'connectivity',
|
'device_class': 'connectivity',
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# serializer version: 1
|
# serializer version: 1
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1]
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Latency',
|
'friendly_name': 'Minecraft Server Latency',
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
'state': '5',
|
'state': '5',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].1
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].1
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players online',
|
'friendly_name': 'Minecraft Server Players online',
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
'state': '3',
|
'state': '3',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].2
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].2
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players max',
|
'friendly_name': 'Minecraft Server Players max',
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
'state': '10',
|
'state': '10',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].3
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].3
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server World message',
|
'friendly_name': 'Minecraft Server World message',
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
'state': 'Dummy MOTD',
|
'state': 'Dummy MOTD',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].4
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].4
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Version',
|
'friendly_name': 'Minecraft Server Version',
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
'state': 'Dummy Version',
|
'state': 'Dummy Version',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].5
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].5
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Protocol version',
|
'friendly_name': 'Minecraft Server Protocol version',
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
'state': '123',
|
'state': '123',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].6
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].6
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Map name',
|
'friendly_name': 'Minecraft Server Map name',
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
'state': 'Dummy Map Name',
|
'state': 'Dummy Map Name',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].7
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].7
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Game mode',
|
'friendly_name': 'Minecraft Server Game mode',
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
'state': 'Dummy Game Mode',
|
'state': 'Dummy Game Mode',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].8
|
# name: test_sensor[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].8
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Edition',
|
'friendly_name': 'Minecraft Server Edition',
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
'state': 'MCPE',
|
'state': 'MCPE',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[java_mock_config_entry-JavaServer-status_response0-entity_ids0]
|
# name: test_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Latency',
|
'friendly_name': 'Minecraft Server Latency',
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
'state': '5',
|
'state': '5',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[java_mock_config_entry-JavaServer-status_response0-entity_ids0].1
|
# name: test_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].1
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players online',
|
'friendly_name': 'Minecraft Server Players online',
|
||||||
|
@ -152,7 +152,7 @@
|
||||||
'state': '3',
|
'state': '3',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[java_mock_config_entry-JavaServer-status_response0-entity_ids0].2
|
# name: test_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].2
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players max',
|
'friendly_name': 'Minecraft Server Players max',
|
||||||
|
@ -166,7 +166,7 @@
|
||||||
'state': '10',
|
'state': '10',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[java_mock_config_entry-JavaServer-status_response0-entity_ids0].3
|
# name: test_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].3
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server World message',
|
'friendly_name': 'Minecraft Server World message',
|
||||||
|
@ -179,7 +179,7 @@
|
||||||
'state': 'Dummy MOTD',
|
'state': 'Dummy MOTD',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[java_mock_config_entry-JavaServer-status_response0-entity_ids0].4
|
# name: test_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].4
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Version',
|
'friendly_name': 'Minecraft Server Version',
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
'state': 'Dummy Version',
|
'state': 'Dummy Version',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor[java_mock_config_entry-JavaServer-status_response0-entity_ids0].5
|
# name: test_sensor[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].5
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Protocol version',
|
'friendly_name': 'Minecraft Server Protocol version',
|
||||||
|
@ -205,7 +205,7 @@
|
||||||
'state': '123',
|
'state': '123',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1]
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Latency',
|
'friendly_name': 'Minecraft Server Latency',
|
||||||
|
@ -219,7 +219,7 @@
|
||||||
'state': '5',
|
'state': '5',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].1
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].1
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players online',
|
'friendly_name': 'Minecraft Server Players online',
|
||||||
|
@ -233,7 +233,7 @@
|
||||||
'state': '3',
|
'state': '3',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].2
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].2
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players max',
|
'friendly_name': 'Minecraft Server Players max',
|
||||||
|
@ -247,7 +247,7 @@
|
||||||
'state': '10',
|
'state': '10',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].3
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].3
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server World message',
|
'friendly_name': 'Minecraft Server World message',
|
||||||
|
@ -260,7 +260,7 @@
|
||||||
'state': 'Dummy MOTD',
|
'state': 'Dummy MOTD',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].4
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].4
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Version',
|
'friendly_name': 'Minecraft Server Version',
|
||||||
|
@ -273,7 +273,7 @@
|
||||||
'state': 'Dummy Version',
|
'state': 'Dummy Version',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].5
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].5
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Protocol version',
|
'friendly_name': 'Minecraft Server Protocol version',
|
||||||
|
@ -286,7 +286,7 @@
|
||||||
'state': '123',
|
'state': '123',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].6
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].6
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Map name',
|
'friendly_name': 'Minecraft Server Map name',
|
||||||
|
@ -299,7 +299,7 @@
|
||||||
'state': 'Dummy Map Name',
|
'state': 'Dummy Map Name',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].7
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].7
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Game mode',
|
'friendly_name': 'Minecraft Server Game mode',
|
||||||
|
@ -312,7 +312,7 @@
|
||||||
'state': 'Dummy Game Mode',
|
'state': 'Dummy Game Mode',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1-entity_ids1].8
|
# name: test_sensor_update[bedrock_mock_config_entry-BedrockServer-lookup-status_response1-entity_ids1].8
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Edition',
|
'friendly_name': 'Minecraft Server Edition',
|
||||||
|
@ -325,7 +325,7 @@
|
||||||
'state': 'MCPE',
|
'state': 'MCPE',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[java_mock_config_entry-JavaServer-status_response0-entity_ids0]
|
# name: test_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Latency',
|
'friendly_name': 'Minecraft Server Latency',
|
||||||
|
@ -339,7 +339,7 @@
|
||||||
'state': '5',
|
'state': '5',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[java_mock_config_entry-JavaServer-status_response0-entity_ids0].1
|
# name: test_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].1
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players online',
|
'friendly_name': 'Minecraft Server Players online',
|
||||||
|
@ -358,7 +358,7 @@
|
||||||
'state': '3',
|
'state': '3',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[java_mock_config_entry-JavaServer-status_response0-entity_ids0].2
|
# name: test_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].2
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Players max',
|
'friendly_name': 'Minecraft Server Players max',
|
||||||
|
@ -372,7 +372,7 @@
|
||||||
'state': '10',
|
'state': '10',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[java_mock_config_entry-JavaServer-status_response0-entity_ids0].3
|
# name: test_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].3
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server World message',
|
'friendly_name': 'Minecraft Server World message',
|
||||||
|
@ -385,7 +385,7 @@
|
||||||
'state': 'Dummy MOTD',
|
'state': 'Dummy MOTD',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[java_mock_config_entry-JavaServer-status_response0-entity_ids0].4
|
# name: test_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].4
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Version',
|
'friendly_name': 'Minecraft Server Version',
|
||||||
|
@ -398,7 +398,7 @@
|
||||||
'state': 'Dummy Version',
|
'state': 'Dummy Version',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_sensor_update[java_mock_config_entry-JavaServer-status_response0-entity_ids0].5
|
# name: test_sensor_update[java_mock_config_entry-JavaServer-async_lookup-status_response0-entity_ids0].5
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'friendly_name': 'Minecraft Server Protocol version',
|
'friendly_name': 'Minecraft Server Protocol version',
|
||||||
|
|
|
@ -22,16 +22,27 @@ from tests.common import async_fire_time_changed
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response"),
|
("mock_config_entry", "server", "lookup_function_name", "status_response"),
|
||||||
[
|
[
|
||||||
("java_mock_config_entry", JavaServer, TEST_JAVA_STATUS_RESPONSE),
|
(
|
||||||
("bedrock_mock_config_entry", BedrockServer, TEST_BEDROCK_STATUS_RESPONSE),
|
"java_mock_config_entry",
|
||||||
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"bedrock_mock_config_entry",
|
||||||
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_binary_sensor(
|
async def test_binary_sensor(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
|
@ -41,7 +52,7 @@ async def test_binary_sensor(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
@ -53,16 +64,27 @@ async def test_binary_sensor(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response"),
|
("mock_config_entry", "server", "lookup_function_name", "status_response"),
|
||||||
[
|
[
|
||||||
("java_mock_config_entry", JavaServer, TEST_JAVA_STATUS_RESPONSE),
|
(
|
||||||
("bedrock_mock_config_entry", BedrockServer, TEST_BEDROCK_STATUS_RESPONSE),
|
"java_mock_config_entry",
|
||||||
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"bedrock_mock_config_entry",
|
||||||
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_binary_sensor_update(
|
async def test_binary_sensor_update(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
|
@ -73,7 +95,7 @@ async def test_binary_sensor_update(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
@ -88,16 +110,27 @@ async def test_binary_sensor_update(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response"),
|
("mock_config_entry", "server", "lookup_function_name", "status_response"),
|
||||||
[
|
[
|
||||||
("java_mock_config_entry", JavaServer, TEST_JAVA_STATUS_RESPONSE),
|
(
|
||||||
("bedrock_mock_config_entry", BedrockServer, TEST_BEDROCK_STATUS_RESPONSE),
|
"java_mock_config_entry",
|
||||||
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"bedrock_mock_config_entry",
|
||||||
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_binary_sensor_update_failure(
|
async def test_binary_sensor_update_failure(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
|
@ -107,7 +140,7 @@ async def test_binary_sensor_update_failure(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
|
|
@ -41,7 +41,7 @@ async def test_address_validation_failure(hass: HomeAssistant) -> None:
|
||||||
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
@ -58,7 +58,7 @@ async def test_java_connection_failure(hass: HomeAssistant) -> None:
|
||||||
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
||||||
|
@ -95,7 +95,7 @@ async def test_java_connection(hass: HomeAssistant) -> None:
|
||||||
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
||||||
|
@ -138,7 +138,7 @@ async def test_recovery(hass: HomeAssistant) -> None:
|
||||||
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
"homeassistant.components.minecraft_server.api.BedrockServer.lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
|
|
@ -42,9 +42,14 @@ async def test_config_entry_diagnostics(
|
||||||
mock_config_entry = request.getfixturevalue(mock_config_entry)
|
mock_config_entry = request.getfixturevalue(mock_config_entry)
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
if server.__name__ == "JavaServer":
|
||||||
|
lookup_function_name = "async_lookup"
|
||||||
|
else:
|
||||||
|
lookup_function_name = "lookup"
|
||||||
|
|
||||||
# Setup mock entry.
|
# Setup mock entry.
|
||||||
with patch(
|
with patch(
|
||||||
f"mcstatus.server.{server.__name__}.lookup",
|
f"mcstatus.server.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"mcstatus.server.{server.__name__}.async_status",
|
f"mcstatus.server.{server.__name__}.async_status",
|
||||||
|
|
|
@ -122,7 +122,7 @@ async def test_setup_and_unload_entry(
|
||||||
java_mock_config_entry.add_to_hass(hass)
|
java_mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
||||||
|
@ -138,14 +138,14 @@ async def test_setup_and_unload_entry(
|
||||||
assert java_mock_config_entry.state == ConfigEntryState.NOT_LOADED
|
assert java_mock_config_entry.state == ConfigEntryState.NOT_LOADED
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_entry_failure(
|
async def test_setup_entry_lookup_failure(
|
||||||
hass: HomeAssistant, java_mock_config_entry: MockConfigEntry
|
hass: HomeAssistant, java_mock_config_entry: MockConfigEntry
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test failed entry setup."""
|
"""Test lookup failure in entry setup."""
|
||||||
java_mock_config_entry.add_to_hass(hass)
|
java_mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
side_effect=ValueError,
|
side_effect=ValueError,
|
||||||
):
|
):
|
||||||
assert not await hass.config_entries.async_setup(
|
assert not await hass.config_entries.async_setup(
|
||||||
|
@ -156,6 +156,24 @@ async def test_setup_entry_failure(
|
||||||
assert java_mock_config_entry.state == ConfigEntryState.SETUP_ERROR
|
assert java_mock_config_entry.state == ConfigEntryState.SETUP_ERROR
|
||||||
|
|
||||||
|
|
||||||
|
async def test_setup_entry_init_failure(
|
||||||
|
hass: HomeAssistant, java_mock_config_entry: MockConfigEntry
|
||||||
|
) -> None:
|
||||||
|
"""Test init failure in entry setup."""
|
||||||
|
java_mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.minecraft_server.api.MinecraftServer.async_initialize",
|
||||||
|
side_effect=None,
|
||||||
|
):
|
||||||
|
assert not await hass.config_entries.async_setup(
|
||||||
|
java_mock_config_entry.entry_id
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert java_mock_config_entry.state == ConfigEntryState.SETUP_RETRY
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_entry_not_ready(
|
async def test_setup_entry_not_ready(
|
||||||
hass: HomeAssistant, java_mock_config_entry: MockConfigEntry
|
hass: HomeAssistant, java_mock_config_entry: MockConfigEntry
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -163,7 +181,7 @@ async def test_setup_entry_not_ready(
|
||||||
java_mock_config_entry.add_to_hass(hass)
|
java_mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
||||||
|
@ -196,7 +214,7 @@ async def test_entry_migration(
|
||||||
|
|
||||||
# Trigger migration.
|
# Trigger migration.
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
side_effect=[
|
side_effect=[
|
||||||
ValueError, # async_migrate_entry
|
ValueError, # async_migrate_entry
|
||||||
JavaServer(host=TEST_HOST, port=TEST_PORT), # async_migrate_entry
|
JavaServer(host=TEST_HOST, port=TEST_PORT), # async_migrate_entry
|
||||||
|
@ -258,7 +276,7 @@ async def test_entry_migration_host_only(
|
||||||
|
|
||||||
# Trigger migration.
|
# Trigger migration.
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_status",
|
||||||
|
@ -293,7 +311,7 @@ async def test_entry_migration_v3_failure(
|
||||||
|
|
||||||
# Trigger migration.
|
# Trigger migration.
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.minecraft_server.api.JavaServer.lookup",
|
"homeassistant.components.minecraft_server.api.JavaServer.async_lookup",
|
||||||
side_effect=[
|
side_effect=[
|
||||||
ValueError, # async_migrate_entry
|
ValueError, # async_migrate_entry
|
||||||
ValueError, # async_migrate_entry
|
ValueError, # async_migrate_entry
|
||||||
|
|
|
@ -55,17 +55,25 @@ BEDROCK_SENSOR_ENTITIES_DISABLED_BY_DEFAULT: list[str] = [
|
||||||
|
|
||||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response", "entity_ids"),
|
(
|
||||||
|
"mock_config_entry",
|
||||||
|
"server",
|
||||||
|
"lookup_function_name",
|
||||||
|
"status_response",
|
||||||
|
"entity_ids",
|
||||||
|
),
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
"java_mock_config_entry",
|
"java_mock_config_entry",
|
||||||
JavaServer,
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
TEST_JAVA_STATUS_RESPONSE,
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
JAVA_SENSOR_ENTITIES,
|
JAVA_SENSOR_ENTITIES,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"bedrock_mock_config_entry",
|
"bedrock_mock_config_entry",
|
||||||
BedrockServer,
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
TEST_BEDROCK_STATUS_RESPONSE,
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
BEDROCK_SENSOR_ENTITIES,
|
BEDROCK_SENSOR_ENTITIES,
|
||||||
),
|
),
|
||||||
|
@ -75,6 +83,7 @@ async def test_sensor(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
entity_ids: list[str],
|
entity_ids: list[str],
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
|
@ -85,7 +94,7 @@ async def test_sensor(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
@ -98,17 +107,25 @@ async def test_sensor(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response", "entity_ids"),
|
(
|
||||||
|
"mock_config_entry",
|
||||||
|
"server",
|
||||||
|
"lookup_function_name",
|
||||||
|
"status_response",
|
||||||
|
"entity_ids",
|
||||||
|
),
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
"java_mock_config_entry",
|
"java_mock_config_entry",
|
||||||
JavaServer,
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
TEST_JAVA_STATUS_RESPONSE,
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
JAVA_SENSOR_ENTITIES_DISABLED_BY_DEFAULT,
|
JAVA_SENSOR_ENTITIES_DISABLED_BY_DEFAULT,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"bedrock_mock_config_entry",
|
"bedrock_mock_config_entry",
|
||||||
BedrockServer,
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
TEST_BEDROCK_STATUS_RESPONSE,
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
BEDROCK_SENSOR_ENTITIES_DISABLED_BY_DEFAULT,
|
BEDROCK_SENSOR_ENTITIES_DISABLED_BY_DEFAULT,
|
||||||
),
|
),
|
||||||
|
@ -118,6 +135,7 @@ async def test_sensor_disabled_by_default(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
entity_ids: list[str],
|
entity_ids: list[str],
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
|
@ -127,7 +145,7 @@ async def test_sensor_disabled_by_default(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
@ -141,17 +159,25 @@ async def test_sensor_disabled_by_default(
|
||||||
|
|
||||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response", "entity_ids"),
|
(
|
||||||
|
"mock_config_entry",
|
||||||
|
"server",
|
||||||
|
"lookup_function_name",
|
||||||
|
"status_response",
|
||||||
|
"entity_ids",
|
||||||
|
),
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
"java_mock_config_entry",
|
"java_mock_config_entry",
|
||||||
JavaServer,
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
TEST_JAVA_STATUS_RESPONSE,
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
JAVA_SENSOR_ENTITIES,
|
JAVA_SENSOR_ENTITIES,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"bedrock_mock_config_entry",
|
"bedrock_mock_config_entry",
|
||||||
BedrockServer,
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
TEST_BEDROCK_STATUS_RESPONSE,
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
BEDROCK_SENSOR_ENTITIES,
|
BEDROCK_SENSOR_ENTITIES,
|
||||||
),
|
),
|
||||||
|
@ -161,6 +187,7 @@ async def test_sensor_update(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
entity_ids: list[str],
|
entity_ids: list[str],
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
|
@ -172,7 +199,7 @@ async def test_sensor_update(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
@ -189,17 +216,25 @@ async def test_sensor_update(
|
||||||
|
|
||||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("mock_config_entry", "server", "status_response", "entity_ids"),
|
(
|
||||||
|
"mock_config_entry",
|
||||||
|
"server",
|
||||||
|
"lookup_function_name",
|
||||||
|
"status_response",
|
||||||
|
"entity_ids",
|
||||||
|
),
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
"java_mock_config_entry",
|
"java_mock_config_entry",
|
||||||
JavaServer,
|
JavaServer,
|
||||||
|
"async_lookup",
|
||||||
TEST_JAVA_STATUS_RESPONSE,
|
TEST_JAVA_STATUS_RESPONSE,
|
||||||
JAVA_SENSOR_ENTITIES,
|
JAVA_SENSOR_ENTITIES,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"bedrock_mock_config_entry",
|
"bedrock_mock_config_entry",
|
||||||
BedrockServer,
|
BedrockServer,
|
||||||
|
"lookup",
|
||||||
TEST_BEDROCK_STATUS_RESPONSE,
|
TEST_BEDROCK_STATUS_RESPONSE,
|
||||||
BEDROCK_SENSOR_ENTITIES,
|
BEDROCK_SENSOR_ENTITIES,
|
||||||
),
|
),
|
||||||
|
@ -209,6 +244,7 @@ async def test_sensor_update_failure(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_config_entry: str,
|
mock_config_entry: str,
|
||||||
server: JavaServer | BedrockServer,
|
server: JavaServer | BedrockServer,
|
||||||
|
lookup_function_name: str,
|
||||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||||
entity_ids: list[str],
|
entity_ids: list[str],
|
||||||
request: pytest.FixtureRequest,
|
request: pytest.FixtureRequest,
|
||||||
|
@ -219,7 +255,7 @@ async def test_sensor_update_failure(
|
||||||
mock_config_entry.add_to_hass(hass)
|
mock_config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.{lookup_function_name}",
|
||||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||||
), patch(
|
), patch(
|
||||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue