Skip to content

Commit

Permalink
Fix largest memory leak in ksl tests
Browse files Browse the repository at this point in the history
 * Explicitly kill wsgi servers that are launched
 * Fixes bug 929653
 * Fix spaceypoo

Change-Id: Id4b2f06749cb57c2680d37c1e4014c020d95ad5e
  • Loading branch information
sleepsonthefloor committed Feb 9, 2012
1 parent 05b2583 commit e5ffa74
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
7 changes: 6 additions & 1 deletion keystone/common/wsgi.py
Expand Up @@ -55,6 +55,7 @@ def __init__(self, application, port, threads=1000):
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."""
Expand All @@ -63,10 +64,14 @@ def start(self, host='0.0.0.0', key=None, backlog=128):
'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:
Expand Down
22 changes: 11 additions & 11 deletions tests/test_keystoneclient.py
@@ -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

Expand All @@ -19,9 +17,6 @@ def setUp(self):
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)

Expand All @@ -36,14 +31,19 @@ def setUp(self):
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):
Expand Down Expand Up @@ -473,10 +473,10 @@ def test_tenant_add_and_remove_user(self):
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']):
# use python's scope fall through to leave roleref_ref set
break
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

client.roles.remove_user_from_tenant(tenant_id=self.tenant_baz['id'],
user_id=self.user_foo['id'],
Expand Down

0 comments on commit e5ffa74

Please sign in to comment.