diff --git a/heat/tests/neutron/test_neutron_client.py b/heat/tests/neutron/test_neutron_client.py index 3703d8eda..f311b47ab 100644 --- a/heat/tests/neutron/test_neutron_client.py +++ b/heat/tests/neutron/test_neutron_client.py @@ -12,6 +12,7 @@ # under the License. import mock +from neutronclient.common import exceptions as qe from heat.common import exception from heat.engine.clients.os import neutron @@ -148,3 +149,36 @@ class NeutronClientPluginTests(NeutronClientPluginTestCase): self.assertRaises(exception.PhysicalResourceNameAmbiguity, self.neutron_plugin.get_secgroup_uuids, sgs_non_uuid) + + +class NeutronConstraintsValidate(common.HeatTestCase): + scenarios = [ + ('validate_network', + dict(constraint_class=neutron.NetworkConstraint, + resource_type='network')), + ('validate_port', + dict(constraint_class=neutron.PortConstraint, + resource_type='port')), + ('validate_router', + dict(constraint_class=neutron.RouterConstraint, + resource_type='router')), + ('validate_subnet', + dict(constraint_class=neutron.SubnetConstraint, + resource_type='subnet')) + ] + + def test_validate(self): + nc = mock.Mock() + mock_create = self.patchobject(neutron.NeutronClientPlugin, '_create') + mock_create.return_value = nc + mock_find = self.patchobject(neutron.neutronV20, + 'find_resourceid_by_name_or_id') + mock_find.side_effect = ['foo', + qe.NeutronClientException(status_code=404)] + + constraint = self.constraint_class() + ctx = utils.dummy_context() + self.assertTrue(constraint.validate("foo", ctx)) + self.assertFalse(constraint.validate("bar", ctx)) + mock_find.assert_has_calls([mock.call(nc, self.resource_type, 'foo'), + mock.call(nc, self.resource_type, 'bar')]) diff --git a/heat/tests/neutron/test_neutron_resources.py b/heat/tests/neutron/test_neutron_resources.py index a1090cf1b..1f2d8148b 100644 --- a/heat/tests/neutron/test_neutron_resources.py +++ b/heat/tests/neutron/test_neutron_resources.py @@ -22,7 +22,6 @@ import six from heat.common import exception from heat.common import template_format from heat.engine.cfn import functions as cfn_funcs -from heat.engine.clients.os import neutron from heat.engine import resource from heat.engine.resources.openstack.neutron import net from heat.engine.resources.openstack.neutron import provider_net @@ -3158,99 +3157,3 @@ class NeutronPortTest(common.HeatTestCase): self.assertEqual('direct', port.properties['binding:vnic_type']) self.m.VerifyAll() - - -class NetworkConstraintTest(common.HeatTestCase): - - def test_validate(self): - nc = self.m.CreateMockAnything() - self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create') - neutron.NeutronClientPlugin._create().AndReturn(nc) - self.m.StubOutWithMock(neutron.neutronV20, - 'find_resourceid_by_name_or_id') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'network', 'foo' - ).AndReturn('foo') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'network', 'bar' - ).AndRaise(qe.NeutronClientException(status_code=404)) - self.m.ReplayAll() - - constraint = neutron.NetworkConstraint() - ctx = utils.dummy_context() - self.assertTrue(constraint.validate("foo", ctx)) - self.assertFalse(constraint.validate("bar", ctx)) - - self.m.VerifyAll() - - -class PortConstraintTest(common.HeatTestCase): - - def test_validate(self): - nc = self.m.CreateMockAnything() - self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create') - neutron.NeutronClientPlugin._create().AndReturn(nc) - self.m.StubOutWithMock(neutron.neutronV20, - 'find_resourceid_by_name_or_id') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'port', 'foo' - ).AndReturn('foo') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'port', 'bar' - ).AndRaise(qe.NeutronClientException(status_code=404)) - self.m.ReplayAll() - - constraint = neutron.PortConstraint() - ctx = utils.dummy_context() - self.assertTrue(constraint.validate("foo", ctx)) - self.assertFalse(constraint.validate("bar", ctx)) - - self.m.VerifyAll() - - -class RouterConstraintTest(common.HeatTestCase): - - def test_validate(self): - nc = self.m.CreateMockAnything() - self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create') - neutron.NeutronClientPlugin._create().AndReturn(nc) - self.m.StubOutWithMock(neutron.neutronV20, - 'find_resourceid_by_name_or_id') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'router', 'foo' - ).AndReturn('foo') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'router', 'bar' - ).AndRaise(qe.NeutronClientException(status_code=404)) - self.m.ReplayAll() - - constraint = neutron.RouterConstraint() - ctx = utils.dummy_context() - self.assertTrue(constraint.validate("foo", ctx)) - self.assertFalse(constraint.validate("bar", ctx)) - - self.m.VerifyAll() - - -class SubnetConstraintTest(common.HeatTestCase): - - def test_validate(self): - nc = self.m.CreateMockAnything() - self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create') - neutron.NeutronClientPlugin._create().AndReturn(nc) - self.m.StubOutWithMock(neutron.neutronV20, - 'find_resourceid_by_name_or_id') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'subnet', 'foo' - ).AndReturn('foo') - neutron.neutronV20.find_resourceid_by_name_or_id( - nc, 'subnet', 'bar' - ).AndRaise(qe.NeutronClientException(status_code=404)) - self.m.ReplayAll() - - constraint = neutron.SubnetConstraint() - ctx = utils.dummy_context() - self.assertTrue(constraint.validate("foo", ctx)) - self.assertFalse(constraint.validate("bar", ctx)) - - self.m.VerifyAll()