Fix nondeterministic test ordering bug.

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.

Fix a unit test bug. Fix was in rackerlabs repo, but somehow never
made it to stackforge.

Change-Id: I6bd19b9ee9ce91e6b68180efede1c16b29c4b7ff
This commit is contained in:
Sandy Walsh 2014-09-15 20:04:57 +00:00
parent 6cc503bc44
commit 53e8d51bf1
4 changed files with 103 additions and 129 deletions

@ -286,9 +286,9 @@ def _ping_processing_with_service(pings, service, version=1):
with transaction.commit_on_success():
for msg_id, status_info in pings.items():
try:
exists = _find_exists_with_message_id(msg_id, exists_model,
rexists = _find_exists_with_message_id(msg_id, exists_model,
service)
for exists in exists:
for exists in rexists:
if version == 1:
exists.send_status = status_info
elif version == 2:

@ -506,7 +506,7 @@ class DBAPITestCase(StacktachBaseTestCase):
fake_request.body = body
info_values = self.mox.CreateMockAnything()
models.TenantInfo.objects.filter(tenant__in=['test_old', 'test_new']).AndReturn(info_values)
models.TenantInfo.objects.filter(tenant__in=mox.SameElementsAs(['test_old', 'test_new'])).AndReturn(info_values)
info_values.values('tenant').AndReturn([dict(tenant='test_old')])
models.TenantInfo.objects.bulk_create(mox.And(
Length(1), mox.IsA(list), mox.In(mox.And(
@ -517,7 +517,7 @@ class DBAPITestCase(StacktachBaseTestCase):
))))
fake_tenants = self.mox.CreateMockAnything()
models.TenantInfo.objects.filter(tenant__in=['test_old', 'test_new'])\
models.TenantInfo.objects.filter(tenant__in=mox.SameElementsAs(['test_old', 'test_new']))\
.AndReturn(fake_tenants)
fake_tenants.update(last_updated=TEST_DATE)
fake_tenants.__iter__().AndReturn(iter(TEST_OBJECTS))
@ -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()

@ -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()
for value in sent_results.values():
self.pool.apply_async(glance_verifier._verify,
args=([exist4],), callback=None)
self.pool.apply_async(glance_verifier._verify, args=([exist5],),
callback=None)
args=(value,), callback=None)
for value in results.values():
self.pool.apply_async(glance_verifier._verify,
args=([exist1, exist2],), callback=None)
self.pool.apply_async(glance_verifier._verify, args=([exist3],),
callback=None)
args=(value,), callback=None)
self.mox.ReplayAll()
self.glance_verifier.verify_for_range(when_max)
@ -579,9 +577,8 @@ 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],),
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(

@ -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'