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()
示例#2
0
    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()
示例#3
0
 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()
示例#4
0
 def test_port_update_neg_ofport(self):
     self.assertFalse(
         impl_idl._is_ovsport_update_valid(
             'set',
             ovs.OvsPort(
                 ofport=-1,
                 name='tap-uuid',
             ),
         ), )
示例#5
0
 def test_port_update_qg(self):
     self.assertFalse(
         impl_idl._is_ovsport_update_valid(
             'set',
             ovs.OvsPort(
                 ofport=1,
                 name='qg-some-uuid',
             ),
         ), )
示例#6
0
 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',
             ),
         ), )
示例#7
0
 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',
             ),
         ), )
示例#8
0
    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)
示例#10
0
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',