|
@@ -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__])
|
|
|
|