Mock sockets in the network integration tests (#55594)

This commit is contained in:
J. Nick Koston 2021-09-02 13:44:42 -05:00 committed by GitHub
parent 2e5c1236f9
commit 363320eedb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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()