Fix ordering problem causing tests to fail randomly

Iterates the dictionary in the same order when building the mox
as the code uses when performing the operations.

Also changed the UUID's to make them a little more
distquishing.

Change-Id: I2c43e7f85e1b2655a46c24dc209386fe7fb48fa4
This commit is contained in:
Sandy Walsh 2014-09-15 20:04:57 +00:00
parent 38590dd5c1
commit 7c591f2b57
4 changed files with 101 additions and 127 deletions

View File

@ -5,9 +5,9 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@ -284,26 +284,26 @@ def _find_exists_with_message_id(msg_id, exists_model, service):
def _ping_processing_with_service(pings, service, version=1):
exists_model = _exists_model_factory(service)['klass']
with transaction.commit_on_success():
for msg_id, status_info in pings.items():
try:
exists = _find_exists_with_message_id(msg_id, exists_model,
service)
for exists in exists:
if version == 1:
exists.send_status = status_info
elif version == 2:
exists.send_status = status_info.get("status", 0)
exists.event_id = status_info.get("event_id", "")
exists.save()
except exists_model.DoesNotExist:
msg = "Could not find Exists record with message_id = '%s' for %s"
msg = msg % (msg_id, service)
raise NotFoundException(message=msg)
except exists_model.MultipleObjectsReturned:
msg = "Multiple Exists records with message_id = '%s' for %s"
msg = msg % (msg_id, service)
print msg
raise APIException(message=msg)
for msg_id, status_info in pings.items():
try:
rexists = _find_exists_with_message_id(msg_id, exists_model,
service)
for exists in rexists:
if version == 1:
exists.send_status = status_info
elif version == 2:
exists.send_status = status_info.get("status", 0)
exists.event_id = status_info.get("event_id", "")
exists.save()
except exists_model.DoesNotExist:
msg = "Could not find Exists record with message_id = '%s' for %s"
msg = msg % (msg_id, service)
raise NotFoundException(message=msg)
except exists_model.MultipleObjectsReturned:
msg = "Multiple Exists records with message_id = '%s' for %s"
msg = msg % (msg_id, service)
print msg
raise APIException(message=msg)
def _exists_send_status_batch(request):
@ -545,14 +545,14 @@ def _update_tenant_info_cache(tenant_info):
def _batch_update_tenant_info(info_list):
tenant_info = dict((str(info['tenant']), info) for info in info_list)
tenant_ids = set(tenant_info)
old_tenants = set(t['tenant'] for t in
old_tenants = set(t['tenant'] for t in
models.TenantInfo.objects
.filter(tenant__in=list(tenant_ids))
.values('tenant'))
new_tenants = []
now = datetime.utcnow()
for tenant in (tenant_ids - old_tenants):
new_tenants.append(models.TenantInfo(tenant=tenant,
new_tenants.append(models.TenantInfo(tenant=tenant,
name=tenant_info[tenant]['name'],
last_updated=now))
if new_tenants:
@ -612,5 +612,5 @@ def update_tenant_info(request, tenant_id):
body = json.loads(request.body)
if body['tenant'] != tenant_id:
raise BadRequestException(message="Invalid tenant: %s != %s" % (body['tenant'], tenant_id))
raise BadRequestException(message="Invalid tenant: %s != %s" % (body['tenant'], tenant_id))
_update_tenant_info_cache(body)

View File

@ -5,9 +5,9 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@ -430,7 +430,7 @@ class DBAPITestCase(StacktachBaseTestCase):
fake_request = self.mox.CreateMockAnything()
fake_request.method = 'PUT'
body_dict = dict(tenant=TEST_TENANT,
body_dict = dict(tenant=TEST_TENANT,
name='test name',
types=dict(test_type='thingy'))
body = json.dumps(body_dict)
@ -459,7 +459,7 @@ class DBAPITestCase(StacktachBaseTestCase):
TEST_DATE='test date time'
mock_t1 = self.mox.CreateMock(models.TenantInfo)
mock_t1.id = 1
mock_t1.id = 1
mock_t1.tenant = 'test_old'
mock_t1.name = 'test old name'
mock_t1.types = self.mox.CreateMockAnything()
@ -467,7 +467,7 @@ class DBAPITestCase(StacktachBaseTestCase):
mock_t1.last_updated = TEST_DATE
mock_t2 = self.mox.CreateMock(models.TenantInfo)
mock_t2.id = 2
mock_t2.id = 2
mock_t2.tenant = 'test_new'
mock_t2.name = 'test new name'
mock_t2.last_updated = TEST_DATE
@ -496,10 +496,10 @@ class DBAPITestCase(StacktachBaseTestCase):
fake_request = self.mox.CreateMockAnything()
fake_request.method = 'PUT'
body_dict = dict(tenants=[dict(tenant='test_old',
body_dict = dict(tenants=[dict(tenant='test_old',
name='test old name',
types=dict(test_type='thingy')),
dict(tenant='test_new',
dict(tenant='test_new',
name='test new name',
types=dict(test_type='whatzit'))])
body = json.dumps(body_dict)
@ -679,22 +679,18 @@ class DBAPITestCase(StacktachBaseTestCase):
trans_obj = self.mox.CreateMockAnything()
transaction.commit_on_success().AndReturn(trans_obj)
trans_obj.__enter__()
results1 = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results1)
exists1 = self.mox.CreateMockAnything()
results1.get(message_id=MESSAGE_ID_2).AndReturn(exists1)
exists1.save()
results2 = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results2)
exists2 = self.mox.CreateMockAnything()
results2.get(message_id=MESSAGE_ID_1).AndReturn(exists2)
exists2.save()
for uuid, code in messages.items():
results = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results)
exists = self.mox.CreateMockAnything()
results.get(message_id=uuid).AndReturn(exists)
exists.save()
trans_obj.__exit__(None, None, None)
self.mox.ReplayAll()
resp = dbapi.exists_send_status(fake_request, 'batch')
self.assertEqual(resp.status_code, 200)
exists1.send_status = 200
exists.send_status = 200
self.mox.VerifyAll()
def test_send_status_batch_accepts_post_for_nova_and_glance_when_version_is_1(
@ -719,25 +715,20 @@ class DBAPITestCase(StacktachBaseTestCase):
results1.get(message_id=MESSAGE_ID_3).AndReturn(exists1)
exists1.save()
trans_obj.__exit__(None, None, None)
trans_obj = self.mox.CreateMockAnything()
transaction.commit_on_success().AndReturn(trans_obj)
trans_obj.__enter__()
results1 = self.mox.CreateMockAnything()
models.ImageExists.objects.select_for_update().AndReturn(results1)
exists1A = self.mox.CreateMockAnything()
exists1B = self.mox.CreateMockAnything()
results1.filter(message_id=MESSAGE_ID_2).AndReturn(
[exists1A, exists1B])
exists1A.save()
exists1B.save()
results2 = self.mox.CreateMockAnything()
models.ImageExists.objects.select_for_update().AndReturn(results2)
exists2A = self.mox.CreateMockAnything()
exists2B = self.mox.CreateMockAnything()
results2.filter(message_id=MESSAGE_ID_1).AndReturn(
[exists2A, exists2B])
exists2A.save()
exists2B.save()
for uuid, code in messages['glance'].items():
query = self.mox.CreateMockAnything()
models.ImageExists.objects.select_for_update().AndReturn(query)
existsA = self.mox.CreateMockAnything()
existsB = self.mox.CreateMockAnything()
query.filter(message_id=uuid).AndReturn([existsA, existsB])
existsA.save()
existsB.save()
trans_obj.__exit__(None, None, None)
self.mox.ReplayAll()
@ -757,16 +748,12 @@ class DBAPITestCase(StacktachBaseTestCase):
trans_obj = self.mox.CreateMockAnything()
transaction.commit_on_success().AndReturn(trans_obj)
trans_obj.__enter__()
results1 = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results1)
exists1 = self.mox.CreateMockAnything()
results1.get(message_id=MESSAGE_ID_2).AndReturn(exists1)
exists1.save()
results2 = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results2)
exists2 = self.mox.CreateMockAnything()
results2.get(message_id=MESSAGE_ID_1).AndReturn(exists2)
exists2.save()
for uuid, code in messages.items():
results = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results)
exists = self.mox.CreateMockAnything()
results.get(message_id=uuid).AndReturn(exists)
exists.save()
trans_obj.__exit__(None, None, None)
self.mox.ReplayAll()
@ -799,39 +786,29 @@ class DBAPITestCase(StacktachBaseTestCase):
body = json.dumps(body_dict)
fake_request.body = body
self.mox.StubOutWithMock(transaction, 'commit_on_success')
trans_obj = self.mox.CreateMockAnything()
transaction.commit_on_success().AndReturn(trans_obj)
trans_obj.__enter__()
results1 = self.mox.CreateMockAnything()
results2 = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results1)
exists1 = self.mox.CreateMockAnything()
results1.get(message_id=MESSAGE_ID_4).AndReturn(exists1)
exists1.save()
models.InstanceExists.objects.select_for_update().AndReturn(results2)
exists2 = self.mox.CreateMockAnything()
results2.get(message_id=MESSAGE_ID_3).AndReturn(exists2)
exists2.save()
for uuid, code in messages['nova'].items():
results = self.mox.CreateMockAnything()
models.InstanceExists.objects.select_for_update().AndReturn(results)
exists = self.mox.CreateMockAnything()
results.get(message_id=uuid).AndReturn(exists)
exists.save()
trans_obj.__exit__(None, None, None)
trans_obj = self.mox.CreateMockAnything()
transaction.commit_on_success().AndReturn(trans_obj)
trans_obj.__enter__()
results1 = self.mox.CreateMockAnything()
models.ImageExists.objects.select_for_update().AndReturn(results1)
exists1A = self.mox.CreateMockAnything()
exists1B = self.mox.CreateMockAnything()
results1.filter(message_id=MESSAGE_ID_2).AndReturn(
[exists1A, exists1B])
exists1A.save()
exists1B.save()
results2 = self.mox.CreateMockAnything()
models.ImageExists.objects.select_for_update().AndReturn(results2)
exists2A = self.mox.CreateMockAnything()
exists2B = self.mox.CreateMockAnything()
results2.filter(message_id=MESSAGE_ID_1).AndReturn(
[exists2A, exists2B])
exists2A.save()
exists2B.save()
for uuid, code in messages['glance'].items():
results = self.mox.CreateMockAnything()
models.ImageExists.objects.select_for_update().AndReturn(results)
existsA = self.mox.CreateMockAnything()
existsB = self.mox.CreateMockAnything()
results.filter(message_id=uuid).AndReturn([existsA, existsB])
existsA.save()
existsB.save()
trans_obj.__exit__(None, None, None)
self.mox.ReplayAll()

View File

@ -5,9 +5,9 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@ -284,8 +284,8 @@ class GlanceVerifierTestCase(StacktachBaseTestCase):
self.assertEqual(nf.field_name, 'image_size')
self.assertEqual(
nf.reason, "Failed at 2014-01-02 03:04:05 UTC for "
"12345678-6352-4dbc-8271-96cc54bf14cd: image_size field was "
"null for exist id 23")
"%s: image_size field was "
"null for exist id 23" % IMAGE_UUID_1)
self.mox.VerifyAll()
def test_should_verify_that_created_at_in_exist_is_not_null(self):
@ -305,8 +305,8 @@ class GlanceVerifierTestCase(StacktachBaseTestCase):
self.assertEqual(exception.field_name, 'created_at')
self.assertEqual(exception.reason,
"Failed at 2014-01-01 01:02:03 UTC for "
"12345678-6352-4dbc-8271-96cc54bf14cd: created_at "
"field was null for exist id 23")
"%s: created_at "
"field was null for exist id 23" % IMAGE_UUID_1)
self.mox.VerifyAll()
def test_should_verify_that_uuid_in_exist_is_not_null(self):
@ -348,8 +348,8 @@ class GlanceVerifierTestCase(StacktachBaseTestCase):
self.assertEqual(
nf.reason,
"Failed at 2014-01-01 01:02:03 UTC for "
"12345678-6352-4dbc-8271-96cc54bf14cd: owner field was null "
"for exist id 23")
"%s: owner field was null "
"for exist id 23" % IMAGE_UUID_1)
self.mox.VerifyAll()
def test_should_verify_that_uuid_value_is_uuid_like(self):
@ -536,14 +536,12 @@ class GlanceVerifierTestCase(StacktachBaseTestCase):
exist3.save()
exist4.save()
exist5.save()
self.pool.apply_async(glance_verifier._verify,
args=([exist4],), callback=None)
self.pool.apply_async(glance_verifier._verify, args=([exist5],),
callback=None)
self.pool.apply_async(glance_verifier._verify,
args=([exist1, exist2],), callback=None)
self.pool.apply_async(glance_verifier._verify, args=([exist3],),
callback=None)
for value in sent_results.values():
self.pool.apply_async(glance_verifier._verify,
args=(value,), callback=None)
for value in results.values():
self.pool.apply_async(glance_verifier._verify,
args=(value,), callback=None)
self.mox.ReplayAll()
self.glance_verifier.verify_for_range(when_max)
@ -579,10 +577,9 @@ class GlanceVerifierTestCase(StacktachBaseTestCase):
exist1.save()
exist2.save()
exist3.save()
self.pool.apply_async(glance_verifier._verify, args=([exist1, exist2],),
callback=callback)
self.pool.apply_async(glance_verifier._verify, args=([exist3],),
callback=callback)
for value in results.values():
self.pool.apply_async(glance_verifier._verify, args=(value,),
callback=callback)
self.mox.ReplayAll()
self.glance_verifier.verify_for_range(
when_max, callback=callback)

