Browse Source

Tests pass on PyPy

Ask Solem 11 years ago
parent
commit
a50d1cd549
2 changed files with 14 additions and 9 deletions
  1. 8 3
      celery/tests/worker/test_autoreload.py
  2. 6 6
      celery/worker/autoreload.py

+ 8 - 3
celery/tests/worker/test_autoreload.py

@@ -18,7 +18,7 @@ from celery.worker.autoreload import (
     Autoreloader,
 )
 
-from celery.tests.case import AppCase, Case, Mock, patch, mock_open
+from celery.tests.case import AppCase, Case, Mock, SkipTest, patch, mock_open
 
 
 class test_WorkerComponent(AppCase):
@@ -34,7 +34,8 @@ class test_WorkerComponent(AppCase):
 
     @patch('select.kevent', create=True)
     @patch('select.kqueue', create=True)
-    def test_create_ev(self, kqueue, kevent):
+    @patch('kombu.utils.eventio.kqueue')
+    def test_create_ev(self, kq, kqueue, kevent):
         w = Mock()
         w.use_eventloop = True
         x = WorkerComponent(w)
@@ -122,6 +123,9 @@ class test_KQueueMonitor(Case):
         x.stop()
 
     def test_register_with_event_loop(self):
+        from kombu.utils import eventio
+        if eventio.kqueue is None:
+            raise SkipTest('version of kombu does not work with pypy')
         x = KQueueMonitor(['a', 'b'])
         hub = Mock(name='hub')
         x.add_events = Mock(name='add_events()')
@@ -217,7 +221,8 @@ class test_InotifyMonitor(Case):
 class test_default_implementation(Case):
 
     @patch('select.kqueue', create=True)
-    def test_kqueue(self, kqueue):
+    @patch('kombu.utils.eventio.kqueue', create=True)
+    def test_kqueue(self, kq, kqueue):
         self.assertEqual(default_implementation(), 'kqueue')
 
     @patch('celery.worker.autoreload.pyinotify')

+ 6 - 6
celery/worker/autoreload.py

@@ -135,11 +135,11 @@ class KQueueMonitor(BaseMonitor):
         self.fdmap = {}
 
     def register_with_event_loop(self, hub):
-        from kombu.utils.eventio import _kqueue
-        self._kq = _kqueue()
-        self.add_events(self._kq)
-        self._kq.on_file_change = self.handle_event
-        hub.add_reader(self._kq._kqueue, self._kq.poll, 0)
+        if eventio.kqueue is not None:
+            self._kq = eventio._kqueue()
+            self.add_events(self._kq)
+            self._kq.on_file_change = self.handle_event
+            hub.add_reader(self._kq._kqueue, self._kq.poll, 0)
 
     def on_event_loop_close(self, hub):
         self.close(self._kq)
@@ -227,7 +227,7 @@ class InotifyMonitor(_ProcessEvent):
 
 
 def default_implementation():
-    if hasattr(select, 'kqueue'):
+    if hasattr(select, 'kqueue') and eventio.kqueue is not None:
         return 'kqueue'
     elif sys.platform.startswith('linux') and pyinotify:
         return 'inotify'