mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Backup location feature requires Synology DSM 6.0 and higher (#139106)
* the filestation api requires dsm 6.0 * fix tests
This commit is contained in:
parent
f7a6d163bb
commit
4ca39636e2
@ -7,6 +7,7 @@ from collections.abc import Callable
|
|||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from awesomeversion import AwesomeVersion
|
||||||
from synology_dsm import SynologyDSM
|
from synology_dsm import SynologyDSM
|
||||||
from synology_dsm.api.core.security import SynoCoreSecurity
|
from synology_dsm.api.core.security import SynoCoreSecurity
|
||||||
from synology_dsm.api.core.system import SynoCoreSystem
|
from synology_dsm.api.core.system import SynoCoreSystem
|
||||||
@ -135,6 +136,9 @@ class SynoApi:
|
|||||||
)
|
)
|
||||||
await self.async_login()
|
await self.async_login()
|
||||||
|
|
||||||
|
self.information = self.dsm.information
|
||||||
|
await self.information.update()
|
||||||
|
|
||||||
# check if surveillance station is used
|
# check if surveillance station is used
|
||||||
self._with_surveillance_station = bool(
|
self._with_surveillance_station = bool(
|
||||||
self.dsm.apis.get(SynoSurveillanceStation.CAMERA_API_KEY)
|
self.dsm.apis.get(SynoSurveillanceStation.CAMERA_API_KEY)
|
||||||
@ -165,7 +169,10 @@ class SynoApi:
|
|||||||
LOGGER.debug("Disabled fetching upgrade data during setup: %s", ex)
|
LOGGER.debug("Disabled fetching upgrade data during setup: %s", ex)
|
||||||
|
|
||||||
# check if file station is used and permitted
|
# check if file station is used and permitted
|
||||||
self._with_file_station = bool(self.dsm.apis.get(SynoFileStation.LIST_API_KEY))
|
self._with_file_station = bool(
|
||||||
|
self.information.awesome_version >= AwesomeVersion("6.0")
|
||||||
|
and self.dsm.apis.get(SynoFileStation.LIST_API_KEY)
|
||||||
|
)
|
||||||
if self._with_file_station:
|
if self._with_file_station:
|
||||||
shares: list | None = None
|
shares: list | None = None
|
||||||
with suppress(*SYNOLOGY_CONNECTION_EXCEPTIONS):
|
with suppress(*SYNOLOGY_CONNECTION_EXCEPTIONS):
|
||||||
@ -317,7 +324,6 @@ class SynoApi:
|
|||||||
|
|
||||||
async def _fetch_device_configuration(self) -> None:
|
async def _fetch_device_configuration(self) -> None:
|
||||||
"""Fetch initial device config."""
|
"""Fetch initial device config."""
|
||||||
self.information = self.dsm.information
|
|
||||||
self.network = self.dsm.network
|
self.network = self.dsm.network
|
||||||
await self.network.update()
|
await self.network.update()
|
||||||
|
|
||||||
|
22
tests/components/synology_dsm/common.py
Normal file
22
tests/components/synology_dsm/common.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
"""Configure Synology DSM tests."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from unittest.mock import AsyncMock, Mock
|
||||||
|
|
||||||
|
from awesomeversion import AwesomeVersion
|
||||||
|
|
||||||
|
from .consts import SERIAL
|
||||||
|
|
||||||
|
|
||||||
|
def mock_dsm_information(
|
||||||
|
serial: str | None = SERIAL,
|
||||||
|
update_result: bool = True,
|
||||||
|
awesome_version: str = "7.2",
|
||||||
|
) -> Mock:
|
||||||
|
"""Mock SynologyDSM information."""
|
||||||
|
return Mock(
|
||||||
|
serial=serial,
|
||||||
|
update=AsyncMock(return_value=update_result),
|
||||||
|
awesome_version=AwesomeVersion(awesome_version),
|
||||||
|
)
|
@ -8,6 +8,8 @@ import pytest
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
|
from .common import mock_dsm_information
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_setup_entry() -> Generator[AsyncMock]:
|
def mock_setup_entry() -> Generator[AsyncMock]:
|
||||||
@ -31,6 +33,7 @@ def fixture_dsm():
|
|||||||
dsm.login = AsyncMock(return_value=True)
|
dsm.login = AsyncMock(return_value=True)
|
||||||
dsm.update = AsyncMock(return_value=True)
|
dsm.update = AsyncMock(return_value=True)
|
||||||
|
|
||||||
|
dsm.information = mock_dsm_information()
|
||||||
dsm.network.update = AsyncMock(return_value=True)
|
dsm.network.update = AsyncMock(return_value=True)
|
||||||
dsm.surveillance_station.update = AsyncMock(return_value=True)
|
dsm.surveillance_station.update = AsyncMock(return_value=True)
|
||||||
dsm.upgrade.update = AsyncMock(return_value=True)
|
dsm.upgrade.update = AsyncMock(return_value=True)
|
||||||
|
@ -31,7 +31,8 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
from homeassistant.util.aiohttp import MockStreamReader
|
from homeassistant.util.aiohttp import MockStreamReader
|
||||||
|
|
||||||
from .consts import HOST, MACS, PASSWORD, PORT, SERIAL, USE_SSL, USERNAME
|
from .common import mock_dsm_information
|
||||||
|
from .consts import HOST, MACS, PASSWORD, PORT, USE_SSL, USERNAME
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
from tests.typing import ClientSessionGenerator, WebSocketGenerator
|
from tests.typing import ClientSessionGenerator, WebSocketGenerator
|
||||||
@ -99,7 +100,7 @@ def mock_dsm_with_filestation():
|
|||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
dsm.information = mock_dsm_information()
|
||||||
dsm.file = AsyncMock(
|
dsm.file = AsyncMock(
|
||||||
get_shared_folders=AsyncMock(
|
get_shared_folders=AsyncMock(
|
||||||
return_value=[
|
return_value=[
|
||||||
@ -147,12 +148,12 @@ def mock_dsm_without_filestation():
|
|||||||
dsm.upgrade.update = AsyncMock(return_value=True)
|
dsm.upgrade.update = AsyncMock(return_value=True)
|
||||||
dsm.utilisation = Mock(cpu_user_load=1, update=AsyncMock(return_value=True))
|
dsm.utilisation = Mock(cpu_user_load=1, update=AsyncMock(return_value=True))
|
||||||
dsm.network = Mock(update=AsyncMock(return_value=True), macs=MACS)
|
dsm.network = Mock(update=AsyncMock(return_value=True), macs=MACS)
|
||||||
|
dsm.information = mock_dsm_information()
|
||||||
dsm.storage = Mock(
|
dsm.storage = Mock(
|
||||||
disks_ids=["sda", "sdb", "sdc"],
|
disks_ids=["sda", "sdb", "sdc"],
|
||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
|
||||||
dsm.file = None
|
dsm.file = None
|
||||||
|
|
||||||
yield dsm
|
yield dsm
|
||||||
|
@ -40,6 +40,7 @@ from homeassistant.helpers.service_info.ssdp import (
|
|||||||
)
|
)
|
||||||
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
|
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
|
||||||
|
|
||||||
|
from .common import mock_dsm_information
|
||||||
from .consts import (
|
from .consts import (
|
||||||
DEVICE_TOKEN,
|
DEVICE_TOKEN,
|
||||||
HOST,
|
HOST,
|
||||||
@ -72,7 +73,7 @@ def mock_controller_service():
|
|||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
dsm.information = mock_dsm_information()
|
||||||
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
||||||
yield dsm
|
yield dsm
|
||||||
|
|
||||||
@ -95,7 +96,7 @@ def mock_controller_service_2sa():
|
|||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
dsm.information = mock_dsm_information()
|
||||||
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
||||||
yield dsm
|
yield dsm
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ def mock_controller_service_vdsm():
|
|||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
dsm.information = mock_dsm_information()
|
||||||
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
||||||
yield dsm
|
yield dsm
|
||||||
|
|
||||||
@ -137,7 +138,7 @@ def mock_controller_service_with_filestation():
|
|||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
dsm.information = mock_dsm_information()
|
||||||
dsm.file = AsyncMock(
|
dsm.file = AsyncMock(
|
||||||
get_shared_folders=AsyncMock(
|
get_shared_folders=AsyncMock(
|
||||||
return_value=[
|
return_value=[
|
||||||
@ -170,7 +171,7 @@ def mock_controller_service_failed():
|
|||||||
volumes_ids=[],
|
volumes_ids=[],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=None)
|
dsm.information = mock_dsm_information(serial=None)
|
||||||
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
dsm.file = AsyncMock(get_shared_folders=AsyncMock(return_value=None))
|
||||||
yield dsm
|
yield dsm
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ from homeassistant.const import (
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.util.aiohttp import MockRequest
|
from homeassistant.util.aiohttp import MockRequest
|
||||||
|
|
||||||
|
from .common import mock_dsm_information
|
||||||
from .consts import HOST, MACS, PASSWORD, PORT, USE_SSL, USERNAME
|
from .consts import HOST, MACS, PASSWORD, PORT, USE_SSL, USERNAME
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
@ -44,6 +45,7 @@ def dsm_with_photos() -> MagicMock:
|
|||||||
dsm = MagicMock()
|
dsm = MagicMock()
|
||||||
dsm.login = AsyncMock(return_value=True)
|
dsm.login = AsyncMock(return_value=True)
|
||||||
dsm.update = AsyncMock(return_value=True)
|
dsm.update = AsyncMock(return_value=True)
|
||||||
|
dsm.information = mock_dsm_information()
|
||||||
dsm.network.update = AsyncMock(return_value=True)
|
dsm.network.update = AsyncMock(return_value=True)
|
||||||
dsm.surveillance_station.update = AsyncMock(return_value=True)
|
dsm.surveillance_station.update = AsyncMock(return_value=True)
|
||||||
dsm.upgrade.update = AsyncMock(return_value=True)
|
dsm.upgrade.update = AsyncMock(return_value=True)
|
||||||
|
@ -25,7 +25,8 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.helpers import issue_registry as ir
|
from homeassistant.helpers import issue_registry as ir
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from .consts import HOST, MACS, PASSWORD, PORT, SERIAL, USE_SSL, USERNAME
|
from .common import mock_dsm_information
|
||||||
|
from .consts import HOST, MACS, PASSWORD, PORT, USE_SSL, USERNAME
|
||||||
|
|
||||||
from tests.common import ANY, MockConfigEntry
|
from tests.common import ANY, MockConfigEntry
|
||||||
from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow
|
from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow
|
||||||
@ -48,7 +49,7 @@ def mock_dsm_with_filestation():
|
|||||||
volumes_ids=["volume_1"],
|
volumes_ids=["volume_1"],
|
||||||
update=AsyncMock(return_value=True),
|
update=AsyncMock(return_value=True),
|
||||||
)
|
)
|
||||||
dsm.information = Mock(serial=SERIAL)
|
dsm.information = mock_dsm_information()
|
||||||
dsm.file = AsyncMock(
|
dsm.file = AsyncMock(
|
||||||
get_shared_folders=AsyncMock(
|
get_shared_folders=AsyncMock(
|
||||||
return_value=[
|
return_value=[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user