OS latest version set from upgrade path

This commit is contained in:
Mike Degatano 2022-05-10 18:13:11 -04:00
parent 567806cd14
commit 0548afdb61
2 changed files with 32 additions and 0 deletions

View File

@ -243,6 +243,15 @@ class Updater(FileConfiguration, CoreSysAttributes):
self._data[ATTR_OTA] = data["ota"]
if version := data["hassos"].get(self.sys_os.board):
events.append("os")
upgrade_map = data.get("hassos-upgrade", {})
if last_in_major := upgrade_map.get(str(self.sys_os.version.major)):
if self.sys_os.version != AwesomeVersion(last_in_major):
version = last_in_major
elif last_in_next_major := upgrade_map.get(
str(int(self.sys_os.version.major) + 1)
):
version = last_in_next_major
self._data[ATTR_HASSOS] = AwesomeVersion(version)
else:
_LOGGER.warning(

View File

@ -1,5 +1,8 @@
"""Test updater files."""
from unittest.mock import patch
from awesomeversion import AwesomeVersion
import pytest
from supervisor.coresys import CoreSys
@ -48,3 +51,23 @@ async def test_fetch_versions(coresys: CoreSys) -> None:
assert coresys.updater.image_multicast == data["images"]["multicast"].format(
arch=coresys.arch.supervisor
)
@pytest.mark.parametrize(
"version, expected",
[
("3.1", "3.13"),
("4.5", "4.20"),
("5.0", "5.13"),
("6.4", "6.6"),
("4.20", "5.13"),
],
)
async def test_os_update_path(coresys: CoreSys, version: str, expected: str):
"""Test OS upgrade path across major versions."""
coresys.os._board = "rpi4" # pylint: disable=protected-access
coresys.os._version = AwesomeVersion(version) # pylint: disable=protected-access
with patch.object(type(coresys.security), "verify_own_content"):
await coresys.updater.fetch_data()
assert coresys.updater.version_hassos == AwesomeVersion(expected)