"""Test Zeroconf component setup process.""" from unittest.mock import patch from zeroconf import ServiceInfo, ServiceStateChange from homeassistant.generated import zeroconf as zc_gen from homeassistant.setup import async_setup_component from homeassistant.components import zeroconf def service_update_mock(zeroconf, service, handlers): """Call service update handler.""" handlers[0]( zeroconf, service, '{}.{}'.format('name', service), ServiceStateChange.Added) def get_service_info_mock(service_type, name): """Return service info for get_service_info.""" return ServiceInfo( service_type, name, address=b'\n\x00\x00\x14', port=80, weight=0, priority=0, server='name.local.', properties={b'macaddress': b'ABCDEF012345'}) async def test_setup(hass): """Test configured options for a device are loaded via config entry.""" with patch.object(hass.config_entries, 'flow') as mock_config_flow, \ patch.object(zeroconf, 'ServiceBrowser') as MockServiceBrowser, \ patch.object(zeroconf.Zeroconf, 'get_service_info') as \ mock_get_service_info: MockServiceBrowser.side_effect = service_update_mock mock_get_service_info.side_effect = get_service_info_mock assert await async_setup_component( hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}}) assert len(MockServiceBrowser.mock_calls) == len(zc_gen.ZEROCONF) assert len(mock_config_flow.mock_calls) == len(zc_gen.ZEROCONF) * 2