1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-07-13 16:43:03 +01:00
Files
supervisor/tests/dbus/network/setting/test_generate.py
T
Copilot 91625db2b1 Stop Supervisor from overriding NetworkManager Wi-Fi powersave policy (#6753)
* Initial plan

* Fix wireless profile generation to not force powersave ignore

Agent-Logs-Url: https://github.com/home-assistant/supervisor/sessions/6e2e9288-6d9b-403d-9d71-8d6ea44eb91b

Co-authored-by: agners <34061+agners@users.noreply.github.com>

* Set wireless powersave to default to reset existing profiles

Agent-Logs-Url: https://github.com/home-assistant/supervisor/sessions/4a4a2c09-0cdd-4417-9776-688837b51dcc

Co-authored-by: agners <34061+agners@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: agners <34061+agners@users.noreply.github.com>
2026-04-23 10:06:49 +02:00

146 lines
5.4 KiB
Python

"""Test settings generation from interface."""
from unittest.mock import PropertyMock, patch
from supervisor.dbus.network import NetworkManager
from supervisor.dbus.network.interface import NetworkInterface
from supervisor.dbus.network.setting.generate import get_connection_from_interface
from supervisor.host.configuration import (
Ip6Setting,
IpConfig,
IpSetting,
VlanConfig,
WifiConfig,
)
from supervisor.host.const import (
AuthMethod,
InterfaceMethod,
InterfaceType,
MulticastDnsMode,
WifiMode,
)
from supervisor.host.network import Interface
from tests.const import TEST_INTERFACE_ETH_NAME
async def test_get_connection_from_interface(network_manager: NetworkManager):
"""Test network interface."""
dbus_interface = network_manager.get(TEST_INTERFACE_ETH_NAME)
interface = Interface.from_dbus_interface(dbus_interface)
connection_payload = get_connection_from_interface(interface, network_manager)
assert "connection" in connection_payload
assert "interface-name" not in connection_payload["connection"]
assert connection_payload["connection"]["type"].value == "802-3-ethernet"
assert connection_payload["connection"]["mdns"].value == 2
assert connection_payload["connection"]["llmnr"].value == 2
assert connection_payload["match"]["path"].value == ["platform-ff3f0000.ethernet"]
assert connection_payload["ipv4"]["method"].value == "auto"
assert "address-data" not in connection_payload["ipv4"]
assert connection_payload["ipv6"]["method"].value == "auto"
assert "address-data" not in connection_payload["ipv6"]
async def test_get_connection_no_path(network_manager: NetworkManager):
"""Test network interface without a path."""
dbus_interface = network_manager.get(TEST_INTERFACE_ETH_NAME)
with patch.object(NetworkInterface, "path", new=PropertyMock(return_value=None)):
interface = Interface.from_dbus_interface(dbus_interface)
connection_payload = get_connection_from_interface(interface, network_manager)
assert "connection" in connection_payload
assert "match" not in connection_payload
assert connection_payload["connection"]["interface-name"].value == "eth0"
async def test_generate_from_vlan(network_manager: NetworkManager):
"""Test generate from a vlan interface."""
vlan_interface = Interface(
name="eth0.1",
mac="",
path="",
enabled=True,
connected=True,
primary=False,
type=InterfaceType.VLAN,
ipv4=IpConfig([], None, [], None),
ipv4setting=IpSetting(InterfaceMethod.AUTO, [], None, None, []),
ipv6=IpConfig([], None, [], None),
ipv6setting=Ip6Setting(InterfaceMethod.AUTO, [], None, None, []),
wifi=None,
vlan=VlanConfig(1, "eth0"),
mdns=MulticastDnsMode.RESOLVE,
llmnr=MulticastDnsMode.OFF,
)
connection_payload = get_connection_from_interface(vlan_interface, network_manager)
assert connection_payload["connection"]["id"].value == "Supervisor eth0.1"
assert connection_payload["connection"]["type"].value == "vlan"
assert connection_payload["connection"]["mdns"].value == 1 # resolve
assert connection_payload["connection"]["llmnr"].value == 0 # off
assert "uuid" in connection_payload["connection"]
assert "match" not in connection_payload["connection"]
assert "interface-name" not in connection_payload["connection"]
assert connection_payload["ipv4"]["method"].value == "auto"
assert connection_payload["ipv6"]["addr-gen-mode"].value == 1
assert connection_payload["ipv6"]["ip6-privacy"].value == -1
assert connection_payload["vlan"]["id"].value == 1
assert (
connection_payload["vlan"]["parent"].value
== "0c23631e-2118-355c-bbb0-8943229cb0d6"
)
# Ensure value remains if parent interface is already a UUID
vlan_interface.vlan.interface = "0c23631e-2118-355c-bbb0-8943229cb0d6"
connection_payload = get_connection_from_interface(vlan_interface, network_manager)
assert (
connection_payload["vlan"]["parent"].value
== "0c23631e-2118-355c-bbb0-8943229cb0d6"
)
async def test_generate_from_wireless(network_manager: NetworkManager):
"""Test generate from a wireless interface."""
wireless_interface = Interface(
name="wlan0",
mac="",
path="",
enabled=True,
connected=True,
primary=False,
type=InterfaceType.WIRELESS,
ipv4=IpConfig([], None, [], None),
ipv4setting=IpSetting(InterfaceMethod.AUTO, [], None, None, []),
ipv6=IpConfig([], None, [], None),
ipv6setting=Ip6Setting(InterfaceMethod.AUTO, [], None, None, []),
wifi=WifiConfig(
mode=WifiMode.INFRASTRUCTURE,
ssid="TestSSID",
auth=AuthMethod.OPEN,
psk=None,
signal=None,
),
vlan=None,
mdns=MulticastDnsMode.RESOLVE,
llmnr=MulticastDnsMode.OFF,
)
connection_payload = get_connection_from_interface(
wireless_interface, network_manager
)
assert connection_payload["connection"]["type"].value == "802-11-wireless"
assert (
connection_payload["802-11-wireless"]["assigned-mac-address"].value
== "preserve"
)
assert connection_payload["802-11-wireless"]["mode"].value == "infrastructure"
assert connection_payload["802-11-wireless"]["ssid"].value == b"TestSSID"
assert connection_payload["802-11-wireless"]["powersave"].value == 0