Browse Source

Flaky pytest plugin doesnt work, so write our own version

Ask Solem 8 years ago
parent
commit
899bb605f3

+ 0 - 1
requirements/test-integration.txt

@@ -1,3 +1,2 @@
 simplejson
-flaky>=3.3
 -r extras/redis.txt

+ 14 - 0
t/integration/conftest.py

@@ -1,12 +1,26 @@
 from __future__ import absolute_import, unicode_literals
 import os
 import pytest
+from functools import wraps
 from celery.contrib.testing.manager import Manager
 
 TEST_BROKER = os.environ.get('TEST_BROKER', 'pyamqp://')
 TEST_BACKEND = os.environ.get('TEST_BACKEND', 'redis://')
 
 
+def flaky(fun):
+    @wraps(fun)
+    def _inner(*args, **kwargs):
+        for i in reversed(range(3)):
+            try:
+                return fun(*args, **kwargs)
+            except Exception as exc:
+                if not i:
+                    raise
+    _inner.__wrapped__ = fun
+    return _inner
+
+
 @pytest.fixture(scope='session')
 def celery_config():
     return {

+ 7 - 4
t/integration/test_canvas.py

@@ -1,21 +1,22 @@
 from __future__ import absolute_import, unicode_literals
 import pytest
-from flaky import flaky
 from celery import chain, chord, group
 from celery.exceptions import TimeoutError
 from celery.result import AsyncResult, GroupResult
+from .conftest import flaky
 from .tasks import add, collect_ids, ids
 
 TIMEOUT = 120
 
 
-@flaky
 class test_chain:
 
+    @flaky
     def test_simple_chain(self, manager):
         c = add.s(4, 4) | add.s(8) | add.s(16)
         assert c().get(timeout=TIMEOUT) == 32
 
+    @flaky
     def test_complex_chain(self, manager):
         c = (
             add.s(2, 2) | (
@@ -26,6 +27,7 @@ class test_chain:
         res = c()
         assert res.get(timeout=TIMEOUT) == [32, 33, 34, 35]
 
+    @flaky
     def test_parent_ids(self, manager, num=10):
         assert manager.inspect().ping()
         c = chain(ids.si(i=i) for i in range(num))
@@ -55,9 +57,9 @@ class test_chain:
             i -= 1
 
 
-@flaky
 class test_group:
 
+    @flaky
     def test_parent_ids(self, manager):
         assert manager.inspect().ping()
         g = (
@@ -84,9 +86,9 @@ def assert_ids(r, expected_value, expected_root_id, expected_parent_id):
     assert parent_id == expected_parent_id
 
 
-@flaky
 class test_chord:
 
+    @flaky
     def test_parent_ids(self, manager):
         if not manager.app.conf.result_backend.startswith('redis'):
             raise pytest.skip('Requires redis result backend.')
@@ -101,6 +103,7 @@ class test_chord:
         )
         self.assert_parentids_chord(g(), expected_root_id)
 
+    @flaky
     def test_parent_ids__OR(self, manager):
         if not manager.app.conf.result_backend.startswith('redis'):
             raise pytest.skip('Requires redis result backend.')

+ 3 - 2
t/integration/test_tasks.py

@@ -1,17 +1,18 @@
 from __future__ import absolute_import, unicode_literals
-from flaky import flaky
 from celery import group
+from .conftest import flaky
 from .tasks import print_unicode, sleeping
 
 
-@flaky
 class test_tasks:
 
+    @flaky
     def test_task_accepted(self, manager, sleep=1):
         r1 = sleeping.delay(sleep)
         sleeping.delay(sleep)
         manager.assert_accepted([r1.id])
 
+    @flaky
     def test_unicode_task(self, manager):
         manager.join(
             group(print_unicode.s() for _ in range(5))(),