瀏覽代碼

Make test_socket_manager tests pass on PyPy

by applying patch from pjenvey on IRC:
http://paste.ofcode.org/a588X46F8gNdFDSHDtK5NP
Marc Abramowitz 11 年之前
父節點
當前提交
8c84f9fc40
共有 1 個文件被更改,包括 22 次插入0 次删除
  1. 22 0
      supervisor/tests/test_socket_manager.py

+ 22 - 0
supervisor/tests/test_socket_manager.py

@@ -1,11 +1,18 @@
 """Test suite for supervisor.socket_manager"""
 
+import gc
 import sys
 import os
 import unittest
 import socket
 import tempfile
 
+try:
+    import __pypy__
+    PYPY = True
+except ImportError:
+    PYPY = False
+
 from supervisor.tests.base import DummySocketConfig
 from supervisor.tests.base import DummyLogger
 from supervisor.datatypes import UnixStreamSocketConfig
@@ -45,6 +52,7 @@ class ProxyTest(unittest.TestCase):
         proxy = self._makeOne(TestObject(), on_delete=self.setOnDeleteCalled)
         self.assertEqual(5, proxy.getValue())
         proxy = None
+        gc_collect()
         self.assertTrue(self.on_deleteCalled)
 
 class ReferenceCounterTest(unittest.TestCase):
@@ -86,6 +94,10 @@ class ReferenceCounterTest(unittest.TestCase):
         self.assertRaises(Exception, ctr.decrement)
 
 class SocketManagerTest(unittest.TestCase):
+
+    def tearDown(self):
+        gc_collect()
+
     def _getTargetClass(self):
         from supervisor.socket_manager import SocketManager
         return SocketManager
@@ -149,10 +161,12 @@ class SocketManagerTest(unittest.TestCase):
         self.assertTrue(sock_manager.is_prepared())
         self.assertFalse(sock_manager.socket.close_called)
         sock = None
+        gc_collect()
         # Socket not actually closed yet b/c ref ct is 1
         self.assertTrue(sock_manager.is_prepared())
         self.assertFalse(sock_manager.socket.close_called)
         sock2 = None
+        gc_collect()
         # Socket closed
         self.assertFalse(sock_manager.is_prepared())
         self.assertTrue(sock_manager.socket.close_called)
@@ -165,6 +179,7 @@ class SocketManagerTest(unittest.TestCase):
         self.assertNotEqual(sock_id, sock3_id)
         # Drop ref ct to zero
         del sock3
+        gc_collect()
         # Now assert that socket is closed
         self.assertFalse(sock_manager.is_prepared())
         self.assertTrue(sock_manager.socket.close_called)
@@ -179,6 +194,7 @@ class SocketManagerTest(unittest.TestCase):
         self.assertEqual('Creating socket %s' % repr(conf), logger.data[0])
         # socket close
         del sock
+        gc_collect()
         self.assertEqual(len(logger.data), 2)
         self.assertEqual('Closing socket %s' % repr(conf), logger.data[1])
 
@@ -215,6 +231,12 @@ class SocketManagerTest(unittest.TestCase):
         except Exception, e:
             self.assertEqual(e.args[0], 'Socket has not been prepared')
 
+def gc_collect():
+    if PYPY:
+        gc.collect()
+        gc.collect()
+        gc.collect()
+
 def test_suite():
     return unittest.findTestCases(sys.modules[__name__])