Implemented disassociate_port in quark plugin
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user