feat: overhaul video player controller
This commit is contained in:
@@ -127,6 +127,51 @@ class FreshStoreTests(StoreTestCase):
|
||||
7,
|
||||
)
|
||||
|
||||
def test_failed_downloads_receive_expiry_and_cannot_exhaust_slots_forever(self):
|
||||
with self.open_store() as store:
|
||||
for slot in range(1, 11):
|
||||
reservation = store.reserve_download(
|
||||
f"https://example.test/failure-{slot}",
|
||||
None,
|
||||
None,
|
||||
job_id=f"failure-{slot}",
|
||||
)
|
||||
self.assertEqual(reservation.slot, slot)
|
||||
self.assertTrue(
|
||||
store.fail_download(
|
||||
reservation.job_id,
|
||||
slot,
|
||||
reservation.generation,
|
||||
"download failed",
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
store.get_slot(slot).expires_at,
|
||||
self.clock.value + self.config.retention_seconds,
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
store.reserve_download(
|
||||
"https://example.test/temporarily-full",
|
||||
None,
|
||||
None,
|
||||
).status,
|
||||
"queue_full",
|
||||
)
|
||||
|
||||
self.clock.value += self.config.retention_seconds + 1
|
||||
tokens = store.begin_expired_deletions()
|
||||
self.assertEqual([token.slot for token in tokens], list(range(1, 11)))
|
||||
for token in tokens:
|
||||
self.assertTrue(store.finish_delete(token))
|
||||
|
||||
replacement = store.reserve_download(
|
||||
"https://example.test/recovered-capacity",
|
||||
None,
|
||||
None,
|
||||
)
|
||||
self.assertEqual(replacement.slot, 1)
|
||||
|
||||
def test_stale_worker_cannot_overwrite_reused_slot(self):
|
||||
with self.open_store() as store:
|
||||
first = store.reserve_download("https://example.test/one", None, None, job_id="old")
|
||||
|
||||
Reference in New Issue
Block a user