Mock sockets in the network integration tests (#55594)
This commit is contained in:
parent
2e5c1236f9
commit
363320eedb
1 changed files with 31 additions and 19 deletions
|
@ -1,5 +1,5 @@
|
||||||
"""Test the Network Configuration."""
|
"""Test the Network Configuration."""
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import MagicMock, Mock, patch
|
||||||
|
|
||||||
import ifaddr
|
import ifaddr
|
||||||
|
|
||||||
|
@ -17,6 +17,18 @@ _NO_LOOPBACK_IPADDR = "192.168.1.5"
|
||||||
_LOOPBACK_IPADDR = "127.0.0.1"
|
_LOOPBACK_IPADDR = "127.0.0.1"
|
||||||
|
|
||||||
|
|
||||||
|
def _mock_socket(sockname):
|
||||||
|
mock_socket = MagicMock()
|
||||||
|
mock_socket.getsockname = Mock(return_value=sockname)
|
||||||
|
return mock_socket
|
||||||
|
|
||||||
|
|
||||||
|
def _mock_socket_exception(exc):
|
||||||
|
mock_socket = MagicMock()
|
||||||
|
mock_socket.getsockname = Mock(side_effect=exc)
|
||||||
|
return mock_socket
|
||||||
|
|
||||||
|
|
||||||
def _generate_mock_adapters():
|
def _generate_mock_adapters():
|
||||||
mock_lo0 = Mock(spec=ifaddr.Adapter)
|
mock_lo0 = Mock(spec=ifaddr.Adapter)
|
||||||
mock_lo0.nice_name = "lo0"
|
mock_lo0.nice_name = "lo0"
|
||||||
|
@ -40,8 +52,8 @@ def _generate_mock_adapters():
|
||||||
async def test_async_detect_interfaces_setting_non_loopback_route(hass, hass_storage):
|
async def test_async_detect_interfaces_setting_non_loopback_route(hass, hass_storage):
|
||||||
"""Test without default interface config and the route returns a non-loopback address."""
|
"""Test without default interface config and the route returns a non-loopback address."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=[_NO_LOOPBACK_IPADDR],
|
return_value=_mock_socket([_NO_LOOPBACK_IPADDR]),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
|
@ -102,8 +114,8 @@ async def test_async_detect_interfaces_setting_non_loopback_route(hass, hass_sto
|
||||||
async def test_async_detect_interfaces_setting_loopback_route(hass, hass_storage):
|
async def test_async_detect_interfaces_setting_loopback_route(hass, hass_storage):
|
||||||
"""Test without default interface config and the route returns a loopback address."""
|
"""Test without default interface config and the route returns a loopback address."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=[_LOOPBACK_IPADDR],
|
return_value=_mock_socket([_LOOPBACK_IPADDR]),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
|
@ -163,8 +175,8 @@ async def test_async_detect_interfaces_setting_loopback_route(hass, hass_storage
|
||||||
async def test_async_detect_interfaces_setting_empty_route(hass, hass_storage):
|
async def test_async_detect_interfaces_setting_empty_route(hass, hass_storage):
|
||||||
"""Test without default interface config and the route returns nothing."""
|
"""Test without default interface config and the route returns nothing."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=[],
|
return_value=_mock_socket([]),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
|
@ -224,8 +236,8 @@ async def test_async_detect_interfaces_setting_empty_route(hass, hass_storage):
|
||||||
async def test_async_detect_interfaces_setting_exception(hass, hass_storage):
|
async def test_async_detect_interfaces_setting_exception(hass, hass_storage):
|
||||||
"""Test without default interface config and the route throws an exception."""
|
"""Test without default interface config and the route throws an exception."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
side_effect=AttributeError,
|
return_value=_mock_socket_exception(AttributeError),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
|
@ -290,8 +302,8 @@ async def test_interfaces_configured_from_storage(hass, hass_storage):
|
||||||
"data": {ATTR_CONFIGURED_ADAPTERS: ["eth0", "eth1", "vtun0"]},
|
"data": {ATTR_CONFIGURED_ADAPTERS: ["eth0", "eth1", "vtun0"]},
|
||||||
}
|
}
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=[_NO_LOOPBACK_IPADDR],
|
return_value=_mock_socket([_NO_LOOPBACK_IPADDR]),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
|
@ -359,8 +371,8 @@ async def test_interfaces_configured_from_storage_websocket_update(
|
||||||
"data": {ATTR_CONFIGURED_ADAPTERS: ["eth0", "eth1", "vtun0"]},
|
"data": {ATTR_CONFIGURED_ADAPTERS: ["eth0", "eth1", "vtun0"]},
|
||||||
}
|
}
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=[_NO_LOOPBACK_IPADDR],
|
return_value=_mock_socket([_NO_LOOPBACK_IPADDR]),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
|
@ -491,8 +503,8 @@ async def test_async_get_source_ip_matching_interface(hass, hass_storage):
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=["192.168.1.5"],
|
return_value=_mock_socket(["192.168.1.5"]),
|
||||||
):
|
):
|
||||||
assert await async_setup_component(hass, network.DOMAIN, {network.DOMAIN: {}})
|
assert await async_setup_component(hass, network.DOMAIN, {network.DOMAIN: {}})
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -512,8 +524,8 @@ async def test_async_get_source_ip_interface_not_match(hass, hass_storage):
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=["192.168.1.5"],
|
return_value=_mock_socket(["192.168.1.5"]),
|
||||||
):
|
):
|
||||||
assert await async_setup_component(hass, network.DOMAIN, {network.DOMAIN: {}})
|
assert await async_setup_component(hass, network.DOMAIN, {network.DOMAIN: {}})
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -533,8 +545,8 @@ async def test_async_get_source_ip_cannot_determine_target(hass, hass_storage):
|
||||||
"homeassistant.components.network.util.ifaddr.get_adapters",
|
"homeassistant.components.network.util.ifaddr.get_adapters",
|
||||||
return_value=_generate_mock_adapters(),
|
return_value=_generate_mock_adapters(),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.network.util.socket.socket.getsockname",
|
"homeassistant.components.network.util.socket.socket",
|
||||||
return_value=[None],
|
return_value=_mock_socket([None]),
|
||||||
):
|
):
|
||||||
assert await async_setup_component(hass, network.DOMAIN, {network.DOMAIN: {}})
|
assert await async_setup_component(hass, network.DOMAIN, {network.DOMAIN: {}})
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
Loading…
Add table
Reference in a new issue