async def test_arp_ping_timeout(hass, mock_device_registry_devices): """Test arp ping timeout so devices are shown away.""" with patch.object(mikrotik.hub.MikrotikData, "do_arp_ping", return_value=False): await setup_mikrotik_entry(hass, arp_ping=True, force_dhcp=True) # test wired device_2 show as not_home if arp ping times out device_2 = hass.states.get("device_tracker.device_2") assert device_2 assert device_2.state == "not_home"
async def test_device_trackers(hass, legacy_patchable_time): """Test device_trackers created by mikrotik.""" # test devices are added from wireless list only hub = await setup_mikrotik_entry(hass) device_1 = hass.states.get("device_tracker.device_1") assert device_1 is not None assert device_1.state == "home" assert device_1.attributes["ip"] == "0.0.0.1" assert "ip_address" not in device_1.attributes assert device_1.attributes["mac"] == "00:00:00:00:00:01" assert device_1.attributes["host_name"] == "Device_1" assert "mac_address" not in device_1.attributes device_2 = hass.states.get("device_tracker.device_2") assert device_2 is None with patch.object(mikrotik.hub.MikrotikData, "command", new=mock_command): # test device_2 is added after connecting to wireless network WIRELESS_DATA.append(DEVICE_2_WIRELESS) await hub.async_update() await hass.async_block_till_done() device_2 = hass.states.get("device_tracker.device_2") assert device_2 is not None assert device_2.state == "home" assert device_2.attributes["ip"] == "0.0.0.2" assert "ip_address" not in device_2.attributes assert device_2.attributes["mac"] == "00:00:00:00:00:02" assert "mac_address" not in device_2.attributes assert device_2.attributes["host_name"] == "Device_2" # test state remains home if last_seen consider_home_interval del WIRELESS_DATA[1] # device 2 is removed from wireless list hub.api.devices["00:00:00:00:00:02"]._last_seen = dt_util.utcnow() - timedelta( minutes=4 ) await hub.async_update() await hass.async_block_till_done() device_2 = hass.states.get("device_tracker.device_2") assert device_2.state != "not_home" # test state changes to away if last_seen > consider_home_interval hub.api.devices["00:00:00:00:00:02"]._last_seen = dt_util.utcnow() - timedelta( minutes=5 ) await hub.async_update() await hass.async_block_till_done() device_2 = hass.states.get("device_tracker.device_2") assert device_2.state == "not_home"
async def test_arp_ping_success(hass, mock_device_registry_devices): """Test arp ping devices to confirm they are connected.""" with patch.object(mikrotik.hub.MikrotikData, "do_arp_ping", return_value=True): await setup_mikrotik_entry(hass, arp_ping=True, force_dhcp=True) # test wired device_2 show as home if arp ping returns True device_2 = hass.states.get("device_tracker.device_2") assert device_2 assert device_2.state == "home"
async def test_update_failed(hass, mock_device_registry_devices): """Test failing to connect during update.""" await setup_mikrotik_entry(hass) with patch.object(mikrotik.hub.MikrotikData, "command", side_effect=mikrotik.errors.CannotConnect): async_fire_time_changed(hass, utcnow() + timedelta(seconds=10)) await hass.async_block_till_done() device_1 = hass.states.get("device_tracker.device_1") assert device_1.state == STATE_UNAVAILABLE
async def test_device_trackers(hass, mock_device_registry_devices): """Test device_trackers created by mikrotik.""" # test devices are added from wireless list only await setup_mikrotik_entry(hass) device_1 = hass.states.get("device_tracker.device_1") assert device_1 is not None assert device_1.state == "home" assert device_1.attributes["ip"] == "0.0.0.1" assert "ip_address" not in device_1.attributes assert device_1.attributes["mac"] == "00:00:00:00:00:01" assert device_1.attributes["host_name"] == "Device_1" assert "mac_address" not in device_1.attributes device_2 = hass.states.get("device_tracker.device_2") assert device_2 is None with patch.object(mikrotik.hub.MikrotikData, "command", new=mock_command): # test device_2 is added after connecting to wireless network WIRELESS_DATA.append(DEVICE_2_WIRELESS) async_fire_time_changed(hass, utcnow() + timedelta(seconds=10)) await hass.async_block_till_done() device_2 = hass.states.get("device_tracker.device_2") assert device_2 is not None assert device_2.state == "home" assert device_2.attributes["ip"] == "0.0.0.2" assert "ip_address" not in device_2.attributes assert device_2.attributes["mac"] == "00:00:00:00:00:02" assert "mac_address" not in device_2.attributes assert device_2.attributes["host_name"] == "Device_2" # test state remains home if last_seen consider_home_interval del WIRELESS_DATA[1] # device 2 is removed from wireless list with freeze_time(utcnow() + timedelta(minutes=4)): async_fire_time_changed(hass, utcnow() + timedelta(minutes=4)) await hass.async_block_till_done() device_2 = hass.states.get("device_tracker.device_2") assert device_2.state == "home" # test state changes to away if last_seen > consider_home_interval with freeze_time(utcnow() + timedelta(minutes=6)): async_fire_time_changed(hass, utcnow() + timedelta(minutes=6)) await hass.async_block_till_done() device_2 = hass.states.get("device_tracker.device_2") assert device_2.state == "not_home"