Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions aiohasupervisor/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
IPv4Config,
IPv6,
IPv6Config,
MulticastDnsMode,
NetworkInfo,
NetworkInterface,
NetworkInterfaceConfig,
Expand Down Expand Up @@ -235,6 +236,7 @@
"MountUsage",
"MountsInfo",
"MountsOptions",
"MulticastDnsMode",
"NFSMountRequest",
"NFSMountResponse",
"NetworkInfo",
Expand Down
15 changes: 15 additions & 0 deletions aiohasupervisor/models/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@ class AuthMethod(StrEnum):
WPA_PSK = "wpa-psk"


class MulticastDnsMode(StrEnum):
"""Multicast DNS working mode."""

DEFAULT = "default"
OFF = "off"
RESOLVE = "resolve"
ANNOUNCE = "announce"


# --- OBJECTS ----


Expand Down Expand Up @@ -110,6 +119,8 @@ class NetworkInterface(ResponseData):
ipv6: IPv6
wifi: Wifi | None
vlan: Vlan | None
mdns: MulticastDnsMode
llmnr: MulticastDnsMode


@dataclass(frozen=True, slots=True)
Expand Down Expand Up @@ -169,6 +180,8 @@ class NetworkInterfaceConfig(Options):
ipv4: IPv4Config | None = None
ipv6: IPv6Config | None = None
wifi: WifiConfig | None = None
mdns: MulticastDnsMode | None = None
llmnr: MulticastDnsMode | None = None
enabled: bool | None = None


Expand Down Expand Up @@ -196,3 +209,5 @@ class VlanConfig(Options):

ipv4: IPv4Config | None = None
ipv6: IPv6Config | None = None
mdns: MulticastDnsMode | None = None
llmnr: MulticastDnsMode | None = None
4 changes: 3 additions & 1 deletion tests/fixtures/network_info.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@
"ready": true
},
"wifi": null,
"vlan": null
"vlan": null,
"mdns": "default",
"llmnr": "default"
}
],
"docker": {
Expand Down
4 changes: 3 additions & 1 deletion tests/fixtures/network_interface_info.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
"ready": true
},
"wifi": null,
"vlan": null
"vlan": null,
"mdns": "announce",
"llmnr": "announce"
}
}
29 changes: 25 additions & 4 deletions tests/test_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from aiohasupervisor.models import (
InterfaceMethod,
IPv4Config,
MulticastDnsMode,
NetworkInterfaceConfig,
VlanConfig,
)
Expand Down Expand Up @@ -45,6 +46,8 @@ async def test_network_info(
assert result.interfaces[0].ipv6.gateway is None
assert result.interfaces[0].wifi is None
assert result.interfaces[0].vlan is None
assert result.interfaces[0].mdns is MulticastDnsMode.DEFAULT
assert result.interfaces[0].llmnr is MulticastDnsMode.DEFAULT

assert result.docker.interface == "hassio"
assert result.docker.address.compressed == "172.30.32.0/23"
Expand Down Expand Up @@ -89,6 +92,8 @@ async def test_network_interface_info(
assert result.ipv6.gateway is None
assert result.wifi is None
assert result.vlan is None
assert result.mdns is MulticastDnsMode.ANNOUNCE
assert result.llmnr is MulticastDnsMode.ANNOUNCE


async def test_network_update_interface(
Expand All @@ -102,13 +107,25 @@ async def test_network_update_interface(
address=[IPv4Interface("192.168.1.2/24")],
gateway=IPv4Address("192.168.1.1"),
nameservers=[IPv4Address("192.168.1.1")],
)
),
mdns=MulticastDnsMode.OFF,
)
assert (
await supervisor_client.network.update_interface("end0", config=config) is None
)
assert responses.requests.keys() == {
("POST", URL(f"{SUPERVISOR_URL}/network/interface/end0/update"))

request_key = ("POST", URL(f"{SUPERVISOR_URL}/network/interface/end0/update"))
assert responses.requests.keys() == {request_key}

assert len(responses.requests[request_key]) == 1
assert responses.requests[request_key][0].kwargs["json"] == {
"ipv4": {
"address": ["192.168.1.2/24"],
"gateway": "192.168.1.1",
"method": "static",
"nameservers": ["192.168.1.1"],
},
"mdns": "off",
}


Expand All @@ -132,7 +149,11 @@ async def test_network_access_points(

@pytest.mark.parametrize(
"config",
[None, NetworkInterfaceConfig(ipv4=IPv4Config(method=InterfaceMethod.AUTO))],
[
None,
NetworkInterfaceConfig(ipv4=IPv4Config(method=InterfaceMethod.AUTO)),
NetworkInterfaceConfig(mdns=MulticastDnsMode.OFF),
],
)
async def test_network_save_vlan(
responses: aioresponses,
Expand Down