def test_create_timer(self, mock_utcnow, mock_event, event_loop): """Test create timer fires correctly.""" hass = MagicMock() now = mock_utcnow() event = mock_event() now.second = 1 mock_utcnow.reset_mock() ha.async_create_timer(hass) assert len(hass.bus.async_listen_once.mock_calls) == 2 start_timer = hass.bus.async_listen_once.mock_calls[1][1][1] event_loop.run_until_complete(start_timer(None)) assert hass.loop.create_task.called timer = hass.loop.create_task.mock_calls[0][1][0] event.is_set.side_effect = False, False, True event_loop.run_until_complete(timer) assert len(mock_utcnow.mock_calls) == 1 assert hass.loop.call_soon.called event_type, event_data = hass.loop.call_soon.mock_calls[0][1][1:] assert ha.EVENT_TIME_CHANGED == event_type assert {ha.ATTR_NOW: now} == event_data stop_timer = hass.bus.async_listen_once.mock_calls[0][1][1] event_loop.run_until_complete(stop_timer(None)) assert event.set.called
def start(self): """Start the instance.""" # Ensure a local API exists to connect with remote if "api" not in self.config.components: if not bootstrap.setup_component(self, "api"): raise HomeAssistantError("Unable to setup local API to receive events") self.state = ha.CoreState.starting ha.async_create_timer(self) self.bus.fire(ha.EVENT_HOMEASSISTANT_START, origin=ha.EventOrigin.remote) # Ensure local HTTP is started self.block_till_done() self.state = ha.CoreState.running time.sleep(0.05) # Setup that events from remote_api get forwarded to local_api # Do this after we are running, otherwise HTTP is not started # or requests are blocked if not connect_remote_events(self.remote_api, self.config.api): raise HomeAssistantError( ("Could not setup event forwarding from api {} to " "local api {}").format( self.remote_api, self.config.api ) )