Implemented disassociate_port in quark plugin

This commit is contained in:
Amir Sadoughi
2013-03-27 03:08:33 -05:00
parent 60b43ac618
commit f533cd9bc2
2 changed files with 58 additions and 0 deletions

View File

@@ -592,6 +592,27 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
db_api.port_delete(context, port)
self.net_driver.delete_port(context, backend_key)
def disassociate_port(self, context, id, ip_address_id):
"""Disassociates a port from an IP address.
: param context: quantum api request context
: param id: UUID representing the port to disassociate.
: param ip_address_id: UUID representing the IP address to
disassociate.
"""
LOG.info("disassociate_port %s for tenant %s ip_address_id %s" %
(id, context.tenant_id, ip_address_id))
port = db_api.port_find(context, id=id, ip_address_id=[ip_address_id],
scope=db_api.ONE)
if not port:
raise exceptions.PortNotFound(port_id=id, net_id='')
port["ip_addresses"] = [address for address in port["ip_addresses"]
if address.id != ip_address_id]
return self._make_port_dict(port)
def get_mac_address_ranges(self, context):
LOG.info("get_mac_address_ranges for tenant %s" % context.tenant_id)
ranges = db_api.mac_address_range_find(context)

View File

@@ -23,6 +23,7 @@ from quantum.common import exceptions
from quantum import context
from quantum.db import api as db_api
from quark.db import api as quark_db_api
from quark.db import models
from quark import exceptions as quark_exceptions
import quark.plugin
@@ -752,6 +753,42 @@ class TestQuarkDeletePort(TestQuarkPlugin):
self.plugin.delete_port(self.context, 1)
class TestQuarkDisassociatePort(TestQuarkPlugin):
@contextlib.contextmanager
def _stubs(self, port=None):
port_models = None
if port:
port_model = models.Port()
port_model.update(port)
port_models = port_model
db_mod = "quark.db.api"
with mock.patch("%s.port_find" % db_mod) as port_find:
port_find.return_value = port_models
yield port_find
def test_port_disassociate_port(self):
ip = dict(id=1, address=3232235876, address_readable="192.168.1.100",
subnet_id=1, network_id=2, version=4)
fixed_ips = [{"subnet_id": ip["subnet_id"],
"ip_address": ip["address_readable"]}]
port = dict(port=dict(network_id=1, tenant_id=self.context.tenant_id,
device_id=2, mac_address="AA:BB:CC:DD:EE:FF",
backend_key="foo", fixed_ips=fixed_ips))
with self._stubs(port=port["port"]) as (port_find):
new_port = self.plugin.disassociate_port(self.context, 1, 1)
port_find.assert_called_with(self.context,
id=1,
ip_address_id=[1],
scope=quark_db_api.ONE)
self.assertEqual(new_port["fixed_ips"], [])
def test_port_disassociate_port_not_found_fails(self):
with self._stubs(port=None):
with self.assertRaises(exceptions.PortNotFound):
self.plugin.disassociate_port(self.context, 1, 1)
class TestQuarkGetMacAddressRanges(TestQuarkPlugin):
@contextlib.contextmanager
def _stubs(self, mac_range):