@ -81,6 +81,7 @@ class TunnelTest(object):
self . INT_BRIDGE = ' integration_bridge '
self . TUN_BRIDGE = ' tunnel_bridge '
self . MAP_TUN_BRIDGE = ' tun_br_map '
self . AUX_BRIDGE = ' ancillary_bridge '
self . NET_MAPPING = { ' net1 ' : self . MAP_TUN_BRIDGE }
self . INT_OFPORT = 11111
self . TUN_OFPORT = 22222
@ -104,6 +105,8 @@ class TunnelTest(object):
self . br_tun_cls ( ' br-tun ' ) ) ,
self . MAP_TUN_BRIDGE : mock . create_autospec (
self . br_phys_cls ( ' br-phys ' ) ) ,
self . AUX_BRIDGE : mock . create_autospec (
ovs_lib . OVSBridge ( ' br-aux ' ) ) ,
}
self . ovs_int_ofports = {
' patch-tun ' : self . TUN_OFPORT ,
@ -122,8 +125,13 @@ class TunnelTest(object):
self . mock_tun_bridge_cls = mock . patch ( self . _BR_TUN_CLASS ,
autospec = True ) . start ( )
self . mock_tun_bridge_cls . side_effect = lookup_br
self . mock_aux_bridge_cls = mock . patch (
' neutron.agent.common.ovs_lib.OVSBridge ' ,
autospec = True ) . start ( )
self . mock_aux_bridge_cls . side_effect = lookup_br
self . mock_int_bridge = self . ovs_bridges [ self . INT_BRIDGE ]
self . mock_int_bridge . br_name = self . INT_BRIDGE
self . mock_int_bridge . add_port . return_value = self . MAP_TUN_INT_OFPORT
self . mock_int_bridge . add_patch_port . side_effect = (
lambda tap , peer : self . ovs_int_ofports [ tap ] )
@ -143,6 +151,7 @@ class TunnelTest(object):
ovs_lib . INVALID_OFPORT )
self . mock_tun_bridge = self . ovs_bridges [ self . TUN_BRIDGE ]
self . mock_tun_bridge . br_name = self . TUN_BRIDGE
self . mock_tun_bridge . add_port . return_value = self . INT_OFPORT
self . mock_tun_bridge . add_patch_port . return_value = self . INT_OFPORT
@ -159,7 +168,13 @@ class TunnelTest(object):
' get_bridges ' ) . start ( )
self . get_bridges . return_value = [ self . INT_BRIDGE ,
self . TUN_BRIDGE ,
self . MAP_TUN_BRIDGE ]
self . MAP_TUN_BRIDGE ,
self . AUX_BRIDGE ]
self . get_bridge_external_bridge_id = mock . patch . object (
ovs_lib . BaseOVS ,
' get_bridge_external_bridge_id ' ) . start ( )
self . get_bridge_external_bridge_id . side_effect = (
lambda bridge : bridge if bridge in self . ovs_bridges else None )
self . execute = mock . patch ( ' neutron.agent.common.utils.execute ' ) . start ( )
@ -189,6 +204,7 @@ class TunnelTest(object):
]
self . mock_map_tun_bridge_expected = [
mock . call . set_agent_uuid_stamp ( mock . ANY ) ,
mock . call . setup_controllers ( mock . ANY ) ,
mock . call . setup_default_table ( ) ,
mock . call . get_port_ofport ( ' phy- %s ' % self . MAP_TUN_BRIDGE ) ,
@ -216,6 +232,10 @@ class TunnelTest(object):
' options ' , { ' peer ' : ' int- %s ' % self . MAP_TUN_BRIDGE } ) ,
]
self . mock_aux_bridge = self . ovs_bridges [ self . AUX_BRIDGE ]
self . mock_aux_bridge_expected = [
]
self . mock_tun_bridge_expected = [
mock . call . set_agent_uuid_stamp ( mock . ANY ) ,
mock . call . bridge_exists ( mock . ANY ) ,
@ -286,6 +306,8 @@ class TunnelTest(object):
self . mock_map_tun_bridge_expected )
self . _verify_mock_call ( self . mock_tun_bridge ,
self . mock_tun_bridge_expected )
self . _verify_mock_call ( self . mock_aux_bridge ,
self . mock_aux_bridge_expected )
self . _verify_mock_call ( self . device_exists , self . device_exists_expected )
self . _verify_mock_call ( self . ipdevice , self . ipdevice_expected )
self . _verify_mock_call ( self . ipwrapper , self . ipwrapper_expected )
@ -517,8 +539,16 @@ class TunnelTest(object):
self . mock_int_bridge_expected + = [
mock . call . check_canary_table ( ) ,
mock . call . cleanup_flows ( ) ,
mock . call . check_canary_table ( )
]
self . mock_tun_bridge_expected + = [
mock . call . cleanup_flows ( )
]
self . mock_map_tun_bridge_expected + = [
mock . call . cleanup_flows ( )
]
# No cleanup is expected on ancillary bridge
self . ovs_bridges [ self . INT_BRIDGE ] . check_canary_table . return_value = \
constants . OVS_NORMAL
@ -526,24 +556,31 @@ class TunnelTest(object):
' exception ' ) as log_exception , \
mock . patch . object ( self . mod_agent . OVSNeutronAgent ,
' scan_ports ' ) as scan_ports , \
mock . patch . object (
self . mod_agent . OVSNeutronAgent ,
' scan_ancillary_ports ' ) as scan_ancillary_ports , \
mock . patch . object (
self . mod_agent . OVSNeutronAgent ,
' process_network_ports ' ) as process_network_ports , \
mock . patch . object (
self . mod_agent . OVSNeutronAgent ,
' process_ancillary_network_ports ' ) as process_anc_ports , \
mock . patch . object ( self . mod_agent . OVSNeutronAgent ,
' tunnel_sync ' ) , \
mock . patch . object ( time , ' sleep ' ) , \
mock . patch . object (
self . mod_agent . OVSNeutronAgent ,
' update_stale_ofport_rules ' ) as update_stale , \
mock . patch . object (
self . mod_agent . OVSNeutronAgent ,
' cleanup_stale_flows ' ) as cleanup :
' update_stale_ofport_rules ' ) as update_stale :
log_exception . side_effect = Exception (
' Fake exception to get out of the loop ' )
scan_ports . side_effect = [ reply2 , reply3 ]
scan_ancillary_ports . return_value = {
' current ' : set ( [ ] ) , ' added ' : set ( [ ] ) , ' removed ' : set ( [ ] ) ,
}
update_stale . return_value = [ ]
process_network_ports . side_effect = [
False , Exception ( ' Fake exception to get out of the loop ' ) ]
process_anc_ports . return_value = False
n_agent = self . _build_agent ( )
@ -572,7 +609,6 @@ class TunnelTest(object):
' added ' : set ( [ ] ) } , False )
] )
cleanup . assert_called_once_with ( )
self . assertTrue ( update_stale . called )
self . _verify_mock_calls ( )
@ -607,10 +643,12 @@ class TunnelTestUseVethInterco(TunnelTest):
mock . call . create ( ) ,
mock . call . set_secure_mode ( ) ,
mock . call . setup_controllers ( mock . ANY ) ,
mock . call . setup_default_table ( ) ,
]
self . mock_map_tun_bridge_expected = [
mock . call . set_agent_uuid_stamp ( mock . ANY ) ,
mock . call . setup_controllers ( mock . ANY ) ,
mock . call . setup_default_table ( ) ,
mock . call . add_port ( self . intb ) ,
@ -628,6 +666,10 @@ class TunnelTestUseVethInterco(TunnelTest):
mock . call . drop_port ( in_port = self . MAP_TUN_PHY_OFPORT ) ,
]
self . mock_aux_bridge = self . ovs_bridges [ self . AUX_BRIDGE ]
self . mock_aux_bridge_expected = [
]
self . mock_tun_bridge_expected = [
mock . call . set_agent_uuid_stamp ( mock . ANY ) ,
mock . call . bridge_exists ( mock . ANY ) ,