dl_vlan=vlan,
nw_dst='%s' % ip)
- def setup_tunnel_port(self, network_type, port):
- self.add_flow(priority=1,
- in_port=port,
- actions="resubmit(,%s)" %
- constants.TUN_TABLE[network_type])
+ def setup_tunnel_port(self, network_type, port, deferred_br=None):
+ br = deferred_br if deferred_br else self
+ br.add_flow(priority=1,
+ in_port=port,
+ actions="resubmit(,%s)" %
+ constants.TUN_TABLE[network_type])
- def cleanup_tunnel_port(self, port):
- self.delete_flows(in_port=port)
+ def cleanup_tunnel_port(self, port, deferred_br=None):
+ br = deferred_br if deferred_br else self
+ br.delete_flows(in_port=port)
def add_dvr_mac_tun(self, mac, port):
# Table DVR_NOT_LEARN ensures unique dvr macs in the cloud
'delete_flood_to_tun',
'install_arp_responder',
'delete_arp_responder',
+ 'setup_tunnel_port',
+ 'cleanup_tunnel_port',
]
def __getattr__(self, name):
if name in self._METHODS:
m = getattr(self.br, name)
return functools.partial(m, deferred_br=self)
- raise AttributeError(name)
+ return super(DeferredOVSTunnelBridge, self).__getattr__(name)
call.delete_flows(eth_src=mac, table_id=9),
]
self.assertEqual(expected, self.mock.mock_calls)
+
+ def _mock_add_tunnel_port(self, deferred_br=False):
+ port_name = 'fake_port'
+ remote_ip = '192.168.1.3'
+ local_ip = '192.168.1.2'
+ tunnel_type = 'vxlan'
+ vxlan_udp_port = '4789'
+ dont_fragment = True
+ if deferred_br:
+ with mock.patch('neutron.agent.common.ovs_lib.OVSBridge.add_port',
+ return_value=9999) as add_port, \
+ self.br.deferred() as deferred_br:
+ ofport = deferred_br.add_tunnel_port(port_name, remote_ip,
+ local_ip, tunnel_type,
+ vxlan_udp_port,
+ dont_fragment)
+ else:
+ with mock.patch('neutron.agent.common.ovs_lib.OVSBridge.add_port',
+ return_value=9999) as add_port:
+ ofport = self.br.add_tunnel_port(port_name, remote_ip,
+ local_ip, tunnel_type,
+ vxlan_udp_port,
+ dont_fragment)
+ self.assertEqual(9999, ofport)
+ self.assertEqual(1, add_port.call_count)
+ self.assertEqual(port_name, add_port.call_args[0][0])
+
+ def _mock_delete_port(self, deferred_br=False):
+ port_name = 'fake_port'
+ if deferred_br:
+ with mock.patch('neutron.agent.common.ovs_lib.OVSBridge.'
+ 'delete_port') as delete_port, \
+ self.br.deferred() as deferred_br:
+ deferred_br.delete_port(port_name)
+ else:
+ with mock.patch('neutron.agent.common.ovs_lib.OVSBridge.'
+ 'delete_port') as delete_port:
+ self.br.delete_port(port_name)
+ self.assertEqual([call(port_name)], delete_port.mock_calls)
+
+ def test_add_tunnel_port(self):
+ self._mock_add_tunnel_port()
+
+ def test_delete_port(self):
+ self._mock_delete_port()
+
+ def test_deferred_br_add_tunnel_port(self):
+ self._mock_add_tunnel_port(True)
+
+ def test_deferred_br_delete_port(self):
+ self._mock_delete_port(True)