-
Notifications
You must be signed in to change notification settings - Fork 16
/
test_background_helper.py
127 lines (95 loc) · 4.31 KB
/
test_background_helper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from unittest import TestCase
import huey.api
from doajtest import helpers
from portality import constants
from portality.background import BackgroundTask
from portality.core import app
from portality.tasks.helpers import background_helper
from portality.tasks.redis_huey import long_running, main_queue
class TestBackgroundHelper(TestCase):
def test_get_queue_id_by_task_queue(self):
cases = [
(long_running, constants.BGJOB_QUEUE_ID_LONG),
(main_queue, constants.BGJOB_QUEUE_ID_MAIN),
(None, constants.BGJOB_QUEUE_ID_UNKNOWN),
]
for case in cases:
with self.subTest(case=case):
task_queue, excepted = case
result = background_helper.get_queue_id_by_task_queue(task_queue)
assert excepted == result
def fixture_bgtask_class(action_name):
class FakeBgtask(BackgroundTask):
__action__ = action_name
return FakeBgtask
class TestRedisHueyTaskHelper(TestCase):
task_name_a = '__new_schedule_a'
task_name_b = '__new_schedule_b'
task_name_schedule_not_exist = '___schedule_that_not_existssssss'
expected_retries = 9292
@classmethod
def setUpClass(cls) -> None:
super().setUpClass()
cls.org_config = helpers.patch_config(app, {
'HUEY_SCHEDULE': {
cls.task_name_a: constants.CRON_NEVER,
},
'HUEY_TASKS': {
cls.task_name_b: {'retries': cls.expected_retries}
}
})
@classmethod
def tearDownClass(cls) -> None:
super().tearDownClass()
helpers.patch_config(app, cls.org_config)
def test_register_schedule(self):
helper = background_helper.RedisHueyTaskHelper(main_queue, fixture_bgtask_class(self.task_name_a))
@helper.register_schedule
def _fn():
print('fake fn')
assert isinstance(_fn, huey.api.TaskWrapper)
def test_register_schedule__schedule_not_found(self):
helper = background_helper.RedisHueyTaskHelper(main_queue,
fixture_bgtask_class(self.task_name_schedule_not_exist))
with self.assertRaises(RuntimeError):
@helper.register_schedule
def _fn():
print('fake fn')
def test_register_execute(self):
helper = background_helper.RedisHueyTaskHelper(main_queue, fixture_bgtask_class(self.task_name_b))
@helper.register_execute(is_load_config=True)
def _fn():
print('fake fn')
assert isinstance(_fn, huey.api.TaskWrapper)
assert _fn.retries == self.expected_retries
def test_register_execute__config_not_found(self):
helper = background_helper.RedisHueyTaskHelper(main_queue,
fixture_bgtask_class(self.task_name_schedule_not_exist))
with self.assertRaises(RuntimeError):
@helper.register_execute(is_load_config=True)
def _fn():
print('fake fn')
def test_register_execute__without_load_config(self):
helper = background_helper.RedisHueyTaskHelper(main_queue,
fixture_bgtask_class(self.task_name_schedule_not_exist))
@helper.register_execute(is_load_config=False)
def _fn():
print('fake fn')
assert isinstance(_fn, huey.api.TaskWrapper)
class BackgroundHelperTest(TestCase):
DEFAULT_VALUE = 'default_value'
def setUp(self) -> None:
self.obj_a = dict(key_a=11223, key_none=None, key_empty='')
def test_get_value_safe__get_value(self):
v = background_helper.get_value_safe('key_a', self.DEFAULT_VALUE, self.obj_a)
assert v == 11223
def test_get_value_safe__none(self):
v = background_helper.get_value_safe('key_none', self.DEFAULT_VALUE, self.obj_a)
assert v == self.DEFAULT_VALUE
def test_get_value_safe__empty(self):
v = background_helper.get_value_safe('key_empty', self.DEFAULT_VALUE, self.obj_a)
assert v != self.DEFAULT_VALUE
def test_get_value_safe__default_cond_fn(self):
v = background_helper.get_value_safe('key_empty', self.DEFAULT_VALUE, self.obj_a,
default_cond_fn=lambda v: v == '')
assert v == self.DEFAULT_VALUE