Reconcile delayed frame sync before scheduled writes
This commit is contained in:
@@ -152,3 +152,55 @@ def test_offline(service):
|
||||
id = submit(service)
|
||||
service.process_one()
|
||||
assert service.operation(id)["error"]["code"] == "DEVICE_OFFLINE"
|
||||
|
||||
|
||||
def test_late_sync_resolves_unknown_without_upload_retry(service, monkeypatch):
|
||||
id = submit(service)
|
||||
service.process_one()
|
||||
service.update(id, "UNKNOWN")
|
||||
driver = service.registry.get("living-room")
|
||||
calls = []
|
||||
device = driver.device
|
||||
monkeypatch.setattr(driver, "device", lambda **kw: calls.append(kw) or device(**kw))
|
||||
service.sync()
|
||||
assert service.operation(id)["status"] == "COMPLETED"
|
||||
assert driver.client.uploads == 1
|
||||
assert calls == [{"refresh": True}]
|
||||
assert not service.blocked("living-room")
|
||||
assert service.db.one(
|
||||
"SELECT confirmed_at FROM managed_cloud_uploads WHERE operation_id=?", (id,)
|
||||
)["confirmed_at"]
|
||||
|
||||
|
||||
def test_unknown_wrong_target_stays_locked_and_queries_at_most_once_per_minute(
|
||||
service, monkeypatch
|
||||
):
|
||||
id = submit(service)
|
||||
service.process_one()
|
||||
service.update(id, "UNKNOWN")
|
||||
driver = service.registry.get("living-room")
|
||||
driver.client.display(1)
|
||||
driver.invalidate()
|
||||
calls = []
|
||||
device = driver.device
|
||||
monkeypatch.setattr(driver, "device", lambda **kw: calls.append(kw) or device(**kw))
|
||||
service.sync()
|
||||
service.sync()
|
||||
assert service.operation(id)["status"] == "UNKNOWN"
|
||||
assert service.blocked("living-room")
|
||||
assert driver.client.uploads == 1
|
||||
assert len(calls) == 1
|
||||
|
||||
|
||||
def test_unknown_matching_image_without_sync_stays_locked(service, monkeypatch):
|
||||
id = submit(service)
|
||||
service.process_one()
|
||||
service.update(id, "UNKNOWN")
|
||||
driver = service.registry.get("living-room")
|
||||
device = driver.device()
|
||||
device.current_content.synced = False
|
||||
monkeypatch.setattr(driver, "device", lambda **kw: device)
|
||||
service.sync()
|
||||
assert service.operation(id)["status"] == "UNKNOWN"
|
||||
assert service.blocked("living-room")
|
||||
assert driver.client.uploads == 1
|
||||
|
||||
@@ -75,3 +75,21 @@ def test_playlist(app, service):
|
||||
def test_invalid_cron():
|
||||
with pytest.raises(FlowError):
|
||||
next_run(Schedule(type="cron", cron="* * * * * *"))
|
||||
|
||||
|
||||
def test_worker_checks_late_sync_before_due_tasks(app, service, monkeypatch):
|
||||
scheduler = app.state.scheduler
|
||||
calls = []
|
||||
monkeypatch.setattr(service, "sync", lambda: calls.append("sync"))
|
||||
|
||||
def tick():
|
||||
calls.append("tick")
|
||||
scheduler.stop_event.set()
|
||||
|
||||
monkeypatch.setattr(scheduler, "tick", tick)
|
||||
monkeypatch.setattr(service, "expire", lambda: None)
|
||||
monkeypatch.setattr(service.cloud_library, "sweep", lambda: None)
|
||||
monkeypatch.setattr(service.local_retention, "sweep", lambda: None)
|
||||
monkeypatch.setattr(service, "process_one", lambda: False)
|
||||
scheduler.run()
|
||||
assert calls[:2] == ["sync", "tick"]
|
||||
|
||||
Reference in New Issue
Block a user