mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-11-09 02:49:43 +00:00
Network: abstract dbus and supervisor - ipv6/wifi/vlan (#2217)
* Abstract code between dbus - supervisor * cleanup v2 * fix address vs interface * fix API calls * Fix methodnames * add vlan type * add vlan support * Fix tests * Add wifi support * more OOO * fix typing import * typing part 2 * Fix profile * fix test payload * ignore powersafe * support privancy * fix property * Fix tests * full support all API * Fix all * more robust * Update supervisor/dbus/network/connection.py Co-authored-by: Joakim Sørensen <joasoe@gmail.com> * Fix gateway * fix empty gateway * Allow no ipv6 or ipv4 kernel support * Exclude device drivers * Add wifi * Use loop on api * refactory p1 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p2 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p3 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p4 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p5 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p6 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p7 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p8 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * Fix lint * update sup p1 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * update sup p2 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * fix tests Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * fix logging Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * improve mock handling Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * add fixtures Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * fix tests * better testing * Add more tests * Fix API test * Add test for vlan payload * Support variation * Fix doc string * support remove & wifi scan * make sure we ignore local-link on ipv6 * remove privancy - add vlan * Fix tests * fix isort * Fixture dbus by commands * Add dnsmanager fixture * expose commands called by dbus * Add wifi tests * Update supervisor/plugins/dns.py Co-authored-by: Joakim Sørensen <joasoe@gmail.com> * Address comments & fix tests * change url to be closer on others Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
"""Test NetworkInterface API."""
|
||||
"""Test NetwrokInterface API."""
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from supervisor.const import DOCKER_NETWORK, DOCKER_NETWORK_MASK
|
||||
|
||||
from tests.const import TEST_INTERFACE
|
||||
from tests.const import TEST_INTERFACE, TEST_INTERFACE_WLAN
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -11,7 +13,9 @@ async def test_api_network_info(api_client, coresys):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.get("/network/info")
|
||||
result = await resp.json()
|
||||
assert TEST_INTERFACE in result["data"]["interfaces"]
|
||||
assert TEST_INTERFACE in (
|
||||
inet["interface"] for inet in result["data"]["interfaces"]
|
||||
)
|
||||
|
||||
assert result["data"]["docker"]["interface"] == DOCKER_NETWORK
|
||||
assert result["data"]["docker"]["address"] == str(DOCKER_NETWORK_MASK)
|
||||
@@ -24,7 +28,21 @@ async def test_api_network_interface_info(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.get(f"/network/interface/{TEST_INTERFACE}/info")
|
||||
result = await resp.json()
|
||||
assert result["data"]["ip_address"] == "192.168.2.148/24"
|
||||
assert result["data"]["ipv4"]["address"][-1] == "192.168.2.148/24"
|
||||
assert result["data"]["ipv4"]["gateway"] == "192.168.2.1"
|
||||
assert result["data"]["ipv4"]["nameservers"] == ["192.168.2.2"]
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][0] == "2a03:169:3df5:0:6be9:2588:b26a:a679/64"
|
||||
)
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][1]
|
||||
== "fd14:949b:c9cc:0:522b:8108:8ff8:cca3/64"
|
||||
)
|
||||
assert result["data"]["ipv6"]["gateway"] == "fe80::da58:d7ff:fe00:9c69"
|
||||
assert result["data"]["ipv6"]["nameservers"] == [
|
||||
"2001:1620:2777:1::10",
|
||||
"2001:1620:2777:2::20",
|
||||
]
|
||||
assert result["data"]["interface"] == TEST_INTERFACE
|
||||
|
||||
|
||||
@@ -33,7 +51,21 @@ async def test_api_network_interface_info_default(api_client):
|
||||
"""Test network manager default api."""
|
||||
resp = await api_client.get("/network/interface/default/info")
|
||||
result = await resp.json()
|
||||
assert result["data"]["ip_address"] == "192.168.2.148/24"
|
||||
assert result["data"]["ipv4"]["address"][-1] == "192.168.2.148/24"
|
||||
assert result["data"]["ipv4"]["gateway"] == "192.168.2.1"
|
||||
assert result["data"]["ipv4"]["nameservers"] == ["192.168.2.2"]
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][0] == "2a03:169:3df5:0:6be9:2588:b26a:a679/64"
|
||||
)
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][1]
|
||||
== "fd14:949b:c9cc:0:522b:8108:8ff8:cca3/64"
|
||||
)
|
||||
assert result["data"]["ipv6"]["gateway"] == "fe80::da58:d7ff:fe00:9c69"
|
||||
assert result["data"]["ipv6"]["nameservers"] == [
|
||||
"2001:1620:2777:1::10",
|
||||
"2001:1620:2777:2::20",
|
||||
]
|
||||
assert result["data"]["interface"] == TEST_INTERFACE
|
||||
|
||||
|
||||
@@ -42,7 +74,14 @@ async def test_api_network_interface_update(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.post(
|
||||
f"/network/interface/{TEST_INTERFACE}/update",
|
||||
json={"method": "static", "dns": ["1.1.1.1"], "address": "192.168.2.148/24"},
|
||||
json={
|
||||
"ipv4": {
|
||||
"method": "static",
|
||||
"nameservers": ["1.1.1.1"],
|
||||
"address": ["192.168.2.148/24"],
|
||||
"gateway": "192.168.1.1",
|
||||
}
|
||||
},
|
||||
)
|
||||
result = await resp.json()
|
||||
assert result["result"] == "ok"
|
||||
@@ -53,7 +92,9 @@ async def test_api_network_interface_info_invalid(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.get("/network/interface/invalid/info")
|
||||
result = await resp.json()
|
||||
assert not result["data"]
|
||||
|
||||
assert result["message"]
|
||||
assert result["result"] == "error"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -68,10 +109,26 @@ async def test_api_network_interface_update_invalid(api_client):
|
||||
assert result["message"] == "You need to supply at least one option to update"
|
||||
|
||||
resp = await api_client.post(
|
||||
f"/network/interface/{TEST_INTERFACE}/update", json={"dns": "1.1.1.1"}
|
||||
f"/network/interface/{TEST_INTERFACE}/update",
|
||||
json={"ipv4": {"nameservers": "1.1.1.1"}},
|
||||
)
|
||||
result = await resp.json()
|
||||
assert (
|
||||
result["message"]
|
||||
== "expected a list for dictionary value @ data['dns']. Got '1.1.1.1'"
|
||||
== "expected a list for dictionary value @ data['ipv4']['nameservers']. Got '1.1.1.1'"
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_wireless_scan(api_client):
|
||||
"""Test network manager api."""
|
||||
with patch("asyncio.sleep", return_value=AsyncMock()):
|
||||
resp = await api_client.get(
|
||||
f"/network/interface/{TEST_INTERFACE_WLAN}/accesspoints"
|
||||
)
|
||||
result = await resp.json()
|
||||
|
||||
assert ["UPC4814466", "VQ@35(55720"] == [
|
||||
ap["ssid"] for ap in result["data"]["accesspoints"]
|
||||
]
|
||||
assert [47, 63] == [ap["signal"] for ap in result["data"]["accesspoints"]]
|
||||
|
||||
Reference in New Issue
Block a user