Skip to content

Commit b486e04

Browse files
committed
-Refactor failure backend tests
-Actually make them pass this time
1 parent 6ebf8b6 commit b486e04

File tree

3 files changed

+58
-46
lines changed

3 files changed

+58
-46
lines changed

tests/__init__.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
class Basic(object):
66
queue = 'basic'
7-
7+
88
@staticmethod
99
def perform(name):
1010
s = "name:%s" % name
@@ -15,7 +15,7 @@ class BasicMulti(object):
1515
@staticmethod
1616
def perform(name, age):
1717
print 'name: %s, age: %s' % (name, age)
18-
18+
1919

2020
class ReturnAllArgsJob(object):
2121
queue = 'basic'
@@ -40,24 +40,24 @@ def perform(fail_until):
4040

4141
class TestProcess(object):
4242
queue = 'high'
43-
43+
4444
@staticmethod
4545
def perform():
4646
import time
4747
time.sleep(.5)
4848
return 'Done Sleeping'
49-
50-
49+
50+
5151
class ErrorObject(object):
5252
queue = 'basic'
53-
53+
5454
@staticmethod
5555
def perform():
5656
raise Exception("Could not finish job")
5757

5858
class LongObject(object):
5959
queue = 'long_runnning'
60-
60+
6161
@staticmethod
6262
def perform(sleep_time):
6363
import time
@@ -76,14 +76,14 @@ def test_safe_str_to_class(self):
7676
assert safe_str_to_class('tests.Basic') == Basic
7777
self.assertRaises(ImportError, safe_str_to_class, 'test.Mine')
7878
self.assertRaises(ImportError, safe_str_to_class, 'tests.World')
79-
79+
8080

8181
class PyResTests(unittest.TestCase):
8282
def setUp(self):
8383
self.resq = ResQ()
8484
self.redis = self.resq.redis
8585
self.redis.flushall()
86-
86+
8787
def tearDown(self):
8888
self.redis.flushall()
8989
del self.redis

tests/test_failure.py

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,57 @@
1-
from tests import PyResTests, Basic, TestProcess, ErrorObject
1+
from tests import PyResTests, Basic
22
from pyres import failure
3-
from pyres.failure.base import BaseBackend
4-
from pyres.failure.multiple import MultipleBackend
5-
from pyres.failure.redis import RedisBackend
63
from pyres.job import Job
74

85
class FailureTests(PyResTests):
6+
def setUp(self):
7+
PyResTests.setUp(self)
8+
self.queue_name = 'basic'
9+
self.job_class = Basic
10+
911
def test_count(self):
10-
self.resq.enqueue(Basic,"test1")
11-
job = Job.reserve('basic',self.resq)
12+
self.resq.enqueue(self.job_class,"test1")
13+
job = Job.reserve(self.queue_name,self.resq)
1214
job.fail("problem")
1315
assert failure.count(self.resq) == 1
1416
assert self.redis.llen('resque:failed') == 1
1517

1618
def test_create(self):
17-
self.resq.enqueue(Basic,"test1")
18-
job = Job.reserve('basic',self.resq)
19+
self.resq.enqueue(self.job_class,"test1")
20+
job = Job.reserve(self.queue_name,self.resq)
1921
e = Exception('test')
20-
fail = failure.create(e, 'basic', job._payload)
22+
fail = failure.create(e, self.queue_name, job._payload)
2123
assert isinstance(fail._payload, dict)
2224
fail.save(self.resq)
2325
assert failure.count(self.resq) == 1
2426
assert self.redis.llen('resque:failed') == 1
2527

2628
def test_all(self):
27-
self.resq.enqueue(Basic,"test1")
28-
job = Job.reserve('basic',self.resq)
29+
self.resq.enqueue(self.job_class,"test1")
30+
job = Job.reserve(self.queue_name,self.resq)
2931
e = Exception('problem')
3032
job.fail(e)
3133
assert len(failure.all(self.resq, 0, 20)) == 1
3234

3335
def test_clear(self):
34-
self.resq.enqueue(Basic,"test1")
35-
job = Job.reserve('basic',self.resq)
36+
self.resq.enqueue(self.job_class,"test1")
37+
job = Job.reserve(self.queue_name,self.resq)
3638
e = Exception('problem')
3739
job.fail(e)
3840
assert self.redis.llen('resque:failed') == 1
3941
failure.clear(self.resq)
4042
assert self.redis.llen('resque:failed') == 0
4143

4244
def test_requeue(self):
43-
self.resq.enqueue(Basic,"test1")
44-
job = Job.reserve('basic',self.resq)
45+
self.resq.enqueue(self.job_class,"test1")
46+
job = Job.reserve(self.queue_name,self.resq)
4547
e = Exception('problem')
4648
fail_object = job.fail(e)
47-
assert self.resq.size('basic') == 0
49+
assert self.resq.size(self.queue_name) == 0
4850
failure.requeue(self.resq, fail_object)
49-
assert self.resq.size('basic') == 1
50-
job = Job.reserve('basic',self.resq)
51-
assert job._queue == 'basic'
52-
assert job._payload == {'class':'tests.Basic','args':['test1']}
53-
54-
# Test the MultipleBackend, basically just repeat the above tests, ensuring that
55-
# we've delegated to the methods appropriately
56-
57-
class TestBackend(BaseBackend):
58-
def save(self, resq):
59-
resq.redis.set('testbackend:called', 1)
60-
61-
failure.backend = MultipleBackend
62-
failure.backend.classes = [RedisBackend, TestBackend]
63-
64-
class MultipleFailureTests(FailureTests):
65-
def test_create(self):
66-
# Run the parent test
67-
FailureTests.test_create(self)
68-
# But also ensure the other backends were called
69-
assert int(self.redis.get('testbackend:called')) == 1
51+
assert self.resq.size(self.queue_name) == 1
52+
job = Job.reserve(self.queue_name,self.resq)
53+
assert job._queue == self.queue_name
54+
mod_with_class = '{module}.{klass}'.format(
55+
module=self.job_class.__module__,
56+
klass=self.job_class.__name__)
57+
assert job._payload == {'class':mod_with_class,'args':['test1']}

tests/test_failure_multi.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from tests import Basic
2+
from tests.test_failure import FailureTests
3+
4+
from pyres import failure
5+
from pyres.failure.base import BaseBackend
6+
from pyres.failure.multiple import MultipleBackend
7+
from pyres.failure.redis import RedisBackend
8+
9+
# Inner class for the failure backend
10+
class TestBackend(BaseBackend):
11+
def save(self, resq):
12+
resq.redis.set('testbackend:called', 1)
13+
14+
failure.backend = MultipleBackend
15+
failure.backend.classes = [RedisBackend, TestBackend]
16+
17+
class BasicMultiBackend(Basic):
18+
queue = 'basicmultibackend'
19+
20+
class MultipleFailureTests(FailureTests):
21+
def setUp(self):
22+
FailureTests.setUp(self)
23+
self.job_class = BasicMultiBackend
24+
self.queue_name = 'basicmultibackend'

0 commit comments

Comments
 (0)