Skip to content

Commit 55e3dba

Browse files
committed
Migrate tests and add tests to retry_on param
1 parent 984aaba commit 55e3dba

File tree

12 files changed

+230
-240
lines changed

12 files changed

+230
-240
lines changed

kolibri/conftest.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,6 @@
77
TEMP_KOLIBRI_HOME = "./.pytest_kolibri_home"
88

99

10-
@pytest.fixture(scope="session")
11-
def django_db_setup(
12-
request,
13-
django_db_setup,
14-
):
15-
def dispose_sqlalchemy():
16-
from kolibri.core.tasks.main import connection
17-
18-
connection.dispose()
19-
20-
request.addfinalizer(dispose_sqlalchemy)
21-
22-
2310
@pytest.fixture(scope="session", autouse=True)
2411
def global_fixture():
2512
if not os.path.exists(TEMP_KOLIBRI_HOME):

kolibri/core/auth/test/test_auth_tasks.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
from kolibri.core.tasks.exceptions import JobRunning
3838
from kolibri.core.tasks.job import Job
3939
from kolibri.core.tasks.job import State
40-
from kolibri.utils.time_utils import naive_utc_datetime
4140

4241

4342
DUMMY_PASSWORD = "password"
@@ -64,7 +63,7 @@ def fake_job(**kwargs):
6463

6564

