def test_metadata_interface_online(self): with mock.patch.object(self.meta_app, '_add_tap_metadata_port') as mock_func: # Device without mac will not trigger update flow self.controller.update( ovs.OvsPort( id='fake_ovs_port', ofport=1, name=self.meta_app._interface, ) ) mock_func.assert_not_called() mock_func.reset_mock() # Other device update will not trigger update flow self.controller.update( ovs.OvsPort( id='fake_ovs_port', ofport=1, name='no-interface', mac_in_use='aa:bb:cc:dd:ee:ff', ) ) mock_func.assert_not_called() mock_func.reset_mock() # Device with mac will trigger update flow self.controller.update( ovs.OvsPort( id='fake_ovs_port', ofport=1, name=self.meta_app._interface, mac_in_use='aa:bb:cc:dd:ee:ff', ) ) mock_func.assert_called_once_with(1, "aa:bb:cc:dd:ee:ff") mock_func.reset_mock() # Duplicated updated will not trigger update flow self.controller.update( ovs.OvsPort( id='fake_ovs_port1', ofport=1, name=self.meta_app._interface, mac_in_use='aa:bb:cc:dd:ee:ff', ) ) mock_func.assert_not_called()
def test_external_bridge_online(self): self.dnat_app.local_floatingips[ test_app_base.fake_floatingip1.get_id()] = ( test_app_base.fake_floatingip1) with mock.patch.object(self.dnat_app, '_install_dnat_egress_rules') as mock_func: fake_ovs_port = ovs.OvsPort( id='fake_ovs_port', name=self.dnat_app.external_network_bridge, ) self.controller.update_ovs_port(fake_ovs_port) mock_func.assert_not_called() mock_func.reset_mock() # Other device update will not trigger update flow fake_ovs_port.mac_in_use = "aa:bb:cc:dd:ee:ff" fake_ovs_port.name = 'no-bridge' self.controller.update_ovs_port(fake_ovs_port) mock_func.assert_not_called() mock_func.reset_mock() # Device with mac will trigger update flow fake_ovs_port.name = self.dnat_app.external_network_bridge self.controller.update_ovs_port(fake_ovs_port) mock_func.assert_called_once_with(test_app_base.fake_floatingip1, "aa:bb:cc:dd:ee:ff") mock_func.reset_mock() # Duplicated updated will not trigger update flow self.controller.update_ovs_port(fake_ovs_port) mock_func.assert_not_called()
def test_classifier_for_vlan_port(self): fake_local_vlan_port = make_fake_local_port( lswitch='fake_vlan_switch1') self.controller.update(fake_local_vlan_port) self.app.mod_flow.assert_not_called() ovs_port = ovs.OvsPort(id='fake_ovs_port', lport=fake_local_vlan_port.id, ofport=1, admin_state='up', type=constants.OVS_COMPUTE_INTERFACE) self.controller.update(ovs_port) port_key = fake_local_vlan_port.unique_key match = self.app.parser.OFPMatch(reg7=port_key) self.app.mod_flow.assert_called_with( inst=mock.ANY, table_id=const.INGRESS_DISPATCH_TABLE, priority=const.PRIORITY_MEDIUM, match=match) self.app.mod_flow.reset_mock() ofport = ovs_port.ofport match = self.app.parser.OFPMatch(in_port=ofport) if self.order == SCENARIO_ORDER_DELETE_LPORT_FIRST: self.controller.delete(fake_local_vlan_port) self.controller.delete(ovs_port) elif self.order == SCENARIO_ORDER_DELETE_OVS_PORT_FIRST: self.controller.delete(ovs_port) self.controller.delete(fake_local_vlan_port) else: self.fail("Bad order") self.app.mod_flow.assert_called_with( table_id=const.INGRESS_CLASSIFICATION_DISPATCH_TABLE, command=self.datapath.ofproto.OFPFC_DELETE, priority=const.PRIORITY_MEDIUM, match=match) self.app.mod_flow.reset_mock()
def test_port_update_neg_ofport(self): self.assertFalse( impl_idl._is_ovsport_update_valid( 'set', ovs.OvsPort( ofport=-1, name='tap-uuid', ), ), )
def test_port_update_qg(self): self.assertFalse( impl_idl._is_ovsport_update_valid( 'set', ovs.OvsPort( ofport=1, name='qg-some-uuid', ), ), )
def test_port_update_missing_lport(self): self.assertFalse( impl_idl._is_ovsport_update_valid( 'set', ovs.OvsPort( ofport=1, type=constants.OVS_COMPUTE_INTERFACE, name='tap-uuid', ), ), )
def test_port_update_bad_type(self): self.assertFalse( impl_idl._is_ovsport_update_valid( 'set', ovs.OvsPort( ofport=1, type=constants.OVS_PATCH_INTERFACE, name='tap-uuid', ), ), )
def get_virtual_tunnel_ports(self): ifaces = self.ovsdb.db_find( 'Interface', ('options', '=', {'remote_ip': 'flow'}), columns=['uuid', 'name', 'type']).execute() tunnel_ports = [] for iface in ifaces: if (self.integration_bridge != self._get_bridge_for_iface(iface['name'])): continue tunnel_ports.append( ovs.OvsPort( id=str(iface['uuid']), name=iface['name'], tunnel_type=iface['type'], ), ) return tunnel_ports
l2.DHCPOption(tag=121, value='0.0.0.0/0,10.0.0.1'), ] fake_local_port1 = make_fake_local_port( macs=['fa:16:3e:8c:2e:b3'], ips=['10.0.0.6', '2222:2222::3'], network_type='vxlan', subnets=[model_proxy.create_reference(l2.Subnet, 'fake_subnet1')], id='fake_port1', extra_dhcp_opts=fake_local_port1_dhcp_opts) fake_ovs_port1 = ovs.OvsPort( id='fake_ovs_port1', ofport=2, name='tap-fake_port1', admin_state='up', type=constants.OVS_VM_INTERFACE, iface_id='fake_port1', attached_mac='fa:16:3e:8c:2e:b3', tunnel_type='vxlan', ) fake_local_port2 = make_fake_local_port(macs=['fa:16:3e:8c:2e:b4'], ips=['10.0.0.7'], tunnel_key=3, id='fake_port2', segmentation_id=41, ofport=3, network_type='vxlan', subnets=['fake_subnet1'], local_network_id=1)
fake_dhcp_params = { constants.DHCP_SIADDR: "10.0.0.1", "opts": fake_local_port1_dhcp_opts } fake_local_port1 = make_fake_local_port(macs=['fa:16:3e:8c:2e:b3'], ips=['10.0.0.6', '2222:2222::3'], subnets=['fake_subnet1'], id='fake_port1', dhcp_params=fake_dhcp_params) fake_ovs_port1 = ovs.OvsPort( id='fake_ovs_port1', ofport=2, name='tap-fake_port1', admin_state='up', type=constants.OVS_COMPUTE_INTERFACE, lport='fake_port1', attached_mac='fa:16:3e:8c:2e:b3', ) fake_local_port2 = make_fake_local_port(macs=['fa:16:3e:8c:2e:b4'], ips=['10.0.0.7'], id='fake_port2', subnets=['fake_subnet1']) fake_ovs_port2 = ovs.OvsPort( id='fake_ovs_port2', ofport=3, name='tap-fake_port2', admin_state='up',