Fix largest memory leak in ksl tests

* Explicitly kill wsgi servers that are launched
 * Fixes bug 929653
 * Fix spaceypoo

Change-Id: Id4b2f06749cb57c2680d37c1e4014c020d95ad5e
This commit is contained in:
Anthony Young 2012-02-09 19:17:29 +00:00
parent 05b2583dfa
commit e5ffa74733
2 changed files with 17 additions and 12 deletions

View File

@ -55,6 +55,7 @@ class Server(object):
self.port = port
self.pool = eventlet.GreenPool(threads)
self.socket_info = {}
self.greenthread = None
def start(self, host='0.0.0.0', key=None, backlog=128):
"""Run a WSGI server with the given application."""
@ -63,10 +64,14 @@ class Server(object):
'host': host,
'port': self.port})
socket = eventlet.listen((host, self.port), backlog=backlog)
self.pool.spawn_n(self._run, self.application, socket)
self.greenthread = self.pool.spawn(self._run, self.application, socket)
if key:
self.socket_info[key] = socket.getsockname()
def kill(self):
if self.greenthread:
self.greenthread.kill()
def wait(self):
"""Wait until all servers have completed running."""
try:

View File

@ -1,12 +1,10 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
import nose.exc
from keystone import config
from keystone import test
import default_fixtures
CONF = config.CONF
OPENSTACK_REPO = 'https://review.openstack.org/p/openstack'
KEYSTONECLIENT_REPO = '%s/python-keystoneclient.git' % OPENSTACK_REPO
@ -19,9 +17,6 @@ class CompatTestCase(test.TestCase):
self.add_path(revdir)
self.clear_module('keystoneclient')
self.public_app = self.loadapp('keystone', name='main')
self.admin_app = self.loadapp('keystone', name='admin')
self.load_backends()
self.load_fixtures(default_fixtures)
@ -36,14 +31,19 @@ class CompatTestCase(test.TestCase):
self.user_foo['id'], self.tenant_bar['id'],
dict(roles=['keystone_admin'], is_admin='1'))
def tearDown(self):
self.public_server.kill()
self.admin_server.kill()
self.public_server = None
self.admin_server = None
super(CompatTestCase, self).tearDown()
def _public_url(self):
public_port = self.public_server.socket_info['socket'][1]
CONF.public_port = public_port
return "http://localhost:%s/v2.0" % public_port
def _admin_url(self):
admin_port = self.admin_server.socket_info['socket'][1]
CONF.admin_port = admin_port
return "http://localhost:%s/v2.0" % admin_port
def _client(self, **kwargs):
@ -473,8 +473,8 @@ class KcEssex3TestCase(CompatTestCase, KeystoneClientTests):
roleref_refs = client.roles.get_user_role_refs(
user_id=self.user_foo['id'])
for roleref_ref in roleref_refs:
if (roleref_ref.roleId == self.role_useless['id'] and
roleref_ref.tenantId == self.tenant_baz['id']):
if (roleref_ref.roleId == self.role_useless['id']
and roleref_ref.tenantId == self.tenant_baz['id']):
# use python's scope fall through to leave roleref_ref set
break