Merge lp:~cjwatson/lazr.jobrunner/py3 into lp:lazr.jobrunner
- py3
- Merge into trunk
Proposed by
Colin Watson
Status: | Merged |
---|---|
Merged at revision: | 59 |
Proposed branch: | lp:~cjwatson/lazr.jobrunner/py3 |
Merge into: | lp:lazr.jobrunner |
Prerequisite: | lp:~cjwatson/lazr.jobrunner/celery-4.3 |
Diff against target: |
340 lines (+70/-34) 11 files modified
NEWS.txt (+4/-0) setup.py (+5/-3) src/lazr/__init__.py (+23/-1) src/lazr/jobrunner/bin/clear_queues.py (+5/-3) src/lazr/jobrunner/jobrunner.py (+3/-3) src/lazr/jobrunner/tests/config1.py (+1/-1) src/lazr/jobrunner/tests/config_do_not_create_missing_queues.py (+1/-1) src/lazr/jobrunner/tests/test_celerytask.py (+25/-19) src/lazr/jobrunner/tests/time_limit_config_fast_lane.py (+1/-1) src/lazr/jobrunner/tests/time_limit_config_slow_lane.py (+1/-1) tox.ini (+1/-1) |
To merge this branch: | bzr merge lp:~cjwatson/lazr.jobrunner/py3 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Adam Collard (community) | Approve | ||
Launchpad code reviewers | Pending | ||
Review via email: mp+366179@code.launchpad.net |
Commit message
Add Python 3 support (requires celery >= 4.3).
Description of the change
To post a comment you must log in.
Revision history for this message
Adam Collard (adam-collard) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'NEWS.txt' | |||
2 | --- NEWS.txt 2019-03-08 18:24:33 +0000 | |||
3 | +++ NEWS.txt 2019-05-02 14:16:27 +0000 | |||
4 | @@ -1,6 +1,10 @@ | |||
5 | 1 | News | 1 | News |
6 | 2 | ==== | 2 | ==== |
7 | 3 | 3 | ||
8 | 4 | UNRELEASED | ||
9 | 5 | ---------- | ||
10 | 6 | * Add Python 3 support (requires celery >= 4.3). | ||
11 | 7 | |||
12 | 4 | 0.14 | 8 | 0.14 |
13 | 5 | ---- | 9 | ---- |
14 | 6 | * Add tox testing support. | 10 | * Add tox testing support. |
15 | 7 | 11 | ||
16 | === modified file 'setup.py' | |||
17 | --- setup.py 2019-03-08 18:24:33 +0000 | |||
18 | +++ setup.py 2019-05-02 14:16:27 +0000 | |||
19 | @@ -28,11 +28,13 @@ | |||
20 | 28 | # List your project dependencies here. | 28 | # List your project dependencies here. |
21 | 29 | # For more details, see: | 29 | # For more details, see: |
22 | 30 | # http://packages.python.org/distribute/setuptools.html#declaring-dependencies | 30 | # http://packages.python.org/distribute/setuptools.html#declaring-dependencies |
24 | 31 | 'celery>=3.0,<5.0', | 31 | 'celery>=3.0,<5.0; python_version < "3"', |
25 | 32 | 'celery>=4.3,<5.0; python_version >= "3"', | ||
26 | 32 | ] | 33 | ] |
27 | 33 | 34 | ||
28 | 34 | tests_require = [ | 35 | tests_require = [ |
29 | 35 | 'oops>=0.0.11', | 36 | 'oops>=0.0.11', |
30 | 37 | 'six', | ||
31 | 36 | 'unittest2', | 38 | 'unittest2', |
32 | 37 | 'zope.testing', | 39 | 'zope.testing', |
33 | 38 | ] | 40 | ] |
34 | @@ -51,8 +53,8 @@ | |||
35 | 51 | url='https://launchpad.net/lazr.jobrunner', | 53 | url='https://launchpad.net/lazr.jobrunner', |
36 | 52 | license='GPL v3', | 54 | license='GPL v3', |
37 | 53 | packages=find_packages('src'), | 55 | packages=find_packages('src'), |
40 | 54 | package_dir = {'': 'src'}, | 56 | package_dir={'': 'src'}, |
41 | 55 | namespace_packages = ['lazr'], | 57 | namespace_packages=['lazr'], |
42 | 56 | include_package_data=True, | 58 | include_package_data=True, |
43 | 57 | zip_safe=False, | 59 | zip_safe=False, |
44 | 58 | install_requires=install_requires, | 60 | install_requires=install_requires, |
45 | 59 | 61 | ||
46 | === modified file 'src/lazr/__init__.py' | |||
47 | --- src/lazr/__init__.py 2012-02-23 10:32:17 +0000 | |||
48 | +++ src/lazr/__init__.py 2019-05-02 14:16:27 +0000 | |||
49 | @@ -1,1 +1,23 @@ | |||
51 | 1 | __import__('pkg_resources').declare_namespace(__name__) | 1 | # Copyright 2019 Canonical Ltd. All rights reserved. |
52 | 2 | # | ||
53 | 3 | # This file is part of lazr.jobrunner. | ||
54 | 4 | # | ||
55 | 5 | # lazr.jobrunner is free software: you can redistribute it and/or modify it | ||
56 | 6 | # under the terms of the GNU Lesser General Public License as published by | ||
57 | 7 | # the Free Software Foundation, version 3 of the License. | ||
58 | 8 | # | ||
59 | 9 | # lazr.jobrunner is distributed in the hope that it will be useful, but WITHOUT | ||
60 | 10 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
61 | 11 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public | ||
62 | 12 | # License for more details. | ||
63 | 13 | # | ||
64 | 14 | # You should have received a copy of the GNU Lesser General Public License | ||
65 | 15 | # along with lazr.jobrunner. If not, see <http://www.gnu.org/licenses/>. | ||
66 | 16 | |||
67 | 17 | # this is a namespace package | ||
68 | 18 | try: | ||
69 | 19 | import pkg_resources | ||
70 | 20 | pkg_resources.declare_namespace(__name__) | ||
71 | 21 | except ImportError: | ||
72 | 22 | import pkgutil | ||
73 | 23 | __path__ = pkgutil.extend_path(__path__, __name__) | ||
74 | 2 | 24 | ||
75 | === modified file 'src/lazr/jobrunner/bin/clear_queues.py' | |||
76 | --- src/lazr/jobrunner/bin/clear_queues.py 2019-03-05 17:06:13 +0000 | |||
77 | +++ src/lazr/jobrunner/bin/clear_queues.py 2019-05-02 14:16:27 +0000 | |||
78 | @@ -17,6 +17,8 @@ | |||
79 | 17 | 17 | ||
80 | 18 | """Inspect Celery result queues.""" | 18 | """Inspect Celery result queues.""" |
81 | 19 | 19 | ||
82 | 20 | from __future__ import absolute_import, print_function | ||
83 | 21 | |||
84 | 20 | __metaclass__ = type | 22 | __metaclass__ = type |
85 | 21 | 23 | ||
86 | 22 | from argparse import ArgumentParser | 24 | from argparse import ArgumentParser |
87 | @@ -28,9 +30,9 @@ | |||
88 | 28 | 30 | ||
89 | 29 | 31 | ||
90 | 30 | def show_queue_data(body, message): | 32 | def show_queue_data(body, message): |
92 | 31 | print '%s: %s' % ( | 33 | print('%s: %s' % ( |
93 | 32 | message.delivery_info['routing_key'], | 34 | message.delivery_info['routing_key'], |
95 | 33 | json.dumps(body, sort_keys=True)) | 35 | json.dumps(body, sort_keys=True))) |
96 | 34 | 36 | ||
97 | 35 | 37 | ||
98 | 36 | def clear_queues(args): | 38 | def clear_queues(args): |
99 | @@ -56,7 +58,7 @@ | |||
100 | 56 | RunJob.app, [queue], callbacks=[show_queue_data], | 58 | RunJob.app, [queue], callbacks=[show_queue_data], |
101 | 57 | retain=True, passive_queues=True) | 59 | retain=True, passive_queues=True) |
102 | 58 | except amqp.exceptions.NotFound as exc: | 60 | except amqp.exceptions.NotFound as exc: |
104 | 59 | print >>sys.stderr, exc.reply_text | 61 | print(exc.reply_text, file=sys.stderr) |
105 | 60 | 62 | ||
106 | 61 | 63 | ||
107 | 62 | def main(): | 64 | def main(): |
108 | 63 | 65 | ||
109 | === modified file 'src/lazr/jobrunner/jobrunner.py' | |||
110 | --- src/lazr/jobrunner/jobrunner.py 2012-10-24 17:57:42 +0000 | |||
111 | +++ src/lazr/jobrunner/jobrunner.py 2019-05-02 14:16:27 +0000 | |||
112 | @@ -160,7 +160,7 @@ | |||
113 | 160 | try: | 160 | try: |
114 | 161 | try: | 161 | try: |
115 | 162 | job.run() | 162 | job.run() |
117 | 163 | except self.retryErrorTypes(job), e: | 163 | except self.retryErrorTypes(job) as e: |
118 | 164 | if job.attempt_count > job.max_retries: | 164 | if job.attempt_count > job.max_retries: |
119 | 165 | raise | 165 | raise |
120 | 166 | self.logger.warning( | 166 | self.logger.warning( |
121 | @@ -192,7 +192,7 @@ | |||
122 | 192 | try: | 192 | try: |
123 | 193 | try: | 193 | try: |
124 | 194 | self.runJob(job, fallback) | 194 | self.runJob(job, fallback) |
126 | 195 | except self.userErrorTypes(job), e: | 195 | except self.userErrorTypes(job) as e: |
127 | 196 | self.logger.info( | 196 | self.logger.info( |
128 | 197 | '%s failed with user error %r.' | 197 | '%s failed with user error %r.' |
129 | 198 | % (self.job_str(job), e)) | 198 | % (self.job_str(job), e)) |
130 | @@ -200,7 +200,7 @@ | |||
131 | 200 | except Exception: | 200 | except Exception: |
132 | 201 | info = sys.exc_info() | 201 | info = sys.exc_info() |
133 | 202 | return self._doOops(job, info) | 202 | return self._doOops(job, info) |
135 | 203 | except Exception, e: | 203 | except Exception as e: |
136 | 204 | # This only happens if _doOops() fails. | 204 | # This only happens if _doOops() fails. |
137 | 205 | self.logger.exception("Failure in _doOops: %s" % e) | 205 | self.logger.exception("Failure in _doOops: %s" % e) |
138 | 206 | info = sys.exc_info() | 206 | info = sys.exc_info() |
139 | 207 | 207 | ||
140 | === modified file 'src/lazr/jobrunner/tests/config1.py' | |||
141 | --- src/lazr/jobrunner/tests/config1.py 2012-07-09 10:58:00 +0000 | |||
142 | +++ src/lazr/jobrunner/tests/config1.py 2019-05-02 14:16:27 +0000 | |||
143 | @@ -1,4 +1,4 @@ | |||
145 | 1 | from simple_config import * | 1 | from lazr.jobrunner.tests.simple_config import * |
146 | 2 | import os | 2 | import os |
147 | 3 | import oops | 3 | import oops |
148 | 4 | CELERY_ANNOTATIONS = { | 4 | CELERY_ANNOTATIONS = { |
149 | 5 | 5 | ||
150 | === modified file 'src/lazr/jobrunner/tests/config_do_not_create_missing_queues.py' | |||
151 | --- src/lazr/jobrunner/tests/config_do_not_create_missing_queues.py 2012-07-09 10:58:00 +0000 | |||
152 | +++ src/lazr/jobrunner/tests/config_do_not_create_missing_queues.py 2019-05-02 14:16:27 +0000 | |||
153 | @@ -1,2 +1,2 @@ | |||
155 | 1 | from simple_config import * | 1 | from lazr.jobrunner.tests.simple_config import * |
156 | 2 | CELERY_CREATE_MISSING_QUEUES = False | 2 | CELERY_CREATE_MISSING_QUEUES = False |
157 | 3 | 3 | ||
158 | === modified file 'src/lazr/jobrunner/tests/test_celerytask.py' | |||
159 | --- src/lazr/jobrunner/tests/test_celerytask.py 2019-03-06 12:17:21 +0000 | |||
160 | +++ src/lazr/jobrunner/tests/test_celerytask.py 2019-05-02 14:16:27 +0000 | |||
161 | @@ -31,7 +31,12 @@ | |||
162 | 31 | import tempfile | 31 | import tempfile |
163 | 32 | from time import sleep | 32 | from time import sleep |
164 | 33 | from unittest import TestCase | 33 | from unittest import TestCase |
166 | 34 | import urllib2 | 34 | |
167 | 35 | from six.moves.urllib.error import URLError | ||
168 | 36 | from six.moves.urllib.request import ( | ||
169 | 37 | build_opener, | ||
170 | 38 | HTTPBasicAuthHandler, | ||
171 | 39 | ) | ||
172 | 35 | 40 | ||
173 | 36 | os.environ.setdefault('CELERY_CONFIG_MODULE', 'lazr.jobrunner.celeryconfig') | 41 | os.environ.setdefault('CELERY_CONFIG_MODULE', 'lazr.jobrunner.celeryconfig') |
174 | 37 | 42 | ||
175 | @@ -143,7 +148,7 @@ | |||
176 | 143 | def ensure_dir(path): | 148 | def ensure_dir(path): |
177 | 144 | try: | 149 | try: |
178 | 145 | os.mkdir(path) | 150 | os.mkdir(path) |
180 | 146 | except OSError, e: | 151 | except OSError as e: |
181 | 147 | if e.errno != errno.EEXIST: | 152 | if e.errno != errno.EEXIST: |
182 | 148 | raise | 153 | raise |
183 | 149 | ensure_dir(self.job_root) | 154 | ensure_dir(self.job_root) |
184 | @@ -176,7 +181,7 @@ | |||
185 | 176 | try: | 181 | try: |
186 | 177 | with self._job_output_file(job.job_id, 'r') as job_output_file: | 182 | with self._job_output_file(job.job_id, 'r') as job_output_file: |
187 | 178 | return job_output_file.read() | 183 | return job_output_file.read() |
189 | 179 | except IOError, e: | 184 | except IOError as e: |
190 | 180 | if e.errno == errno.ENOENT: | 185 | if e.errno == errno.ENOENT: |
191 | 181 | return None | 186 | return None |
192 | 182 | raise | 187 | raise |
193 | @@ -269,7 +274,7 @@ | |||
194 | 269 | # There is exactly one OOPS report. | 274 | # There is exactly one OOPS report. |
195 | 270 | self.assertEqual(1, len(oops_repository.oopses)) | 275 | self.assertEqual(1, len(oops_repository.oopses)) |
196 | 271 | # This OOPS describes a MemoryError. | 276 | # This OOPS describes a MemoryError. |
198 | 272 | oops_report = oops_repository.oopses.values()[0] | 277 | oops_report = list(oops_repository.oopses.values())[0] |
199 | 273 | self.assertEqual('MemoryError', oops_report['type']) | 278 | self.assertEqual('MemoryError', oops_report['type']) |
200 | 274 | 279 | ||
201 | 275 | def test_acquires_lease(self): | 280 | def test_acquires_lease(self): |
202 | @@ -288,11 +293,11 @@ | |||
203 | 288 | class TestCeleryD(TestCase): | 293 | class TestCeleryD(TestCase): |
204 | 289 | 294 | ||
205 | 290 | def getQueueInfo(self): | 295 | def getQueueInfo(self): |
207 | 291 | auth_handler = urllib2.HTTPBasicAuthHandler() | 296 | auth_handler = HTTPBasicAuthHandler() |
208 | 292 | auth_handler.add_password( | 297 | auth_handler.add_password( |
209 | 293 | realm='Management: Web UI', user='guest', passwd='guest', | 298 | realm='Management: Web UI', user='guest', passwd='guest', |
210 | 294 | uri='http://localhost:55672/api/queues') | 299 | uri='http://localhost:55672/api/queues') |
212 | 295 | opener = urllib2.build_opener(auth_handler) | 300 | opener = build_opener(auth_handler) |
213 | 296 | info = opener.open('http://localhost:55672/api/queues').read() | 301 | info = opener.open('http://localhost:55672/api/queues').read() |
214 | 297 | info = json.loads(info) | 302 | info = json.loads(info) |
215 | 298 | # info is a list of dictionaries with details about the queues. | 303 | # info is a list of dictionaries with details about the queues. |
216 | @@ -305,7 +310,7 @@ | |||
217 | 305 | super(TestCeleryD, self).setUp() | 310 | super(TestCeleryD, self).setUp() |
218 | 306 | try: | 311 | try: |
219 | 307 | self.queue_status_during_setup = self.getQueueInfo() | 312 | self.queue_status_during_setup = self.getQueueInfo() |
221 | 308 | except urllib2.URLError: | 313 | except URLError: |
222 | 309 | # The rabbitmq-management package is currently broken | 314 | # The rabbitmq-management package is currently broken |
223 | 310 | # on Precise, so the RabbitMQ management interface may | 315 | # on Precise, so the RabbitMQ management interface may |
224 | 311 | # not be available. | 316 | # not be available. |
225 | @@ -314,7 +319,7 @@ | |||
226 | 314 | def tearDown(self): | 319 | def tearDown(self): |
227 | 315 | try: | 320 | try: |
228 | 316 | current_queue_status = self.getQueueInfo() | 321 | current_queue_status = self.getQueueInfo() |
230 | 317 | except urllib2.URLError: | 322 | except URLError: |
231 | 318 | # See setUp() | 323 | # See setUp() |
232 | 319 | return | 324 | return |
233 | 320 | bad_queues = [] | 325 | bad_queues = [] |
234 | @@ -390,9 +395,10 @@ | |||
235 | 390 | err = proc.stderr.read() | 395 | err = proc.stderr.read() |
236 | 391 | self.assertEqual(JobStatus.FAILED, job.status) | 396 | self.assertEqual(JobStatus.FAILED, job.status) |
237 | 392 | self.assertIs(None, job.job_source.get_output(job)) | 397 | self.assertIs(None, job.job_source.get_output(job)) |
241 | 393 | self.assertIn( | 398 | expected_message = ( |
242 | 394 | "OOPS while executing job 10: [] Exception(u'Catch me if you" | 399 | "OOPS while executing job 10: [] Exception(%r,)" % |
243 | 395 | " can!',)", err) | 400 | u'Catch me if you can!').encode('UTF-8') |
244 | 401 | self.assertIn(expected_message, err) | ||
245 | 396 | 402 | ||
246 | 397 | def test_timeout_long(self): | 403 | def test_timeout_long(self): |
247 | 398 | """Raises exception when a job exceeds the configured time limit.""" | 404 | """Raises exception when a job exceeds the configured time limit.""" |
248 | @@ -404,7 +410,7 @@ | |||
249 | 404 | self.assertEqual(JobStatus.FAILED, job.status) | 410 | self.assertEqual(JobStatus.FAILED, job.status) |
250 | 405 | err = proc.stderr.read() | 411 | err = proc.stderr.read() |
251 | 406 | self.assertIn( | 412 | self.assertIn( |
253 | 407 | 'OOPS while executing job 10: [] SoftTimeLimitExceeded', err) | 413 | b'OOPS while executing job 10: [] SoftTimeLimitExceeded', err) |
254 | 408 | 414 | ||
255 | 409 | def test_timeout_in_fast_lane_passes_in_slow_lane(self): | 415 | def test_timeout_in_fast_lane_passes_in_slow_lane(self): |
256 | 410 | # If a fast and a slow lane are configured, jobs which time out | 416 | # If a fast and a slow lane are configured, jobs which time out |
257 | @@ -526,12 +532,12 @@ | |||
258 | 526 | return ( | 532 | return ( |
259 | 527 | '%s: {"children": [], "result": null, "status": "SUCCESS", ' | 533 | '%s: {"children": [], "result": null, "status": "SUCCESS", ' |
260 | 528 | '"task_id": "%s", "traceback": null}\n' | 534 | '"task_id": "%s", "traceback": null}\n' |
262 | 529 | % (self.queueName(task_id), task_id)) | 535 | % (self.queueName(task_id), task_id)).encode('UTF-8') |
263 | 530 | 536 | ||
264 | 531 | def noQueueMessage(self, task_id): | 537 | def noQueueMessage(self, task_id): |
265 | 532 | return ( | 538 | return ( |
266 | 533 | "NOT_FOUND - no queue '%s' in vhost '/'\n" | 539 | "NOT_FOUND - no queue '%s' in vhost '/'\n" |
268 | 534 | % self.queueName(task_id)) | 540 | % self.queueName(task_id)).encode('UTF-8') |
269 | 535 | 541 | ||
270 | 536 | def test_clear_queues__result_not_consumed(self): | 542 | def test_clear_queues__result_not_consumed(self): |
271 | 537 | """When a Celery task is started so that a result is returned | 543 | """When a Celery task is started so that a result is returned |
272 | @@ -546,12 +552,12 @@ | |||
273 | 546 | clear_queue_config = 'lazr.jobrunner.tests.simple_config' | 552 | clear_queue_config = 'lazr.jobrunner.tests.simple_config' |
274 | 547 | stdout, stderr = self.runClearQueues(clear_queue_config, [task_id]) | 553 | stdout, stderr = self.runClearQueues(clear_queue_config, [task_id]) |
275 | 548 | self.assertEqual(self.successMessage(task_id), stdout) | 554 | self.assertEqual(self.successMessage(task_id), stdout) |
277 | 549 | self.assertEqual('', stderr) | 555 | self.assertEqual(b'', stderr) |
278 | 550 | 556 | ||
279 | 551 | # Reading a queue is destructive. An attempt to read again from | 557 | # Reading a queue is destructive. An attempt to read again from |
280 | 552 | # a queue results in an error. | 558 | # a queue results in an error. |
281 | 553 | stdout, stderr = self.runClearQueues(clear_queue_config, [task_id]) | 559 | stdout, stderr = self.runClearQueues(clear_queue_config, [task_id]) |
283 | 554 | self.assertEqual('', stdout) | 560 | self.assertEqual(b'', stdout) |
284 | 555 | self.assertEqual(self.noQueueMessage(task_id), stderr) | 561 | self.assertEqual(self.noQueueMessage(task_id), stderr) |
285 | 556 | 562 | ||
286 | 557 | def test_clear_queues__two_queues(self): | 563 | def test_clear_queues__two_queues(self): |
287 | @@ -567,7 +573,7 @@ | |||
288 | 567 | expected_stdout = ( | 573 | expected_stdout = ( |
289 | 568 | self.successMessage(task_id_1) + self.successMessage(task_id_2)) | 574 | self.successMessage(task_id_1) + self.successMessage(task_id_2)) |
290 | 569 | self.assertEqual(expected_stdout, stdout) | 575 | self.assertEqual(expected_stdout, stdout) |
292 | 570 | self.assertEqual('', stderr) | 576 | self.assertEqual(b'', stderr) |
293 | 571 | 577 | ||
294 | 572 | def test_clear_queues__task_without_result(self): | 578 | def test_clear_queues__task_without_result(self): |
295 | 573 | """A Celery task which was started so that no result is returned | 579 | """A Celery task which was started so that no result is returned |
296 | @@ -577,7 +583,7 @@ | |||
297 | 577 | task_id = self.invokeJob(celery_config_jobrunner, RunFileJobNoResult) | 583 | task_id = self.invokeJob(celery_config_jobrunner, RunFileJobNoResult) |
298 | 578 | clear_queue_config = 'lazr.jobrunner.tests.simple_config' | 584 | clear_queue_config = 'lazr.jobrunner.tests.simple_config' |
299 | 579 | stdout, stderr = self.runClearQueues(clear_queue_config, [task_id]) | 585 | stdout, stderr = self.runClearQueues(clear_queue_config, [task_id]) |
301 | 580 | self.assertEqual('', stdout) | 586 | self.assertEqual(b'', stdout) |
302 | 581 | self.assertEqual(self.noQueueMessage(task_id), stderr) | 587 | self.assertEqual(self.noQueueMessage(task_id), stderr) |
303 | 582 | 588 | ||
304 | 583 | def test_clear_queues__config_create_missing_queues_false(self): | 589 | def test_clear_queues__config_create_missing_queues_false(self): |
305 | @@ -596,5 +602,5 @@ | |||
306 | 596 | # not have the desired effect | 602 | # not have the desired effect |
307 | 597 | task_id = 'this-queue-does-not-exist' | 603 | task_id = 'this-queue-does-not-exist' |
308 | 598 | stdout, stderr = self.runClearQueues(celery_config, [task_id]) | 604 | stdout, stderr = self.runClearQueues(celery_config, [task_id]) |
310 | 599 | self.assertEqual('', stdout) | 605 | self.assertEqual(b'', stdout) |
311 | 600 | self.assertEqual(self.noQueueMessage(task_id), stderr) | 606 | self.assertEqual(self.noQueueMessage(task_id), stderr) |
312 | 601 | 607 | ||
313 | === modified file 'src/lazr/jobrunner/tests/time_limit_config_fast_lane.py' | |||
314 | --- src/lazr/jobrunner/tests/time_limit_config_fast_lane.py 2012-04-10 12:44:00 +0000 | |||
315 | +++ src/lazr/jobrunner/tests/time_limit_config_fast_lane.py 2019-05-02 14:16:27 +0000 | |||
316 | @@ -1,3 +1,3 @@ | |||
318 | 1 | from config_two_queues import * | 1 | from lazr.jobrunner.tests.config_two_queues import * |
319 | 2 | CELERYD_TASK_SOFT_TIME_LIMIT = 1 | 2 | CELERYD_TASK_SOFT_TIME_LIMIT = 1 |
320 | 3 | FALLBACK_QUEUE = 'standard_slow' | 3 | FALLBACK_QUEUE = 'standard_slow' |
321 | 4 | 4 | ||
322 | === modified file 'src/lazr/jobrunner/tests/time_limit_config_slow_lane.py' | |||
323 | --- src/lazr/jobrunner/tests/time_limit_config_slow_lane.py 2012-04-10 12:44:00 +0000 | |||
324 | +++ src/lazr/jobrunner/tests/time_limit_config_slow_lane.py 2019-05-02 14:16:27 +0000 | |||
325 | @@ -1,2 +1,2 @@ | |||
327 | 1 | from config_two_queues import * | 1 | from lazr.jobrunner.tests.config_two_queues import * |
328 | 2 | CELERYD_TASK_SOFT_TIME_LIMIT = 5 | 2 | CELERYD_TASK_SOFT_TIME_LIMIT = 5 |
329 | 3 | 3 | ||
330 | === modified file 'tox.ini' | |||
331 | --- tox.ini 2019-05-02 14:16:27 +0000 | |||
332 | +++ tox.ini 2019-05-02 14:16:27 +0000 | |||
333 | @@ -1,6 +1,6 @@ | |||
334 | 1 | [tox] | 1 | [tox] |
335 | 2 | envlist = | 2 | envlist = |
337 | 3 | py27-celery{31,40,41,42,43} | 3 | py27-celery{31,40,41,42,43}, py35-celery43 |
338 | 4 | 4 | ||
339 | 5 | [testenv] | 5 | [testenv] |
340 | 6 | commands = | 6 | commands = |