mirror of
https://github.com/home-assistant/supervisor.git
synced 2026-07-13 16:43:03 +01:00
91625db2b1
* 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>
146 lines
5.4 KiB
Python
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
|