mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 01:08:12 +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
|
||||
import logging
|
||||
|
||||
from awesomeversion import AwesomeVersion
|
||||
from synology_dsm import SynologyDSM
|
||||
from synology_dsm.api.core.security import SynoCoreSecurity
|
||||
from synology_dsm.api.core.system import SynoCoreSystem
|
||||
@ -135,6 +136,9 @@ class SynoApi:
|
||||
)
|
||||
await self.async_login()
|
||||
|
||||
self.information = self.dsm.information
|
||||
await self.information.update()
|
||||
|
||||
# check if surveillance station is used
|
||||
self._with_surveillance_station = bool(
|
||||
self.dsm.apis.get(SynoSurveillanceStation.CAMERA_API_KEY)
|
||||
@ -165,7 +169,10 @@ class SynoApi:
|
||||
LOGGER.debug("Disabled fetching upgrade data during setup: %s", ex)
|
||||
|
||||
# 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:
|
||||
shares: list | None = None
|
||||
with suppress(*SYNOLOGY_CONNECTION_EXCEPTIONS):
|
||||
@ -317,7 +324,6 @@ class SynoApi:
|
||||
|
||||
async def _fetch_device_configuration(self) -> None:
|
||||
"""Fetch initial device config."""
|
||||
self.information = self.dsm.information
|
||||
self.network = self.dsm.network
|
||||
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.setup import async_setup_component
|
||||
|
||||
from .common import mock_dsm_information
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_setup_entry() -> Generator[AsyncMock]:
|
||||
@ -31,6 +33,7 @@ def fixture_dsm():
|
||||
dsm.login = AsyncMock(return_value=True)
|
||||
dsm.update = AsyncMock(return_value=True)
|
||||
|
||||
dsm.information = mock_dsm_information()
|
||||
dsm.network.update = AsyncMock(return_value=True)
|
||||
dsm.surveillance_station.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.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.typing import ClientSessionGenerator, WebSocketGenerator
|
||||
@ -99,7 +100,7 @@ def mock_dsm_with_filestation():
|
||||
volumes_ids=["volume_1"],
|
||||
update=AsyncMock(return_value=True),
|
||||
)
|
||||
dsm.information = Mock(serial=SERIAL)
|
||||
dsm.information = mock_dsm_information()
|
||||
dsm.file = AsyncMock(
|
||||
get_shared_folders=AsyncMock(
|
||||
return_value=[
|
||||
@ -147,12 +148,12 @@ def mock_dsm_without_filestation():
|
||||
dsm.upgrade.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.information = mock_dsm_information()
|
||||
dsm.storage = Mock(
|
||||
disks_ids=["sda", "sdb", "sdc"],
|
||||
volumes_ids=["volume_1"],
|
||||
update=AsyncMock(return_value=True),
|
||||
)
|
||||
dsm.information = Mock(serial=SERIAL)
|
||||
dsm.file = None
|
||||
|
||||
yield dsm
|
||||
|
@ -40,6 +40,7 @@ from homeassistant.helpers.service_info.ssdp import (
|
||||
)
|
||||
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
|
||||
|
||||
from .common import mock_dsm_information
|
||||
from .consts import (
|
||||
DEVICE_TOKEN,
|
||||
HOST,
|
||||
@ -72,7 +73,7 @@ def mock_controller_service():
|
||||
volumes_ids=["volume_1"],
|
||||
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))
|
||||
yield dsm
|
||||
|
||||
@ -95,7 +96,7 @@ def mock_controller_service_2sa():
|
||||
volumes_ids=["volume_1"],
|
||||
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))
|
||||
yield dsm
|
||||
|
||||
@ -116,7 +117,7 @@ def mock_controller_service_vdsm():
|
||||
volumes_ids=["volume_1"],
|
||||
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))
|
||||
yield dsm
|
||||
|
||||
@ -137,7 +138,7 @@ def mock_controller_service_with_filestation():
|
||||
volumes_ids=["volume_1"],
|
||||
update=AsyncMock(return_value=True),
|
||||
)
|
||||
dsm.information = Mock(serial=SERIAL)
|
||||
dsm.information = mock_dsm_information()
|
||||
dsm.file = AsyncMock(
|
||||
get_shared_folders=AsyncMock(
|
||||
return_value=[
|
||||
@ -170,7 +171,7 @@ def mock_controller_service_failed():
|
||||
volumes_ids=[],
|
||||
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))
|
||||
yield dsm
|
||||
|
||||
|
@ -33,6 +33,7 @@ from homeassistant.const import (
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.util.aiohttp import MockRequest
|
||||
|
||||
from .common import mock_dsm_information
|
||||
from .consts import HOST, MACS, PASSWORD, PORT, USE_SSL, USERNAME
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
@ -44,6 +45,7 @@ def dsm_with_photos() -> MagicMock:
|
||||
dsm = MagicMock()
|
||||
dsm.login = AsyncMock(return_value=True)
|
||||
dsm.update = AsyncMock(return_value=True)
|
||||
dsm.information = mock_dsm_information()
|
||||
dsm.network.update = AsyncMock(return_value=True)
|
||||
dsm.surveillance_station.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.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.components.repairs import process_repair_fix_flow, start_repair_fix_flow
|
||||
@ -48,7 +49,7 @@ def mock_dsm_with_filestation():
|
||||
volumes_ids=["volume_1"],
|
||||
update=AsyncMock(return_value=True),
|
||||
)
|
||||
dsm.information = Mock(serial=SERIAL)
|
||||
dsm.information = mock_dsm_information()
|
||||
dsm.file = AsyncMock(
|
||||
get_shared_folders=AsyncMock(
|
||||
return_value=[
|
||||
|
Loading…
x
Reference in New Issue
Block a user