async def test_dont_send_error_report(time, debug_worker: DebugWorker, config: Config, global_info: GlobalInfo, server: SimulationServer, error_store: ErrorStore): config.override(Setting.SEND_ERROR_REPORTS, False) config.override(Setting.DRIVE_HOST_NAME, "localhost") global_info.failed(Exception()) await debug_worker.doWork() assert error_store.last_error is None
async def test_send_clear(time, debug_worker: DebugWorker, config: Config, global_info: GlobalInfo, server, error_store: ErrorStore): config.override(Setting.SEND_ERROR_REPORTS, True) config.override(Setting.DRIVE_HOST_NAME, "localhost") # Simulate failure global_info.failed(Exception("boom")) await debug_worker.doWork() # And then success global_info.success() time.advance(days=1) await debug_worker.doWork() report = error_store.last_error assert report['report'] == {'duration': '1 day, 0:00:00'}
async def test_publish_for_failure(updater: HaUpdater, server, time: FakeTime, global_info: GlobalInfo, supervisor: SimulatedSupervisor): global_info.success() await updater.update() assert supervisor.getNotification() is None time.advanceDay() global_info.failed(Exception()) await updater.update() assert supervisor.getNotification() is not None time.advanceDay() global_info.failed(Exception()) await updater.update() assert supervisor.getNotification() is not None global_info.success() await updater.update() assert supervisor.getNotification() is None
async def test_init_failure(updater: HaUpdater, global_info: GlobalInfo, time: FakeTime, server, supervisor: SimulatedSupervisor): await updater.update() assert not updater._stale() assert updater._state() == "waiting" global_info.failed(Exception()) assert not updater._stale() assert updater._state() == "backed_up" assert supervisor.getNotification() is None time.advanceDay() assert updater._stale() assert updater._state() == "error" await updater.update() assert supervisor.getNotification() == { 'message': 'The add-on is having trouble making backups and needs attention. Please visit the add-on status page for details.', 'title': 'Home Assistant Google Drive Backup is Having Trouble', 'notification_id': 'backup_broken' }
async def test_send_error_report(time, debug_worker: DebugWorker, config: Config, global_info: GlobalInfo, server, error_store: ErrorStore): config.override(Setting.SEND_ERROR_REPORTS, True) config.override(Setting.DRIVE_HOST_NAME, "localhost") global_info.sync() global_info.success() global_info.sync() global_info.success() global_info.sync() global_info.failed(Exception()) await debug_worker.doWork() report = error_store.last_error assert report['report']['sync_success_count'] == 2 assert report['report']['sync_count'] == 3 assert report['report']['failure_count'] == 1 assert report['report']['sync_last_start'] == time.now().isoformat() assert report['report']['failure_time'] == time.now().isoformat() assert report['report']['error'] == getLogger("test").formatException( Exception())
async def test_only_send_duplicates(time, debug_worker: DebugWorker, config: Config, global_info: GlobalInfo, server, error_store: ErrorStore): config.override(Setting.SEND_ERROR_REPORTS, True) config.override(Setting.DRIVE_HOST_NAME, "localhost") global_info.failed(Exception("boom1")) firstExceptionTime = time.now() await debug_worker.doWork() report = error_store.last_error assert report['report']["error"] == getLogger("test").formatException( Exception("boom1")) assert report['report']["time"] == firstExceptionTime.isoformat() # Same exception shouldn't cause us to send the error report again time.advance(days=1) global_info.failed(Exception("boom1")) await debug_worker.doWork() report = error_store.last_error assert report['report']["error"] == getLogger("test").formatException( Exception("boom1")) assert report['report']["time"] == firstExceptionTime.isoformat() # Btu a new one will send a new report global_info.failed(Exception("boom2")) await debug_worker.doWork() report = error_store.last_error assert report['report']["error"] == getLogger("test").formatException( Exception("boom2")) assert report['report']["time"] == time.now().isoformat()