summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2022-04-18 15:19:13 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2022-04-18 15:20:12 +0300
commitff92aa2e068c52fd5ebb8850a2fddbb1a3838879 (patch)
treec84db120feae23cfbc5b000dab861f12a156207d /tests
parent2bf02a030de624ffd001f88428b68dee451d31e8 (diff)
downloadapscheduler-ff92aa2e068c52fd5ebb8850a2fddbb1a3838879.tar.gz
Fixed ValueError in memory store
This occurred when two schedules were released simultaneously, with one being finished and one still running. Fixes #616.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_datastores.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/test_datastores.py b/tests/test_datastores.py
index 0b484f1..02efc08 100644
--- a/tests/test_datastores.py
+++ b/tests/test_datastores.py
@@ -304,6 +304,23 @@ class TestAsyncStores:
assert not events
+ async def test_release_schedule_two_identical_fire_times(self, datastore: AsyncDataStore) -> None:
+ """Regression test for #616."""
+ async with datastore:
+ for i in range(1, 3):
+ trigger = DateTrigger(datetime(2020, 9, 13, tzinfo=timezone.utc))
+ schedule = Schedule(id=f's{i}', task_id='task1', trigger=trigger)
+ schedule.next_fire_time = trigger.next()
+ await datastore.add_schedule(schedule, ConflictPolicy.exception)
+
+ schedules = await datastore.acquire_schedules('foo', 3)
+ schedules[0].next_fire_time = None
+ await datastore.release_schedules('foo', schedules)
+
+ remaining = await datastore.get_schedules({s.id for s in schedules})
+ assert len(remaining) == 1
+ assert remaining[0].id == schedules[1].id
+
async def test_acquire_schedules_lock_timeout(
self, datastore: AsyncDataStore, schedules: list[Schedule], freezer) -> None:
"""