6665
class dummy_orm_job_data(object):
67-
scheduled_time = datetime.datetime(year=2023, month=1, day=1, tzinfo=None)
66+
scheduled_time = datetime.datetime(year=2023, month=1, day=1)
6867
repeat = 5
6968
interval = 8600
7069
retry_interval = 5
@@ -701,7 +700,7 @@ def test_enqueue_soud_sync_processing__future__scheduled(
701700
mock_soud.get_time_to_next_attempt.return_value = datetime.timedelta(seconds=30)
702701
mock_job = mock_job_storage.get_orm_job.return_value
703702
mock_job.state = State.QUEUED
704-
mock_job.scheduled_time = naive_utc_datetime(timezone.now())
703+
mock_job.scheduled_time = timezone.now()
705704
enqueue_soud_sync_processing()
706705
mock_task.enqueue_in.assert_not_called()
707706

@@ -714,7 +713,7 @@ def test_enqueue_soud_sync_processing__future__running(
714713
mock_soud.get_time_to_next_attempt.return_value = datetime.timedelta(seconds=1)
715714
mock_job = mock_job_storage.get_orm_job.return_value
716715
mock_job.state = State.RUNNING
717-
mock_job.scheduled_time = naive_utc_datetime(timezone.now())
716+
mock_job.scheduled_time = timezone.now()
718717
enqueue_soud_sync_processing()
719718
mock_task.enqueue_in.assert_not_called()
720719

@@ -727,9 +726,7 @@ def test_enqueue_soud_sync_processing__future__reschedule(
727726
mock_soud.get_time_to_next_attempt.return_value = datetime.timedelta(seconds=10)
728727
mock_job = mock_job_storage.get_orm_job.return_value
729728
mock_job.state = State.QUEUED
730-
mock_job.scheduled_time = naive_utc_datetime(
731-
timezone.now() + datetime.timedelta(seconds=15)
732-
)
729+
mock_job.scheduled_time = timezone.now() + datetime.timedelta(seconds=15)
733730
enqueue_soud_sync_processing()
734731
mock_task.enqueue_in.assert_called_once_with(datetime.timedelta(seconds=10))
735732

@@ -743,9 +740,7 @@ def test_enqueue_soud_sync_processing__completed__enqueue(
743740
mock_job = mock_job_storage.get_orm_job.return_value
744741
mock_job.state = State.COMPLETED
745742
# far in the past
746-
mock_job.scheduled_time = naive_utc_datetime(
747-
timezone.now() - datetime.timedelta(seconds=100)
748-
)
743+
mock_job.scheduled_time = timezone.now() - datetime.timedelta(seconds=100)
749744
enqueue_soud_sync_processing()
750745
mock_task.enqueue_in.assert_called_once_with(datetime.timedelta(seconds=10))
751746

@@ -759,9 +754,7 @@ def test_enqueue_soud_sync_processing__race__already_running(
759754
mock_job = mock_job_storage.get_orm_job.return_value
760755
mock_job.state = State.COMPLETED
761756
# far in the past
762-
mock_job.scheduled_time = naive_utc_datetime(
763-
timezone.now() - datetime.timedelta(seconds=100)
764-
)
757+
mock_job.scheduled_time = timezone.now() - datetime.timedelta(seconds=100)
765758
mock_task.enqueue_in.side_effect = JobRunning()
766759
enqueue_soud_sync_processing()
767760
mock_task.enqueue_in.assert_called_once_with(datetime.timedelta(seconds=10))

kolibri/core/tasks/test/base.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

kolibri/core/tasks/test/taskrunner/test_job_running.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
from kolibri.core.tasks.exceptions import JobNotFound
77
from kolibri.core.tasks.job import Job
88
from kolibri.core.tasks.job import State
9-
from kolibri.core.tasks.storage import Storage
10-
from kolibri.core.tasks.test.base import connection
119
from kolibri.core.tasks.utils import callable_to_import_path
1210
from kolibri.core.tasks.utils import get_current_job
1311
from kolibri.core.tasks.utils import import_path_to_callable
@@ -17,12 +15,11 @@
1715

1816
@pytest.fixture
1917
def storage_fixture():
20-
with connection() as conn:
21-
e = Worker(connection=conn)
22-
b = Storage(conn)
23-
b.clear(force=True)
24-
yield b
25-
e.shutdown()
18+
e = Worker()
19+
b = e.storage
20+
b.clear(force=True)
21+
yield b
22+
e.shutdown()
2623

2724

2825
@pytest.fixture
@@ -162,6 +159,7 @@ def update_progress_cancelable_job():
162159
return
163160

164161

162+
@pytest.mark.django_db(databases="__all__", transaction=True)
165163
class TestJobStorage(object):
166164
def test_does_not_enqueue_a_function(self, storage_fixture):
167165
try:

kolibri/core/tasks/test/taskrunner/test_scheduler.py

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,31 @@
22

33
import pytest
44

5+
from kolibri.core.tasks.decorators import register_task
56
from kolibri.core.tasks.exceptions import JobRunning
67
from kolibri.core.tasks.job import Job
78
from kolibri.core.tasks.storage import Storage
8-
from kolibri.core.tasks.test.base import connection
99
from kolibri.utils.time_utils import local_now
10-
from kolibri.utils.time_utils import naive_utc_datetime
1110

1211

1312
@pytest.fixture
1413
def job_storage():
15-
with connection() as c:
16-
s = Storage(connection=c)
17-
s.clear(force=True)
18-
yield s
19-
s.clear(force=True)
14+
s = Storage()
15+
s.clear(force=True)
16+
yield s
17+
s.clear(force=True)
2018

2119

20+
@register_task
21+
def add(x, y):
22+
return x + y
23+
24+
25+
@pytest.mark.django_db(databases="__all__")
2226
class TestScheduler(object):
2327
@pytest.fixture
2428
def job(self):
25-
return Job(id)
29+
return Job(add)
2630

2731
def test_enqueue_at_a_function(self, job_storage, job):
2832
job_id = job_storage.enqueue_at(local_now(), job)
@@ -34,10 +38,9 @@ def test_enqueue_at_a_function_sets_time(self, job_storage, job):
3438
now = local_now()
3539
job_id = job_storage.enqueue_at(now, job)
3640

37-
with job_storage.session_scope() as session:
38-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
39-
scheduled_time = scheduled_job.scheduled_time
40-
assert scheduled_time == naive_utc_datetime(now)
41+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
42+
scheduled_time = scheduled_job.scheduled_time
43+
assert scheduled_time == now
4144

4245
def test_enqueue_at_preserves_extra_metadata(self, job_storage, job):
4346
metadata = {"saved": True}
@@ -59,19 +62,17 @@ def test_enqueue_in_a_function_sets_time(self, job_storage, job):
5962
job_storage._now = lambda: now
6063
job_id = job_storage.enqueue_in(diff, job)
6164

62-
with job_storage.session_scope() as session:
63-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
64-
scheduled_time = scheduled_job.scheduled_time
65-
assert scheduled_time == naive_utc_datetime(now) + diff
65+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
66+
scheduled_time = scheduled_job.scheduled_time
67+
assert scheduled_time == now + diff
6668

6769
def test_schedule_a_function_sets_time(self, job_storage, job):
6870
now = local_now()
6971
job_id = job_storage.schedule(now, job)
7072

71-
with job_storage.session_scope() as session:
72-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
73-
scheduled_time = scheduled_job.scheduled_time
74-
assert scheduled_time == naive_utc_datetime(now)
73+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
74+
scheduled_time = scheduled_job.scheduled_time
75+
assert scheduled_time == now
7576

7677
def test_schedule_a_function_gives_value_error_without_datetime(
7778
self, job_storage, job
@@ -112,9 +113,8 @@ def test_scheduled_repeating_function_sets_endless_repeat_new_job(
112113
job_id = job_storage.schedule(now, job, interval=1000, repeat=None)
113114
job_storage.complete_job(job_id)
114115
job_storage.reschedule_finished_job_if_needed(job_id)
115-
with job_storage.session_scope() as session:
116-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
117-
repeat = scheduled_job.repeat
116+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
117+
repeat = scheduled_job.repeat
118118
assert repeat is None
119119

120120
def test_scheduled_repeating_function_enqueues_job(self, job_storage, job):
@@ -131,9 +131,8 @@ def test_scheduled_repeating_function_sets_new_job_with_one_fewer_repeats(
131131
job_id = job_storage.schedule(now, job, interval=1000, repeat=1)
132132
job_storage.complete_job(job_id)
133133
job_storage.reschedule_finished_job_if_needed(job_id)
134-
with job_storage.session_scope() as session:
135-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
136-
repeat = scheduled_job.repeat
134+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
135+
repeat = scheduled_job.repeat
137136
assert repeat == 0
138137

139138
def test_scheduled_repeating_function_sets_new_job_at_interval(
@@ -144,12 +143,9 @@ def test_scheduled_repeating_function_sets_new_job_at_interval(
144143
job_storage._now = lambda: now
145144
job_storage.complete_job(job_id)
146145
job_storage.reschedule_finished_job_if_needed(job_id)
147-
with job_storage.session_scope() as session:
148-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
149-
scheduled_time = scheduled_job.scheduled_time
150-
assert scheduled_time == naive_utc_datetime(now) + datetime.timedelta(
151-
seconds=1000
152-
)
146+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
147+
scheduled_time = scheduled_job.scheduled_time
148+
assert scheduled_time == now + datetime.timedelta(seconds=1000)
153149

154150
def test_scheduled_repeating_function_failure_sets_new_job_at_retry_interval(
155151
self, job_storage, job
@@ -161,17 +157,16 @@ def test_scheduled_repeating_function_failure_sets_new_job_at_retry_interval(
161157
job_storage._now = lambda: now
162158
job_storage.mark_job_as_failed(job_id, "Exception", "Traceback")
163159
job_storage.reschedule_finished_job_if_needed(job_id)
164-
with job_storage.session_scope() as session:
165-
_, scheduled_job = job_storage._get_job_and_orm_job(job_id, session)
166-
scheduled_time = scheduled_job.scheduled_time
167-
assert scheduled_time == naive_utc_datetime(now) + datetime.timedelta(seconds=5)
160+
_, scheduled_job = job_storage._get_job_and_orm_job(job_id)
161+
scheduled_time = scheduled_job.scheduled_time
162+
assert scheduled_time == now + datetime.timedelta(seconds=5)
168163

169164

170165
class TestReschedule(TestScheduler):
171166
@pytest.fixture
172167
def job(self, job_storage):
173168
now = local_now()
174-
job_id = job_storage.schedule(now, Job(id), interval=1, repeat=123)
169+
job_id = job_storage.schedule(now, Job(add), interval=1, repeat=123)
175170
return job_storage.get_job(job_id)
176171

177172
def test_reschedule_a_function_gives_job_running_error(self, job_storage, job):

0 commit comments

Comments
 (0)