]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
add portbinding host into vip port
authorYong Sheng Gong <gongysh@unitedstack.com>
Thu, 19 Sep 2013 04:45:31 +0000 (12:45 +0800)
committerYong Sheng Gong <gongysh@unitedstack.com>
Wed, 25 Sep 2013 06:41:31 +0000 (14:41 +0800)
When creating vip port, add 'host' into port data.

Bug #1227091

Change-Id: I0f59b3b56a4a26561a10e5645c8ebf803b2c6a70

neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py
neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_plugin_driver.py
neutron/tests/unit/testlib_api.py

index ee703a901193de04da605a2c7ce40fac76d1df3b..1f402b35be1e7be207d0c8c0c81e164e8a7b2a23 100644 (file)
@@ -26,6 +26,7 @@ from neutron.common import rpc as q_rpc
 from neutron.db import agents_db
 from neutron.db.loadbalancer import loadbalancer_db
 from neutron.extensions import lbaas_agentscheduler
+from neutron.extensions import portbindings
 from neutron.openstack.common import importutils
 from neutron.openstack.common import log as logging
 from neutron.openstack.common import rpc
@@ -168,7 +169,7 @@ class LoadBalancerCallbacks(object):
         port['admin_state_up'] = True
         port['device_owner'] = 'neutron:' + constants.LOADBALANCER
         port['device_id'] = str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))
-
+        port[portbindings.HOST_ID] = host
         self.plugin._core_plugin.update_port(
             context,
             port_id,
index 2146250717ce8726ec7922d8d8845944c5a32b6e..8f18ffbb49cf813a16c5648dd56429bcce8c7d4d 100644 (file)
@@ -22,6 +22,7 @@ from neutron.common import exceptions
 from neutron import context
 from neutron.db.loadbalancer import loadbalancer_db as ldb
 from neutron.db import servicetype_db as st_db
+from neutron.extensions import portbindings
 from neutron import manager
 from neutron.openstack.common import uuidutils
 from neutron.plugins.common import constants
@@ -30,6 +31,7 @@ from neutron.services.loadbalancer.drivers.haproxy import (
 )
 from neutron.tests import base
 from neutron.tests.unit.db.loadbalancer import test_db_loadbalancer
+from neutron.tests.unit import testlib_api
 
 
 class TestLoadBalancerPluginBase(
@@ -275,6 +277,24 @@ class TestLoadBalancerCallbacks(TestLoadBalancerPluginBase):
             host='host'
         )
 
+    def test_plug_vip_port_mock_with_host(self):
+        exp = {
+            'device_owner': 'neutron:' + constants.LOADBALANCER,
+            'device_id': 'c596ce11-db30-5c72-8243-15acaae8690f',
+            'admin_state_up': True,
+            portbindings.HOST_ID: 'host'
+        }
+        with mock.patch.object(
+            self.plugin._core_plugin, 'update_port') as mock_update_port:
+            with self.pool() as pool:
+                with self.vip(pool=pool) as vip:
+                    ctx = context.get_admin_context()
+                    self.callbacks.plug_vip_port(
+                        ctx, port_id=vip['vip']['port_id'], host='host')
+            mock_update_port.assert_called_once_with(
+                ctx, vip['vip']['port_id'],
+                {'port': testlib_api.SubDictMatch(exp)})
+
     def test_unplug_vip_port(self):
         exp = {
             'device_owner': '',
index 9cb6f15adb9018cb27cf7e4aafcf6ea919987c40..1407ab0b808b126074c70bbe6ffb252d09c33a49 100644 (file)
@@ -72,3 +72,13 @@ class WebTestCase(base.BaseTestCase):
         result = wsgi.Serializer(
             attributes.get_attr_metadata()).serialize(data, ctype)
         return result
+
+
+class SubDictMatch(object):
+
+    def __init__(self, sub_dict):
+        self.sub_dict = sub_dict
+
+    def __eq__(self, super_dict):
+        return all(item in super_dict.items()
+                   for item in self.sub_dict.items())