|
1 |
| -from tests import PyResTests, Basic, TestProcess, ErrorObject, RetryOnExceptionJob, TimeoutJob |
| 1 | +from tests import PyResTests, Basic, TestProcess, ErrorObject, RetryOnExceptionJob, TimeoutJob, CrashJob |
2 | 2 | from pyres import ResQ
|
3 | 3 | from pyres.job import Job
|
4 | 4 | from pyres.scheduler import Scheduler
|
@@ -203,21 +203,26 @@ def test_retry_on_exception(self):
|
203 | 203 | assert worker.get_failed() == 0
|
204 | 204 |
|
205 | 205 | def test_kills_stale_workers_after_timeout(self):
|
206 |
| - import signal |
207 | 206 | timeout = 1
|
208 | 207 |
|
209 | 208 | worker = Worker(['basic'], timeout=timeout)
|
210 | 209 | self.resq.enqueue(TimeoutJob, timeout + 1)
|
211 | 210 |
|
212 |
| - child = os.fork() |
213 |
| - if child: |
214 |
| - assert worker.get_failed() == 0 |
215 |
| - time.sleep(timeout + 2) |
216 |
| - os.kill(child, signal.SIGKILL) |
217 |
| - os.waitpid(-1, os.WNOHANG) |
218 |
| - assert worker.get_failed() == 1 |
219 |
| - else: |
220 |
| - worker.work() |
| 211 | + assert worker.get_failed() == 0 |
| 212 | + worker.fork_worker(worker.reserve()) |
| 213 | + assert worker.get_failed() == 1 |
| 214 | + |
| 215 | + def test_detect_crashed_workers_as_failures(self): |
| 216 | + worker = Worker(['basic']) |
| 217 | + self.resq.enqueue(CrashJob) |
| 218 | + |
| 219 | + assert worker.job() == {} |
| 220 | + assert worker.get_failed() == 0 |
| 221 | + |
| 222 | + worker.fork_worker(worker.reserve()) |
| 223 | + |
| 224 | + assert worker.job() == {} |
| 225 | + assert worker.get_failed() == 1 |
221 | 226 |
|
222 | 227 | def test_retries_give_up_eventually(self):
|
223 | 228 | now = datetime.datetime.now()
|
|
0 commit comments