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
 simplejson
-flaky>=3.3
 -r extras/redis.txt
 -r extras/redis.txt

+ 14 - 0
t/integration/conftest.py

@@ -1,12 +1,26 @@
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 import os
 import os
 import pytest
 import pytest
+from functools import wraps
 from celery.contrib.testing.manager import Manager
 from celery.contrib.testing.manager import Manager
 
 
 TEST_BROKER = os.environ.get('TEST_BROKER', 'pyamqp://')
 TEST_BROKER = os.environ.get('TEST_BROKER', 'pyamqp://')
 TEST_BACKEND = os.environ.get('TEST_BACKEND', 'redis://')
 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')
 @pytest.fixture(scope='session')
 def celery_config():
 def celery_config():
     return {
     return {

+ 7 - 4
t/integration/test_canvas.py

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