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:
Michael 2025-02-23 13:27:14 +01:00 committed by GitHub
parent f7a6d163bb
commit 4ca39636e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 48 additions and 12 deletions

View File

@ -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()

View 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),
)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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=[