Fix Proxmox VE storage usage percentage crash on missing used_fraction (#167136)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kevin O'Brien
2026-04-17 17:29:15 +00:00
committed by Franck Nijhof
co-authored by Claude Opus 4.6
parent 190ee49e3a
commit 437f5ef66c
2 changed files with 37 additions and 3 deletions
+5 -1
View File
@@ -426,7 +426,11 @@ STORAGE_SENSORS: tuple[ProxmoxStorageSensorEntityDescription, ...] = (
ProxmoxStorageSensorEntityDescription(
key="storage_used_percentage",
translation_key="storage_used_percentage",
value_fn=lambda data: round(data["used_fraction"] * 100, 1),
value_fn=lambda data: (
round(value * 100, 1)
if (value := data.get("used_fraction")) is not None
else None
),
native_unit_of_measurement=PERCENTAGE,
entity_category=EntityCategory.DIAGNOSTIC,
state_class=SensorStateClass.MEASUREMENT,
+32 -2
View File
@@ -5,13 +5,17 @@ from unittest.mock import MagicMock, patch
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.const import Platform
from homeassistant.const import STATE_UNKNOWN, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import setup_integration
from tests.common import MockConfigEntry, snapshot_platform
from tests.common import (
MockConfigEntry,
async_load_json_array_fixture,
snapshot_platform,
)
@pytest.fixture(autouse=True)
@@ -38,3 +42,29 @@ async def test_all_entities(
snapshot,
mock_config_entry.entry_id,
)
async def test_storage_missing_used_fraction(
hass: HomeAssistant,
mock_proxmox_client: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test storage usage percentage sensor when used_fraction is missing."""
storage_data = await async_load_json_array_fixture(
hass, "nodes/storage.json", "proxmoxve"
)
# Remove used_fraction from all storage entries
storage_without_fraction = [
{key: value for key, value in storage.items() if key != "used_fraction"}
for storage in storage_data
]
mock_proxmox_client._node_mock.storage.get.return_value = storage_without_fraction
with patch(
"homeassistant.components.proxmoxve.PLATFORMS",
[Platform.SENSOR],
):
await setup_integration(hass, mock_config_entry)
state = hass.states.get("sensor.storage_local_storage_usage_percentage")
assert state.state == STATE_UNKNOWN