]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Handle empty bridge case in OVSBridge.get_ports_attributes
authorAssaf Muller <amuller@redhat.com>
Fri, 25 Sep 2015 18:20:21 +0000 (14:20 -0400)
committerAssaf Muller <amuller@redhat.com>
Sun, 27 Sep 2015 13:41:17 +0000 (09:41 -0400)
Before this patch, get_ports_attributes would call
get_port_name_list. In the case of an empty bridge,
get_port_name_list would return an empty list and feed that
in to ovsdb.db_list, thereby returning all ports instead of
no ports.

Change-Id: I5a91028c59d71943b7cef86a94fa6ab1cc3d667c
Closes-Bug: #1499821

neutron/agent/common/ovs_lib.py
neutron/tests/functional/agent/test_ovs_lib.py

index 20b8468167aae83b96a3742f38a33e6f03cd7860..010644f01b41146a214a9468ac2ec401b228fbf3 100644 (file)
@@ -343,6 +343,8 @@ class OVSBridge(BaseOVS):
                              check_error=True, log_errors=True,
                              if_exists=False):
         port_names = ports or self.get_port_name_list()
+        if not port_names:
+            return []
         return (self.ovsdb.db_list(table, port_names, columns=columns,
                                    if_exists=if_exists).
                 execute(check_error=check_error, log_errors=log_errors))
index 3562722ea7c220ee5114dcd37fb5d2b6f2dede2a..b6ed9618dc1388a401965bfca1e16a1241104292 100644 (file)
@@ -232,6 +232,17 @@ class OVSBridgeTestCase(OVSBridgeTestBase):
         expected = set([vif_ports[0].vif_id])
         self.assertEqual(expected, ports)
 
+    def test_get_vif_port_set_on_empty_bridge_returns_empty_set(self):
+        # Create a port on self.br
+        self.create_ovs_vif_port()
+
+        # Create another, empty bridge
+        br_2 = self.useFixture(net_helpers.OVSBridgeFixture()).bridge
+
+        # Assert that get_vif_port_set on an empty bridge returns an empty set,
+        # and does not return the other bridge's ports.
+        self.assertEqual(set(), br_2.get_vif_port_set())
+
     def test_get_ports_attributes(self):
         port_names = [self.create_ovs_port()[0], self.create_ovs_port()[0]]
         db_ports = self.br.get_ports_attributes('Interface', columns=['name'])