Remove concurrency constraint for functional tests

Remove concurrency constraint for functional tests, and fix
the issues found after enable concurrency.

Change-Id: I7d27009ed9f7cec9f28c727d836a0efc1c75ef41
This commit is contained in:
Ethan Lynn 2016-04-02 14:04:37 +08:00
parent d7d3557894
commit 5866a182cc
8 changed files with 44 additions and 12 deletions

View File

@ -31,13 +31,11 @@ class TrustMiddleware(wsgi.Middleware):
"""
rpcc = rpc.EngineClient()
cred_exists = False
res = rpcc.credential_get(ctx)
if res:
trust_id = res.get('trust', None)
if trust_id:
return trust_id
cred_exists = True
params = {
'auth_url': ctx.auth_url,
@ -59,11 +57,8 @@ class TrustMiddleware(wsgi.Middleware):
# Create a trust if no existing one found
trust = kc.trust_create(ctx.user, admin_id, ctx.project, ctx.roles)
# update cache
if cred_exists:
rpcc.credential_update(ctx, trust.id)
else:
rpcc.credential_create(ctx, trust.id)
# If credential not exists, create it, otherwise update it.
rpcc.credential_create(ctx, trust.id)
return trust.id

View File

@ -258,6 +258,10 @@ def cred_delete(context, user, project):
return IMPL.cred_delete(context, user, project)
def cred_create_update(context, values):
return IMPL.cred_create_update(context, values)
# Events
def event_create(context, values):
return IMPL.event_create(context, values)

View File

@ -690,6 +690,16 @@ def cred_delete(context, user, project):
session.delete(cred)
def cred_create_update(context, values):
cred = cred_get(context, values.get('user'), values.get('project'))
if not cred:
return cred_create(context, values)
else:
user = values.pop('user')
project = values.pop('project')
return cred_update(context, user, project, values)
# Events
def _delete_event_rows(context, cluster_id, limit):
# MySQL does not support LIMIT in subqueries,

View File

@ -202,7 +202,7 @@ class EngineService(service.Service):
}
}
}
db_api.cred_create(context, values)
db_api.cred_create_update(context, values)
return {'cred': cred}
@request_context

View File

@ -78,8 +78,7 @@ class TestClusterMembership(base.SenlinFunctionalTest):
node2 = test_api.get_node(self.client, node2['id'])
self.assertEqual(cluster['id'], node1['cluster_id'])
self.assertEqual(cluster['id'], node2['cluster_id'])
self.assertEqual(2, node1['index'])
self.assertEqual(3, node2['index'])
self.assertEqual([2, 3], sorted([node1['index'], node2['index']]))
# Create one more orphan node and add it to cluster
node3 = test_api.create_node(self.client,

View File

@ -77,7 +77,7 @@ class TestTrustMiddleware(base.SenlinTestCase):
uid='FAKE_ID', passwd='FAKE_PASS')
mock_keystone.trust_get_by_trustor.assert_called_once_with(
self.context.user, 'FAKE_ADMIN_ID', self.context.project)
x_rpc.credential_update.assert_called_once_with(
x_rpc.credential_create.assert_called_once_with(
self.context, 'FAKE_TRUST_ID')
@mock.patch.object(context, "get_service_context")

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
from senlin.db.sqlalchemy import api as db_api
from senlin.tests.unit.common import base
@ -83,3 +84,22 @@ class DBAPICredentialTest(base.SenlinTestCase):
db_api.cred_create(self.ctx, values)
cred = db_api.cred_delete(self.ctx, USER_ID, PROJECT_ID)
self.assertIsNone(cred)
def test_cred_create_update(self):
cred = db_api.cred_create_update(self.ctx, values)
self.assertIsNotNone(cred)
self.assertEqual(USER_ID, cred.user)
self.assertEqual(PROJECT_ID, cred.project)
self.assertEqual(
{'openstack': {'trust': '01234567890123456789012345678901'}},
cred.cred)
self.assertEqual({}, cred.data)
new_values = copy.deepcopy(values)
new_values['cred']['openstack']['trust'] = 'newtrust'
cred = db_api.cred_create_update(self.ctx, new_values)
self.assertEqual(USER_ID, cred.user)
self.assertEqual(PROJECT_ID, cred.project)
self.assertEqual(
{'openstack': {'trust': 'newtrust'}},
cred.cred)

View File

@ -27,9 +27,13 @@ setenv = VIRTUAL_ENV={envdir}
PYTHONHASHSEED=0
OS_TEST_PATH=senlin/tests/functional
passenv = OS_USERNAME OS_PASSWORD OS_TENANT_NAME OS_USER_DOMAIN_NAME OS_PROJECT_DOMAIN_NAME OS_REGION_NAME OS_AUTH_URL
# By default ostestr will set concurrency
# to ncpu, to specify something else use
# the concurrency=<n> option.
# call ie: 'tox -efunctional -- --concurrency=4'
commands =
find . -type f -name "*.pyc" -delete
ostestr --slowest --concurrency 1 {posargs}
ostestr --slowest {posargs}
[testenv:debug]
commands = oslo_debug_helper {posargs}