diff --git a/heat/tests/aws/test_waitcondition.py b/heat/tests/aws/test_waitcondition.py index 7c6406e926..2353469e72 100644 --- a/heat/tests/aws/test_waitcondition.py +++ b/heat/tests/aws/test_waitcondition.py @@ -100,25 +100,19 @@ class WaitConditionTest(common.HeatTestCase): stack.store() if stub: - id = identifier.ResourceIdentifier('test_tenant', stack.name, - stack.id, '', 'WaitHandle') - self.m.StubOutWithMock(aws_wch.WaitConditionHandle, 'identifier') - aws_wch.WaitConditionHandle.identifier( - ).MultipleTimes().AndReturn(id) - + res_id = identifier.ResourceIdentifier('test_tenant', stack.name, + stack.id, '', 'WaitHandle') + self.m_id = self.patchobject( + aws_wch.WaitConditionHandle, 'identifier', return_value=res_id) if stub_status: - self.m.StubOutWithMock(aws_wch.WaitConditionHandle, - 'get_status') + self.m_gs = self.patchobject(aws_wch.WaitConditionHandle, + 'get_status') return stack def test_post_success_to_handle(self): self.stack = self.create_stack() - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS']) - - self.m.ReplayAll() + self.m_gs.side_effect = [[], [], ['SUCCESS']] self.stack.create() @@ -129,15 +123,13 @@ class WaitConditionTest(common.HeatTestCase): r = resource_objects.Resource.get_by_name_and_stack( self.stack.context, 'WaitHandle', self.stack.id) self.assertEqual('WaitHandle', r.name) - self.m.VerifyAll() + self.assertEqual(3, self.m_gs.call_count) + + self.assertEqual(1, self.m_id.call_count) def test_post_failure_to_handle(self): self.stack = self.create_stack() - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn(['FAILURE']) - - self.m.ReplayAll() + self.m_gs.side_effect = [[], [], ['FAILURE']] self.stack.create() @@ -149,19 +141,17 @@ class WaitConditionTest(common.HeatTestCase): r = resource_objects.Resource.get_by_name_and_stack( self.stack.context, 'WaitHandle', self.stack.id) self.assertEqual('WaitHandle', r.name) - self.m.VerifyAll() + self.assertEqual(3, self.m_gs.call_count) + self.assertEqual(1, self.m_id.call_count) def test_post_success_to_handle_count(self): self.stack = self.create_stack(template=test_template_wc_count) - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS']) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS', - 'SUCCESS']) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS', - 'SUCCESS', - 'SUCCESS']) - - self.m.ReplayAll() + self.m_gs.side_effect = [ + [], + ['SUCCESS'], + ['SUCCESS', 'SUCCESS'], + ['SUCCESS', 'SUCCESS', 'SUCCESS'] + ] self.stack.create() @@ -172,16 +162,12 @@ class WaitConditionTest(common.HeatTestCase): r = resource_objects.Resource.get_by_name_and_stack( self.stack.context, 'WaitHandle', self.stack.id) self.assertEqual('WaitHandle', r.name) - self.m.VerifyAll() + self.assertEqual(4, self.m_gs.call_count) + self.assertEqual(1, self.m_id.call_count) def test_post_failure_to_handle_count(self): self.stack = self.create_stack(template=test_template_wc_count) - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS']) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS', - 'FAILURE']) - - self.m.ReplayAll() + self.m_gs.side_effect = [[], ['SUCCESS'], ['SUCCESS', 'FAILURE']] self.stack.create() @@ -193,14 +179,15 @@ class WaitConditionTest(common.HeatTestCase): r = resource_objects.Resource.get_by_name_and_stack( self.stack.context, 'WaitHandle', self.stack.id) self.assertEqual('WaitHandle', r.name) - self.m.VerifyAll() + self.assertEqual(3, self.m_gs.call_count) + self.assertEqual(1, self.m_id.call_count) def test_timeout(self): self.stack = self.create_stack() # Avoid the stack create exercising the timeout code at the same time - self.m.StubOutWithMock(self.stack, 'timeout_secs') - self.stack.timeout_secs().MultipleTimes().AndReturn(None) + m_ts = self.patchobject(self.stack, 'timeout_secs', return_value=None) + self.m_gs.return_value = [] now = timeutils.utcnow() periods = [0, 0.001, 0.1, 4.1, 5.1] @@ -209,11 +196,6 @@ class WaitConditionTest(common.HeatTestCase): timeutils.set_time_override(fake_clock) self.addCleanup(timeutils.clear_time_override) - aws_wch.WaitConditionHandle.get_status( - ).MultipleTimes().AndReturn([]) - - self.m.ReplayAll() - self.stack.create() rsrc = self.stack['WaitForTheHandle'] @@ -221,14 +203,14 @@ class WaitConditionTest(common.HeatTestCase): self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state) reason = rsrc.status_reason self.assertTrue(reason.startswith('WaitConditionTimeout:')) - - self.m.VerifyAll() + self.assertEqual(1, m_ts.call_count) + self.assertEqual(1, self.m_gs.call_count) + self.assertEqual(1, self.m_id.call_count) def test_FnGetAtt(self): self.stack = self.create_stack() - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS']) + self.m_gs.return_value = ['SUCCESS'] - self.m.ReplayAll() self.stack.create() rsrc = self.stack['WaitForTheHandle'] @@ -254,7 +236,8 @@ class WaitConditionTest(common.HeatTestCase): self.assertIsInstance(wc_att, six.string_types) self.assertEqual({"123": "foo", "456": "dog"}, json.loads(wc_att)) self.assertEqual('status:SUCCESS reason:cat', ret) - self.m.VerifyAll() + self.assertEqual(1, self.m_gs.call_count) + self.assertEqual(1, self.m_id.call_count) def test_FnGetRefId_resource_name(self): self.stack = self.create_stack() @@ -286,8 +269,6 @@ class WaitConditionTest(common.HeatTestCase): self.assertEqual('http://convg_signed_url', rsrc.FnGetRefId()) def test_validate_handle_url_bad_stackid(self): - self.m.ReplayAll() - stack_id = 'STACK_HUBSID_1234' t = json.loads(test_template_waitcondition) badhandle = ("http://server.test:8000/v1/waitcondition/" + @@ -298,16 +279,11 @@ class WaitConditionTest(common.HeatTestCase): t['Resources']['WaitForTheHandle']['Properties']['Handle'] = badhandle self.stack = self.create_stack(template=json.dumps(t), stub=False, stack_id=stack_id) - self.m.ReplayAll() rsrc = self.stack['WaitForTheHandle'] self.assertRaises(ValueError, rsrc.handle_create) - self.m.VerifyAll() - def test_validate_handle_url_bad_stackname(self): - self.m.ReplayAll() - stack_id = 'STACKABCD1234' t = json.loads(test_template_waitcondition) badhandle = ("http://server.test:8000/v1/waitcondition/" + @@ -321,11 +297,7 @@ class WaitConditionTest(common.HeatTestCase): rsrc = self.stack['WaitForTheHandle'] self.assertRaises(ValueError, rsrc.handle_create) - self.m.VerifyAll() - def test_validate_handle_url_bad_tenant(self): - self.m.ReplayAll() - stack_id = 'STACKABCD1234' t = json.loads(test_template_waitcondition) badhandle = ("http://server.test:8000/v1/waitcondition/" + @@ -339,11 +311,7 @@ class WaitConditionTest(common.HeatTestCase): rsrc = self.stack['WaitForTheHandle'] self.assertRaises(ValueError, rsrc.handle_create) - self.m.VerifyAll() - def test_validate_handle_url_bad_resource(self): - self.m.ReplayAll() - stack_id = 'STACK_HUBR_1234' t = json.loads(test_template_waitcondition) badhandle = ("http://server.test:8000/v1/waitcondition/" + @@ -357,10 +325,7 @@ class WaitConditionTest(common.HeatTestCase): rsrc = self.stack['WaitForTheHandle'] self.assertRaises(ValueError, rsrc.handle_create) - self.m.VerifyAll() - def test_validate_handle_url_bad_resource_type(self): - self.m.ReplayAll() stack_id = 'STACKABCD1234' t = json.loads(test_template_waitcondition) badhandle = ("http://server.test:8000/v1/waitcondition/" + @@ -374,8 +339,6 @@ class WaitConditionTest(common.HeatTestCase): rsrc = self.stack['WaitForTheHandle'] self.assertRaises(ValueError, rsrc.handle_create) - self.m.VerifyAll() - class WaitConditionHandleTest(common.HeatTestCase): def create_stack(self, stack_name=None, stack_id=None): @@ -395,15 +358,18 @@ class WaitConditionHandleTest(common.HeatTestCase): self.stack_id = stack.id # Stub waitcondition status so all goes CREATE_COMPLETE - self.m.StubOutWithMock(aws_wch.WaitConditionHandle, 'get_status') - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS']) - - id = identifier.ResourceIdentifier('test_tenant', stack.name, - stack.id, '', 'WaitHandle') - self.m.StubOutWithMock(aws_wch.WaitConditionHandle, 'identifier') - aws_wch.WaitConditionHandle.identifier().MultipleTimes().AndReturn(id) - self.m.ReplayAll() - stack.create() + with mock.patch.object(aws_wch.WaitConditionHandle, + 'get_status') as m_gs: + m_gs.return_value = ['SUCCESS'] + res_id = identifier.ResourceIdentifier('test_tenant', stack.name, + stack.id, '', 'WaitHandle') + with mock.patch.object(aws_wch.WaitConditionHandle, + 'identifier') as m_id: + m_id.return_value = res_id + stack.create() + rsrc = stack['WaitHandle'] + self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) + self.assertEqual(rsrc.resource_id, rsrc.data().get('user_id')) return stack def test_handle(self): @@ -413,11 +379,9 @@ class WaitConditionHandleTest(common.HeatTestCase): self.stack = self.create_stack(stack_id=stack_id, stack_name=stack_name) - self.m.StubOutWithMock(self.stack.clients.client_plugin('heat'), - 'get_heat_cfn_url') - self.stack.clients.client_plugin('heat').get_heat_cfn_url().AndReturn( - 'http://server.test:8000/v1') - self.m.ReplayAll() + m_get_cfn_url = mock.Mock(return_value='http://server.test:8000/v1') + self.stack.clients.client_plugin( + 'heat').get_heat_cfn_url = m_get_cfn_url rsrc = self.stack['WaitHandle'] self.assertEqual(rsrc.resource_id, rsrc.data().get('user_id')) # clear the url @@ -445,14 +409,11 @@ class WaitConditionHandleTest(common.HeatTestCase): actual_params = parse.parse_qs(actual_url.split("?", 1)[1]) self.assertEqual(expected_params, actual_params) self.assertTrue(connection_url.startswith(connection_url)) - - self.m.VerifyAll() + self.assertEqual(1, m_get_cfn_url.call_count) def test_handle_signal(self): self.stack = self.create_stack() rsrc = self.stack['WaitHandle'] - self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) - self.assertEqual(rsrc.resource_id, rsrc.data().get('user_id')) test_metadata = {'Data': 'foo', 'Reason': 'bar', 'Status': 'SUCCESS', 'UniqueId': '123'} rsrc.handle_signal(test_metadata) @@ -460,13 +421,10 @@ class WaitConditionHandleTest(common.HeatTestCase): u'Reason': u'bar', u'Status': u'SUCCESS'}} self.assertEqual(handle_metadata, rsrc.metadata_get()) - self.m.VerifyAll() def test_handle_signal_invalid(self): self.stack = self.create_stack() rsrc = self.stack['WaitHandle'] - self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) - self.assertEqual(rsrc.resource_id, rsrc.data().get('user_id')) # handle_signal should raise a ValueError if the metadata # is missing any of the expected keys err_metadata = {'Data': 'foo', 'Status': 'SUCCESS', 'UniqueId': '123'} @@ -503,17 +461,10 @@ class WaitConditionHandleTest(common.HeatTestCase): 'Status': 'FAIL', 'UniqueId': '123'} self.assertRaises(ValueError, rsrc.handle_signal, err_metadata) - self.m.VerifyAll() def test_get_status(self): self.stack = self.create_stack() rsrc = self.stack['WaitHandle'] - self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) - self.assertEqual(rsrc.resource_id, rsrc.data().get('user_id')) - # UnsetStubs, don't want get_status stubbed anymore.. - self.m.VerifyAll() - self.m.UnsetStubs() - self.assertEqual([], rsrc.get_status()) test_metadata = {'Data': 'foo', 'Reason': 'bar', @@ -551,7 +502,6 @@ class WaitConditionHandleTest(common.HeatTestCase): ret = rsrc.handle_signal(test_metadata) self.assertEqual(['hoo'], rsrc.get_status_reason('FAILURE')) self.assertEqual('status:FAILURE reason:hoo', ret) - self.m.VerifyAll() class WaitConditionUpdateTest(common.HeatTestCase): @@ -569,14 +519,19 @@ class WaitConditionUpdateTest(common.HeatTestCase): with utils.UUIDStub(self.stack_id): stack.store() - self.m.StubOutWithMock(aws_wch.WaitConditionHandle, 'get_status') - aws_wch.WaitConditionHandle.get_status().AndReturn([]) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS']) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS', - 'SUCCESS']) - aws_wch.WaitConditionHandle.get_status().AndReturn(['SUCCESS', - 'SUCCESS', - 'SUCCESS']) + with mock.patch.object(aws_wch.WaitConditionHandle, + 'get_status') as m_gs: + m_gs.side_effect = [ + [], + ['SUCCESS'], + ['SUCCESS', 'SUCCESS'], + ['SUCCESS', 'SUCCESS', 'SUCCESS'] + ] + stack.create() + self.assertEqual(4, m_gs.call_count) + + rsrc = stack['WaitForTheHandle'] + self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) return stack @@ -588,14 +543,7 @@ class WaitConditionUpdateTest(common.HeatTestCase): def test_update(self): self.stack = self.create_stack() - self.m.ReplayAll() - self.stack.create() - rsrc = self.stack['WaitForTheHandle'] - self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) - - self.m.VerifyAll() - self.m.UnsetStubs() wait_condition_handle = self.stack['WaitHandle'] test_metadata = {'Data': 'foo', 'Reason': 'bar', @@ -615,14 +563,7 @@ class WaitConditionUpdateTest(common.HeatTestCase): def test_update_restored_from_db(self): self.stack = self.create_stack() - self.m.ReplayAll() - self.stack.create() - rsrc = self.stack['WaitForTheHandle'] - self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) - - self.m.VerifyAll() - self.m.UnsetStubs() handle_stack = self.stack wait_condition_handle = handle_stack['WaitHandle'] @@ -659,14 +600,7 @@ class WaitConditionUpdateTest(common.HeatTestCase): def test_update_timeout(self): self.stack = self.create_stack() - self.m.ReplayAll() - self.stack.create() - rsrc = self.stack['WaitForTheHandle'] - self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) - - self.m.VerifyAll() - self.m.UnsetStubs() now = timeutils.utcnow() fake_clock = [now + datetime.timedelta(0, t) @@ -674,10 +608,8 @@ class WaitConditionUpdateTest(common.HeatTestCase): timeutils.set_time_override(fake_clock) self.addCleanup(timeutils.clear_time_override) - self.m.StubOutWithMock(aws_wch.WaitConditionHandle, 'get_status') - aws_wch.WaitConditionHandle.get_status().MultipleTimes().AndReturn([]) - - self.m.ReplayAll() + m_gs = self.patchobject( + aws_wch.WaitConditionHandle, 'get_status', return_value=[]) uprops = copy.copy(rsrc.properties.data) uprops['Count'] = '5' @@ -691,4 +623,4 @@ class WaitConditionUpdateTest(common.HeatTestCase): self.assertEqual("WaitConditionTimeout: resources.WaitForTheHandle: " "0 of 5 received", six.text_type(ex)) self.assertEqual(5, rsrc.properties['Count']) - self.m.VerifyAll() + self.assertEqual(2, m_gs.call_count)