summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2021-09-13 01:07:08 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2021-09-13 01:07:44 +0300
commit8b68b6c5d1c63faae1ba3769b6475b396328e3a3 (patch)
tree2a172cf3bed738b4ba969cf08c86f7a8e91150f8 /tests
parent200c5713193c011e5b230c3c20afe31f261c8291 (diff)
downloadapscheduler-8b68b6c5d1c63faae1ba3769b6475b396328e3a3.tar.gz
Added scheduler methods for creating jobs directly w/o schedules
Diffstat (limited to 'tests')
-rw-r--r--tests/test_schedulers.py85
-rw-r--r--tests/test_workers.py18
2 files changed, 89 insertions, 14 deletions
diff --git a/tests/test_schedulers.py b/tests/test_schedulers.py
index 6a45b8b..5f1a7df 100644
--- a/tests/test_schedulers.py
+++ b/tests/test_schedulers.py
@@ -1,12 +1,15 @@
import threading
+import time
from datetime import datetime, timezone
import anyio
import pytest
from anyio import fail_after
+from apscheduler.enums import JobOutcome
from apscheduler.events import (
Event, JobAdded, ScheduleAdded, ScheduleRemoved, SchedulerStarted, SchedulerStopped, TaskAdded)
+from apscheduler.exceptions import JobLookupError
from apscheduler.schedulers.async_ import AsyncScheduler
from apscheduler.schedulers.sync import Scheduler
from apscheduler.triggers.date import DateTrigger
@@ -14,12 +17,20 @@ from apscheduler.triggers.date import DateTrigger
pytestmark = pytest.mark.anyio
-async def dummy_async_job():
- return 'returnvalue'
+async def dummy_async_job(delay: float = 0, fail: bool = False) -> str:
+ await anyio.sleep(delay)
+ if fail:
+ raise RuntimeError('failing as requested')
+ else:
+ return 'returnvalue'
-def dummy_sync_job():
- return 'returnvalue'
+def dummy_sync_job(delay: float = 0, fail: bool = False) -> str:
+ time.sleep(delay)
+ if fail:
+ raise RuntimeError('failing as requested')
+ else:
+ return 'returnvalue'
class TestAsyncScheduler:
@@ -72,6 +83,39 @@ class TestAsyncScheduler:
# There should be no more events on the list
assert not received_events
+ async def test_get_job_result_success(self) -> None:
+ async with AsyncScheduler() as scheduler:
+ job_id = await scheduler.add_job(dummy_async_job, kwargs={'delay': 0.2})
+ result = await scheduler.get_job_result(job_id)
+ assert result.job_id == job_id
+ assert result.outcome is JobOutcome.success
+ assert result.return_value == 'returnvalue'
+
+ async def test_get_job_result_error(self) -> None:
+ async with AsyncScheduler() as scheduler:
+ job_id = await scheduler.add_job(dummy_async_job, kwargs={'delay': 0.2, 'fail': True})
+ result = await scheduler.get_job_result(job_id)
+ assert result.job_id == job_id
+ assert result.outcome is JobOutcome.error
+ assert isinstance(result.exception, RuntimeError)
+ assert str(result.exception) == 'failing as requested'
+
+ async def test_get_job_result_nowait_not_yet_ready(self) -> None:
+ async with AsyncScheduler() as scheduler:
+ job_id = await scheduler.add_job(dummy_async_job, kwargs={'delay': 0.2})
+ with pytest.raises(JobLookupError):
+ await scheduler.get_job_result(job_id, wait=False)
+
+ async def test_run_job_success(self) -> None:
+ async with AsyncScheduler() as scheduler:
+ return_value = await scheduler.run_job(dummy_async_job)
+ assert return_value == 'returnvalue'
+
+ async def test_run_job_failure(self) -> None:
+ async with AsyncScheduler() as scheduler:
+ with pytest.raises(RuntimeError, match='failing as requested'):
+ await scheduler.run_job(dummy_async_job, kwargs={'fail': True})
+
class TestSyncScheduler:
def test_schedule_job(self):
@@ -102,7 +146,6 @@ class TestSyncScheduler:
received_event = received_events.pop(0)
assert isinstance(received_event, ScheduleAdded)
assert received_event.schedule_id == 'foo'
- # assert received_event.task_id == 'task_id'
# Then that schedule was processed and a job was added for it
received_event = received_events.pop(0)
@@ -121,3 +164,35 @@ class TestSyncScheduler:
# There should be no more events on the list
assert not received_events
+
+ def test_get_job_result(self) -> None:
+ with Scheduler() as scheduler:
+ job_id = scheduler.add_job(dummy_sync_job)
+ result = scheduler.get_job_result(job_id)
+ assert result.outcome is JobOutcome.success
+ assert result.return_value == 'returnvalue'
+
+ def test_get_job_result_error(self) -> None:
+ with Scheduler() as scheduler:
+ job_id = scheduler.add_job(dummy_sync_job, kwargs={'delay': 0.2, 'fail': True})
+ result = scheduler.get_job_result(job_id)
+ assert result.job_id == job_id
+ assert result.outcome is JobOutcome.error
+ assert isinstance(result.exception, RuntimeError)
+ assert str(result.exception) == 'failing as requested'
+
+ def test_get_job_result_nowait_not_yet_ready(self) -> None:
+ with Scheduler() as scheduler:
+ job_id = scheduler.add_job(dummy_sync_job, kwargs={'delay': 0.2})
+ with pytest.raises(JobLookupError):
+ scheduler.get_job_result(job_id, wait=False)
+
+ def test_run_job_success(self) -> None:
+ with Scheduler() as scheduler:
+ return_value = scheduler.run_job(dummy_sync_job)
+ assert return_value == 'returnvalue'
+
+ def test_run_job_failure(self) -> None:
+ with Scheduler() as scheduler:
+ with pytest.raises(RuntimeError, match='failing as requested'):
+ scheduler.run_job(dummy_sync_job, kwargs={'fail': True})
diff --git a/tests/test_workers.py b/tests/test_workers.py
index 74a018c..872cf34 100644
--- a/tests/test_workers.py
+++ b/tests/test_workers.py
@@ -10,7 +10,7 @@ from apscheduler.abc import Job
from apscheduler.datastores.memory import MemoryDataStore
from apscheduler.enums import JobOutcome
from apscheduler.events import (
- Event, JobAdded, JobEnded, JobStarted, TaskAdded, WorkerStarted, WorkerStopped)
+ Event, JobAcquired, JobAdded, JobReleased, TaskAdded, WorkerStarted, WorkerStopped)
from apscheduler.structures import Task
from apscheduler.workers.async_ import AsyncWorker
from apscheduler.workers.sync import Worker
@@ -75,7 +75,7 @@ class TestAsyncWorker:
# Then the job was started
received_event = received_events.pop(0)
- assert isinstance(received_event, JobStarted)
+ assert isinstance(received_event, JobAcquired)
assert received_event.job_id == job.id
assert received_event.task_id == 'task_id'
assert received_event.schedule_id is None
@@ -83,11 +83,11 @@ class TestAsyncWorker:
received_event = received_events.pop(0)
if fail:
# Then the job failed
- assert isinstance(received_event, JobEnded)
+ assert isinstance(received_event, JobReleased)
assert received_event.outcome is JobOutcome.error
else:
# Then the job finished successfully
- assert isinstance(received_event, JobEnded)
+ assert isinstance(received_event, JobReleased)
assert received_event.outcome is JobOutcome.success
# Finally, the worker was stopped
@@ -136,7 +136,7 @@ class TestAsyncWorker:
# Then the deadline was missed
received_event = received_events.pop(0)
- assert isinstance(received_event, JobEnded)
+ assert isinstance(received_event, JobReleased)
assert received_event.outcome is JobOutcome.missed_start_deadline
assert received_event.job_id == job.id
assert received_event.task_id == 'task_id'
@@ -187,7 +187,7 @@ class TestSyncWorker:
# Then the job was started
received_event = received_events.pop(0)
- assert isinstance(received_event, JobStarted)
+ assert isinstance(received_event, JobAcquired)
assert received_event.job_id == job.id
assert received_event.task_id == 'task_id'
assert received_event.schedule_id is None
@@ -195,11 +195,11 @@ class TestSyncWorker:
received_event = received_events.pop(0)
if fail:
# Then the job failed
- assert isinstance(received_event, JobEnded)
+ assert isinstance(received_event, JobReleased)
assert received_event.outcome is JobOutcome.error
else:
# Then the job finished successfully
- assert isinstance(received_event, JobEnded)
+ assert isinstance(received_event, JobReleased)
assert received_event.outcome is JobOutcome.success
# Finally, the worker was stopped
@@ -247,7 +247,7 @@ class TestSyncWorker:
# Then the deadline was missed
received_event = received_events.pop(0)
- assert isinstance(received_event, JobEnded)
+ assert isinstance(received_event, JobReleased)
assert received_event.outcome is JobOutcome.missed_start_deadline
assert received_event.job_id == job.id
assert received_event.task_id == 'task_id'