Skip to content

Commit

Permalink
Make test_socket_manager tests pass on PyPy
Browse files Browse the repository at this point in the history
by applying patch from pjenvey on IRC:
http://paste.ofcode.org/a588X46F8gNdFDSHDtK5NP
  • Loading branch information
msabramo committed Apr 18, 2014
1 parent 5dc9a69 commit 0ad4db8
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions supervisor/tests/test_socket_manager.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
"""Test suite for supervisor.socket_manager"""

import gc
import sys
import os
import unittest
import supervisor.medusa.text_socket as 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
Expand Down Expand Up @@ -45,6 +52,7 @@ def test_on_delete(self):
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):
Expand Down Expand Up @@ -86,6 +94,10 @@ def test_decr_at_zero_raises_error(self):
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
Expand Down Expand Up @@ -149,10 +161,12 @@ def test_socket_lifecycle(self):
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)
Expand All @@ -165,6 +179,7 @@ def test_socket_lifecycle(self):
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)
Expand All @@ -179,6 +194,7 @@ def test_logging(self):
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])

Expand Down Expand Up @@ -215,6 +231,12 @@ def test_close_requires_prepared_socket(self):
except Exception as 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__])

Expand Down

0 comments on commit 0ad4db8

Please sign in to comment.