Merge "Check NotFound with pool property in pool member"

This commit is contained in:
Zuul 2018-07-09 08:02:43 +00:00 committed by Gerrit Code Review
commit 78705d11ec
2 changed files with 85 additions and 5 deletions

View File

@ -131,20 +131,28 @@ class PoolMember(octavia_base.OctaviaBase):
def _resource_create(self, properties):
return self.client().member_create(
self.properties[self.POOL], json={'member': properties})['member']
self._get_pool_prop(), json={'member': properties})['member']
def _resource_update(self, prop_diff):
self.client().member_set(self.properties[self.POOL],
self.client().member_set(self._get_pool_prop(),
self.resource_id,
json={'member': prop_diff})
def _get_pool_prop(self):
try:
return self.properties[self.POOL]
except ValueError:
if self.client_plugin().get_pool(self.properties.data[self.POOL]):
raise
def _resource_delete(self):
self.client().member_delete(self.properties[self.POOL],
self.resource_id)
pool = self._get_pool_prop()
if pool:
self.client().member_delete(pool, self.resource_id)
def _show_resource(self):
return self.client().member_show(
self.properties[self.POOL], self.resource_id)
self._get_pool_prop(), self.resource_id)
def resource_mapping():

View File

@ -17,6 +17,7 @@ from neutronclient.neutron import v2_0 as neutronV20
from osc_lib import exceptions
from heat.common import template_format
from heat.engine import properties
from heat.engine.resources.openstack.octavia import pool_member
from heat.tests import common
from heat.tests.openstack.octavia import inline_templates
@ -155,6 +156,48 @@ class PoolMemberTest(common.HeatTestCase):
'1234')
self.assertFalse(self.member._delete_called)
def _prepare_delete_with_value_error(self):
self._create_stack()
self.member.resource_id_set('1234')
self.m_gpv = self.patchobject(properties.Properties,
'_get_property_value',
side_effect=ValueError)
def test_delete_value_error_with_not_found(self):
self._prepare_delete_with_value_error()
m_get_pool = mock.Mock(side_effect=exceptions.NotFound(404))
self.member.client_plugin().get_pool = m_get_pool
self.member.handle_delete()
self.assertTrue(self.member.check_delete_complete(None))
m_get_pool.assert_called_once_with(123)
self.assertFalse(self.member._delete_called)
self.assertEqual(0, self.octavia_client.member_delete.call_count)
self.m_gpv.assert_called_once_with('pool')
def test_delete_value_error_with_pool_found(self):
self._prepare_delete_with_value_error()
self.member.client_plugin().get_pool = mock.Mock(return_value='123')
self.member.handle_delete()
self.assertRaises(ValueError, self.member.check_delete_complete, None)
self.assertFalse(self.member._delete_called)
self.assertEqual(0, self.octavia_client.member_delete.call_count)
self.m_gpv.assert_called_once_with('pool')
def test_delete_value_error_with_pool_error(self):
self._prepare_delete_with_value_error()
self.member.client_plugin().get_pool = mock.Mock(side_effect=KeyError)
self.member.handle_delete()
self.assertRaises(KeyError, self.member.check_delete_complete, None)
self.assertFalse(self.member._delete_called)
self.assertEqual(0, self.octavia_client.member_delete.call_count)
self.m_gpv.assert_called_once_with('pool')
def test_delete_failed(self):
self._create_stack()
self.member.resource_id_set('1234')
@ -165,3 +208,32 @@ class PoolMemberTest(common.HeatTestCase):
self.assertRaises(exceptions.Unauthorized,
self.member.check_delete_complete, None)
def _prepare_get_pool_prop(self):
self._create_stack()
self.member.resource_id_set('1234')
self.m_prop = self.patchobject(
properties.Properties, '_get_property_value')
def test_get_pool_prop(self):
self._prepare_get_pool_prop()
self.member._get_pool_prop()
self.m_prop.assert_called_once_with('pool')
def _get_pool_prop_with_value_error(self, side_effect=[]):
self._prepare_get_pool_prop()
self.m_prop.side_effect = ValueError
self.member.client_plugin().get_pool = mock.Mock(
side_effect=side_effect)
def test_get_pool_prop_value_error_and_raise_exception(self):
self._get_pool_prop_with_value_error(
side_effect=exceptions.NotFound(404))
self.assertRaises(
exceptions.NotFound, self.member._get_pool_prop)
def test_get_pool_prop_value_error_and_raise(self):
self._get_pool_prop_with_value_error(side_effect=['foo'])
self.assertRaises(ValueError, self.member._get_pool_prop)