View File

@ -5,9 +5,9 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@ -22,10 +22,10 @@ TENANT_ID_2 = 'testtenantid2'
from stacktach import datetime_to_decimal as dt
IMAGE_UUID_1 = "12345678-6352-4dbc-8271-96cc54bf14cd"
IMAGE_UUID_1 = "1111aaaa-6352-4dbc-8271-96cc54bf14cd"
INSTANCE_ID_1 = "08f685d9-6352-4dbc-8271-96cc54bf14cd"
INSTANCE_ID_2 = "515adf96-41d3-b86d-5467-e584edc61dab"
INSTANCE_ID_1 = "2222bbbb-6352-4dbc-8271-96cc54bf14cd"
INSTANCE_ID_2 = "3333cccc-41d3-b86d-5467-e584edc61dab"
INSTANCE_FLAVOR_ID_1 = "1"
INSTANCE_FLAVOR_ID_2 = "performance2-120"
@ -36,16 +36,16 @@ INSTANCE_TYPE_ID_2 = '54321'
DUMMY_TIME = datetime.datetime.utcnow()
DECIMAL_DUMMY_TIME = dt.dt_to_decimal(DUMMY_TIME)
MESSAGE_ID_1 = "7f28f81b-29a2-43f2-9ba1-ccb3e53ab6c8"
MESSAGE_ID_2 = "4d596126-0f04-4329-865f-7b9a7bd69bcf"
MESSAGE_ID_3 = "4d596126-0f04-4329-865f-797387adf45c"
MESSAGE_ID_4 = "4d596126-0f04-4329-865f-797387adf45e"
MESSAGE_ID_1 = "4444dddd-29a2-43f2-9ba1-ccb3e53ab6c8"
MESSAGE_ID_2 = "5555eeee-0f04-4329-865f-7b9a7bd69bcf"
MESSAGE_ID_3 = "6666ffff-0f04-4329-865f-797387adf45c"
MESSAGE_ID_4 = "7777aaaa-0f04-4329-865f-797387adf45e"
BANDWIDTH_PUBLIC_OUTBOUND = 1697240969
REQUEST_ID_1 = 'req-611a4d70-9e47-4b27-a95e-27996cc40c06'
REQUEST_ID_2 = 'req-a951dec0-52ee-425d-9f56-d68bd1ad00ac'
REQUEST_ID_3 = 'req-039a33f7-5849-4406-8166-4db8cd085f52'
REQUEST_ID_1 = 'req-8888bbbb-9e47-4b27-a95e-27996cc40c06'
REQUEST_ID_2 = 'req-9999cccc-52ee-425d-9f56-d68bd1ad00ac'
REQUEST_ID_3 = 'req-0000dddd-5849-4406-8166-4db8cd085f52'
RAX_OPTIONS_1 = '1'
RAX_OPTIONS_2 = '2'