def test_acl_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', \
                                            product=self.product, role='leaf')
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi1 = PhysicalInterface('pi1-esi', parent_obj=pr)
        pi_id = self._vnc_lib.physical_interface_create(pi1)

        #create sg and associate egress rule and check acls
        sg1_obj = self.security_group_create(
            'sg-1', ['default-domain', 'default-project'])
        self.wait_for_get_sg_id(sg1_obj.get_fq_name())
        sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name())
        rule1 = self.build_acl_rule(0, 65535, 'egress', 'icmp', 'IPv4')
        sg_rule1 = self._security_group_rule_build(rule1,
                                                   sg1_obj.get_fq_name_str())
        self._security_group_rule_append(sg1_obj, sg_rule1)
        self._vnc_lib.security_group_update(sg1_obj)
        sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name())

        # associate li, vmi
        vn1_name = 'vn-acl-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(
            ipam_obj,
            VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2001)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-acl' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type='project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('li1.0', parent_obj=pi1)
        li1.set_logical_interface_vlan_tag(100)
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)

        filters = self.get_firewall_filters(sg1_obj)
        self.check_firewall_config(filters, False)
        self.check_acl_config('li1', filters, False)

        vmi1.add_security_group(sg1_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi1)
        self.check_firewall_config(filters, True)
        self.check_acl_config('li1', filters, True)

        self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name())
        self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name())
    def test_native_vlan_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf')
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi = PhysicalInterface('intf-native', parent_obj = pr)
        pi_id = self._vnc_lib.physical_interface_create(pi)

        # associate li, vmi
        vn1_name = 'vn-native-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-native-' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2003)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('intf-native.0', parent_obj = pi)
        li1.logical_interface_vlan_tag = 0
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)
        self.check_l2_evpn_native_vlan_config(vn1_obj, 'l2', 'intf-native')
Beispiel #3
0
    def test_native_vlan_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf')
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi = PhysicalInterface('intf-native', parent_obj = pr)
        pi_id = self._vnc_lib.physical_interface_create(pi)

        # associate li, vmi
        vn1_name = 'vn-native-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-native-' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2003)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('intf-native.0', parent_obj = pi)
        li1.logical_interface_vlan_tag = 0
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)
        self.check_l2_evpn_native_vlan_config(vn1_obj, 'l2', 'intf-native')
    def test_acl_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', \
                                            product=self.product, role='leaf')
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi1 = PhysicalInterface('pi1-esi', parent_obj = pr)
        pi_id = self._vnc_lib.physical_interface_create(pi1)

        #create sg and associate egress rule and check acls
        sg1_obj = self.security_group_create('sg-1', ['default-domain',
                                                      'default-project'])
        self.wait_for_get_sg_id(sg1_obj.get_fq_name())
        sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name())
        rule1 = self.build_acl_rule(0, 65535, 'egress', 'icmp', 'IPv4')
        sg_rule1 = self._security_group_rule_build(rule1,
                                                   sg1_obj.get_fq_name_str())
        self._security_group_rule_append(sg1_obj, sg_rule1)
        self._vnc_lib.security_group_update(sg1_obj)
        sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name())

        # associate li, vmi
        vn1_name = 'vn-acl-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2001)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-acl' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('li1.0', parent_obj = pi1)
        li1.set_logical_interface_vlan_tag(100)
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)

        filters = self.get_firewall_filters(sg1_obj)
        self.check_firewall_config(filters, False)
        self.check_acl_config('li1', filters, False)

        vmi1.add_security_group(sg1_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi1)
        self.check_firewall_config(filters, True)
        self.check_acl_config('li1', filters, True)

        self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name())
        self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name())
Beispiel #5
0
 def setUp(self, extra_config_knobs=None):
     super(DMTestCase, self).setUp(extra_config_knobs=extra_config_knobs)
     flexmock(manager, connect=fake_netconf_connect)
     setattr(device_manager.mx_conf.MxConf, 'device_send', fake_send_netconf)
     setattr(device_manager.qfx_5k.Qfx5kConf, 'device_send', fake_send_netconf)
     setattr(device_manager.qfx_10k.Qfx10kConf, 'device_send', fake_send_netconf)
     FakeNetconfManager.set_model(self.product)
     return
 def setUp(self, extra_config_knobs=None):
     super(DMTestCase, self).setUp(extra_config_knobs=extra_config_knobs)
     flexmock(manager, connect=fake_netconf_connect)
     setattr(device_manager.mx_conf.MxConf, 'device_send', fake_send_netconf)
     setattr(device_manager.qfx_5k.Qfx5kConf, 'device_send', fake_send_netconf)
     setattr(device_manager.qfx_10k.Qfx10kConf, 'device_send', fake_send_netconf)
     FakeNetconfManager.set_model(self.product)
     return
 def setUp(self, extra_config_knobs=None):
     super(DMTestCase, self).setUp(extra_config_knobs=extra_config_knobs)
     flexmock(manager, connect=fake_netconf_connect)
     setattr(device_manager.mx_conf.MxConf, 'device_send', fake_send_netconf)
     setattr(device_manager.qfx_5k.Qfx5kConf, 'device_send', fake_send_netconf)
     setattr(device_manager.qfx_10k.Qfx10kConf, 'device_send', fake_send_netconf)
     setattr(device_manager.overlay_conf.OverlayConf, 'device_send',
             fake_job_handler_push)
     setattr(device_manager.pnf_conf.PnfConf, 'device_send',
             fake_job_handler_push)
     if hasattr(self, 'product'):
         FakeNetconfManager.set_model(self.product)
     return
 def test_esi_config(self):
     FakeNetconfManager.set_model('qfx5110')
     bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product="qfx5110")
     pr.set_physical_router_role("leaf")
     self._vnc_lib.physical_router_update(pr)
     pi = PhysicalInterface('pi1', parent_obj = pr)
     esi_value = "33:33:33:33:33:33:33:33:33:33"
     pi.set_ethernet_segment_identifier(esi_value)
     pi_id = self._vnc_lib.physical_interface_create(pi)
     self.check_esi_config('pi1', esi_value)
     pi.set_ethernet_segment_identifier(None)
     self._vnc_lib.physical_interface_update(pi)
     self.check_esi_config('pi1', esi_value, False)
 def test_esi_config(self):
     FakeNetconfManager.set_model('qfx5110')
     bgp_router, pr = self.create_router('router' + self.id(),
                                         '1.1.1.1',
                                         product="qfx5110")
     pr.set_physical_router_role("leaf")
     self._vnc_lib.physical_router_update(pr)
     pi = PhysicalInterface('pi1', parent_obj=pr)
     esi_value = "33:33:33:33:33:33:33:33:33:33"
     pi.set_ethernet_segment_identifier(esi_value)
     pi_id = self._vnc_lib.physical_interface_create(pi)
     self.check_esi_config('pi1', esi_value)
     pi.set_ethernet_segment_identifier(None)
     self._vnc_lib.physical_interface_update(pi)
     self.check_esi_config('pi1', esi_value, False)
    def test_dm_plugins(self):
        # check basic valid vendor, product plugin
        bgp_router, pr = self.create_router('router100' + self.id(),
                                            '1.1.1.1',
                                            product=self.product)
        self.check_dm_plugin()
        pr_config = FakeDeviceConnect.params.get("pr_config")

        # update valid another vendor, product; another plugin should be found
        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('qfx')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "qfx"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        # check invalid vendor, product; no plugin
        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('cix')
        pr.physical_router_vendor_name = "cix"
        pr.physical_router_product_name = "cix100"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin(is_valid=False)

        # update valid vendor, product; plugin should be found, config should be pushed
        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('mx80')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "mx"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        # device connection is down, config should not be pushed
        pr_config = FakeDeviceConnect.params.get("pr_config")
        pr_config._nc_manager.connected = False
        self.assertFalse(pr_config.is_connected())
        FakeDeviceConnect.reset()
        self.set_hold_time(bgp_router, 100)
        self._vnc_lib.bgp_router_update(bgp_router)
        self.check_dm_plugin(False)
        # device connection is up, config should be auto pushed
        pr_config._nc_manager.connected = True
        self.check_dm_plugin()

        # unset vnc-managed, should generate delete groups config
        pr.physical_router_vnc_managed = False
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_delete_groups()

        # set vnc-managed, should generate groups config again
        pr.physical_router_vnc_managed = True
        self._vnc_lib.physical_router_update(pr)
        self.check_if_xml_is_generated()

        bgp_router_fq = bgp_router.get_fq_name()
        pr_fq = pr.get_fq_name()
        self.delete_routers(bgp_router, pr)
        self.wait_for_routers_delete(bgp_router_fq, pr_fq)
    def test_esi_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf')
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi1 = PhysicalInterface('pi1-esi', parent_obj = pr)
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        pi1.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi1)

        # associate li, vmi
        vn1_name = 'vn-esi-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2002)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('li1.0', parent_obj = pi1)
        li1.set_logical_interface_vlan_tag(100)
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)


        self.check_esi_config('ae127', esi_value)
        self.check_esi_config('pi1-esi', esi_value, False)

        pi2 = PhysicalInterface('pi2-esi', parent_obj = pr)
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        pi2.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi2)

        li2 = LogicalInterface('li2.0', parent_obj = pi2)
        li2.set_logical_interface_vlan_tag(100)
        li2.set_virtual_machine_interface(vmi1)
        li2_id = self._vnc_lib.logical_interface_create(li2)

        self.check_esi_config('ae127', esi_value)
        self.check_esi_config('pi2-esi', esi_value, False)

        self.check_chassis_config()
        self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"])
        self.check_l2_evpn_config("ae127", 100)

        pi3 = PhysicalInterface('pi3-esi', parent_obj = pr)
        esi_value = "44:44:44:44:44:44:44:44:44:44"
        pi3.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi3)

        fq_name = ['default-domain', 'default-project', 'vmi3-esi' + self.id()]
        vmi3 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi3.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi3)

        li3 = LogicalInterface('li3.0', parent_obj = pi3)
        li3.logical_interface_vlan_tag = 200
        li3.set_virtual_machine_interface(vmi3)
        li3_id = self._vnc_lib.logical_interface_create(li3)

        self.check_esi_config('ae126', esi_value)
        self.check_esi_config('pi3-esi', esi_value, False)

        self.check_chassis_config()
        self.check_lacp_config("ae126", esi_value, ["pi3-esi"])
        self.check_l2_evpn_config("ae126", 200)

        # check again ae127 state, should not be changed
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"])
        self.check_l2_evpn_config("ae127", 100)

        '''
        # changing  esi value on one interface is not allowed by api-server
        # need to disable interface, if we want to change esi.
        # DM/api server support will be implemented.
        # We should re-write this piece of validation code

        # unset esi value  on one interface, ae config should still be generated
        pi1.set_ethernet_segment_identifier(None)
        self._vnc_lib.physical_interface_update(pi1)
        self.check_esi_config('ae127', esi_value, True)

        # unset esi value  on both interfaces, ae config should not be generated
        pi2.set_ethernet_segment_identifier(None)
        self._vnc_lib.physical_interface_update(pi2)
        self.check_esi_config('ae127', esi_value, False)

        # set esi value back, run delete tests
        pi1.set_ethernet_segment_identifier(esi_value)
        self._vnc_lib.physical_interface_update(pi1)
        pi2.set_ethernet_segment_identifier(esi_value)
        self._vnc_lib.physical_interface_update(pi2)
        self.check_esi_config('ae127', esi_value, True)
        '''

        self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name())
        self._vnc_lib.logical_interface_delete(fq_name=li2.get_fq_name())
        self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name())
        self._vnc_lib.physical_interface_delete(fq_name=pi2.get_fq_name())
        self.check_esi_config('ae127', esi_value, False)
    def verify_dm_qfx_switch_options(self, product):
        # check basic valid vendor, product plugin
        FakeNetconfManager.set_model(product)

        # create global vrouter config object
        self.create_global_vrouter_config()
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=product)

        # enable vxlan routing on project
        proj = self._vnc_lib.project_read(fq_name=["default-domain", "default-project"])
        proj.set_vxlan_routing(True)
        self._vnc_lib.project_update(proj)

        # create customer network, logical router and link to logical router
        vn1_name = 'vn1' + self.id() + "-" + product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam1' + self.id() + "-" + product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2000)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1' + self.id() + "-" + product]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        fq_name = ['default-domain', 'default-project', 'lr1' + self.id() + "-" + product]
        lr = LogicalRouter(fq_name=fq_name, parent_type = 'project')
        lr.set_physical_router(pr)
        lr.add_virtual_machine_interface(vmi1)
        lr_uuid = self._vnc_lib.logical_router_create(lr)

        # make sure internal is created
        int_vn = self.check_lr_internal_vn_state(lr)

        # verify generated switch options config
        self.check_switch_options_config(vn1_obj, "l2")
        # verify internal vn's config
        if 'qfx5' not in self.product:
            self.check_switch_options_config(int_vn, "l3")

        # check vlans config
        self.check_vlans_config(vn1_obj,
                 vn1_obj_properties.get_vxlan_network_identifier(), 'l2')
        if 'qfx10' in self.product:
            self.check_ri_vlans_config(vn1_obj,
                 vn1_obj_properties.get_vxlan_network_identifier(), 'l3')

        # cleanup
        pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name())
        lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name())
        lr.del_physical_router(pr)
        self._vnc_lib.logical_router_update(lr)

        bgp_router_fq = bgp_router.get_fq_name()
        pr_fq = pr.get_fq_name()
        self.delete_routers(bgp_router, pr)
        self.wait_for_routers_delete(bgp_router_fq, pr_fq)
    def verify_dm_qfx_switch_options(self, product, role=None):
        # check basic valid vendor, product plugin
        FakeNetconfManager.set_model(product)

        # create global vrouter config object
        gv = self.create_global_vrouter_config()
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=product, role=role)

        # enable vxlan routing on project
        proj = self._vnc_lib.project_read(fq_name=["default-domain", "default-project"])
        proj.set_vxlan_routing(True)
        self._vnc_lib.project_update(proj)

        # create customer network, logical router and link to logical router
        vn1_name = 'vn1' + self.id() + "-" + product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam1' + self.id() + "-" + product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2005)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1' + self.id() + "-" + product]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        fq_name = ['default-domain', 'default-project', 'lr1' + self.id() + "-" + product]
        lr = LogicalRouter(fq_name=fq_name, parent_type = 'project', vxlan_network_identifier='1111')
        lr.set_physical_router(pr)
        lr.add_virtual_machine_interface(vmi1)
        lr_uuid = self._vnc_lib.logical_router_create(lr)

        # make sure internal is created
        int_vn = self.check_lr_internal_vn_state(lr)


        # verify generated switch options config
        self.check_switch_options_config(vn1_obj, "l2", role)

        if role == 'spine':
            self.check_ri_config(vn1_obj, 'l2', False)
            self.check_ri_config(int_vn, 'l3', True)
            # check spine internal vn config
            self.check_spine_irb_config(int_vn, vn1_obj)
            # check bogus lo0 config
            self.check_spine_bogus_lo0_ip(int_vn)
            # check evpn type config
            self.check_spine_evpn_type5_config(int_vn, lr)
        else:
            self.check_ri_config(vn1_obj, 'l2', False)
            self.check_ri_config(vn1_obj, 'l3', False)

        # verify l2 evpns targets
        if 'qfx5' in product:
            ri = self._vnc_lib.routing_instance_read(fq_name=vn1_obj.get_fq_name() + [vn1_obj.name])
            self.check_l2_evpn_vrf_targets(ri.get_route_target_refs()[0]['to'][0])

        # verify internal vn's config
        if 'qfx5' not in product:
            self.check_switch_options_config(int_vn, "l3", role)

        # check vlans config
        if 'qfx5' in product:
            self.check_vlans_config(vn1_obj,
                 vn1_obj_properties.get_vxlan_network_identifier(), 'l2')

        if 'qfx10' in product:
            self.check_ri_vlans_config(int_vn,
                 vn1_obj_properties.get_vxlan_network_identifier(), 'l3', False)

        # check l2 evpn qfx5k leaf config
        if 'qfx5' in product:
            gv.set_vxlan_network_identifier_mode('configured')
            self._vnc_lib.global_vrouter_config_update(gv)
            self.check_l2_evpn_proto_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier())

        # check global export policy
        if 'qfx5' in product:
            self.check_switch_options_export_policy_config(True)
        else:
            self.check_switch_options_export_policy_config(False)

        # check policy options
        if 'qfx5' in product:
            self.check_policy_options_config(True)
        else:
            self.check_policy_options_config(False)

        # cleanup
        pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name())
        lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name())
        lr.del_physical_router(pr)
        self._vnc_lib.logical_router_update(lr)

        bgp_router_fq = bgp_router.get_fq_name()
        pr_fq = pr.get_fq_name()
        self.delete_routers(bgp_router, pr)
        self.wait_for_routers_delete(bgp_router_fq, pr_fq)

        self._vnc_lib.logical_router_delete(id=lr_uuid)
        vmi1.del_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi1)
        self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid)
        self._vnc_lib.virtual_machine_interface_delete(id=vmi1.uuid)
Beispiel #14
0
    def verify_dm_qfx_switch_options(self, product, role=None):
        # check basic valid vendor, product plugin
        FakeNetconfManager.set_model(product)

        # create global vrouter config object
        gv = self.create_global_vrouter_config()
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=product, role=role)

        # enable vxlan routing on project
        proj = self._vnc_lib.project_read(fq_name=["default-domain", "default-project"])
        proj.set_vxlan_routing(True)
        self._vnc_lib.project_update(proj)

        # create customer network, logical router and link to logical router
        vn1_name = 'vn1' + self.id() + "-" + product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam1' + self.id() + "-" + product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2005)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1' + self.id() + "-" + product]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        fq_name = ['default-domain', 'default-project', 'lr1' + self.id() + "-" + product]
        lr = LogicalRouter(fq_name=fq_name, parent_type = 'project', vxlan_network_identifier='1111')
        lr.set_physical_router(pr)
        lr.add_virtual_machine_interface(vmi1)
        lr_uuid = self._vnc_lib.logical_router_create(lr)

        # make sure internal is created
        int_vn = self.check_lr_internal_vn_state(lr)


        # verify generated switch options config
        self.check_switch_options_config(vn1_obj, "l2", role)

        if role == 'spine':
            self.check_ri_config(vn1_obj, 'l2', False)
            self.check_ri_config(int_vn, 'l3', True)
            # check spine internal vn config
            self.check_spine_irb_config(int_vn, vn1_obj)
            # check bogus lo0 config
            self.check_spine_bogus_lo0_ip(int_vn)
            # check evpn type config
            self.check_spine_evpn_type5_config(int_vn, lr)
        else:
            self.check_ri_config(vn1_obj, 'l2', False)
            self.check_ri_config(vn1_obj, 'l3', False)

        # verify l2 evpns targets
        if 'qfx5' in product:
            ri = self._vnc_lib.routing_instance_read(fq_name=vn1_obj.get_fq_name() + [vn1_obj.name])
            self.check_l2_evpn_vrf_targets(ri.get_route_target_refs()[0]['to'][0])

        # verify internal vn's config
        if 'qfx5' not in product:
            self.check_switch_options_config(int_vn, "l3", role)

        # check vlans config
        if 'qfx5' in product:
            self.check_vlans_config(vn1_obj,
                 vn1_obj_properties.get_vxlan_network_identifier(), 'l2')

        if 'qfx10' in product:
            self.check_ri_vlans_config(int_vn,
                 vn1_obj_properties.get_vxlan_network_identifier(), 'l3', False)

        # check l2 evpn qfx5k leaf config
        if 'qfx5' in product:
            gv.set_vxlan_network_identifier_mode('configured')
            self._vnc_lib.global_vrouter_config_update(gv)
            self.check_l2_evpn_proto_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier())

        # check global export policy
        if 'qfx5' in product:
            self.check_switch_options_export_policy_config(True)
        else:
            self.check_switch_options_export_policy_config(False)

        # check policy options
        if 'qfx5' in product:
            self.check_policy_options_config(True)
        else:
            self.check_policy_options_config(False)

        # cleanup
        pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name())
        lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name())
        lr.del_physical_router(pr)
        self._vnc_lib.logical_router_update(lr)

        bgp_router_fq = bgp_router.get_fq_name()
        pr_fq = pr.get_fq_name()
        self.delete_routers(bgp_router, pr)
        self.wait_for_routers_delete(bgp_router_fq, pr_fq)

        self._vnc_lib.logical_router_delete(id=lr_uuid)
        vmi1.del_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi1)
        self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid)
        self._vnc_lib.virtual_machine_interface_delete(id=vmi1.uuid)
Beispiel #15
0
    def test_esi_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf')
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi1 = PhysicalInterface('pi1-esi', parent_obj = pr)
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        pi1.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi1)

        # associate li, vmi
        vn1_name = 'vn-esi-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType(
            [IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2002)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('li1.0', parent_obj = pi1)
        li1.set_logical_interface_vlan_tag(100)
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)


        self.check_esi_config('ae127', esi_value)
        self.check_esi_config('pi1-esi', esi_value, False)

        pi2 = PhysicalInterface('pi2-esi', parent_obj = pr)
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        pi2.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi2)

        li2 = LogicalInterface('li2.0', parent_obj = pi2)
        li2.set_logical_interface_vlan_tag(100)
        li2.set_virtual_machine_interface(vmi1)
        li2_id = self._vnc_lib.logical_interface_create(li2)

        self.check_esi_config('ae127', esi_value)
        self.check_esi_config('pi2-esi', esi_value, False)

        self.check_chassis_config()
        self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"])
        self.check_l2_evpn_config("ae127", 100)

        pi3 = PhysicalInterface('pi3-esi', parent_obj = pr)
        esi_value = "44:44:44:44:44:44:44:44:44:44"
        pi3.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi3)

        fq_name = ['default-domain', 'default-project', 'vmi3-esi' + self.id()]
        vmi3 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project')
        vmi3.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi3)

        li3 = LogicalInterface('li3.0', parent_obj = pi3)
        li3.logical_interface_vlan_tag = 200
        li3.set_virtual_machine_interface(vmi3)
        li3_id = self._vnc_lib.logical_interface_create(li3)

        self.check_esi_config('ae126', esi_value)
        self.check_esi_config('pi3-esi', esi_value, False)

        self.check_chassis_config()
        self.check_lacp_config("ae126", esi_value, ["pi3-esi"])
        self.check_l2_evpn_config("ae126", 200)

        # check again ae127 state, should not be changed
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"])
        self.check_l2_evpn_config("ae127", 100)

        '''
        # changing  esi value on one interface is not allowed by api-server
        # need to disable interface, if we want to change esi.
        # DM/api server support will be implemented.
        # We should re-write this piece of validation code

        # unset esi value  on one interface, ae config should still be generated
        pi1.set_ethernet_segment_identifier(None)
        self._vnc_lib.physical_interface_update(pi1)
        self.check_esi_config('ae127', esi_value, True)

        # unset esi value  on both interfaces, ae config should not be generated
        pi2.set_ethernet_segment_identifier(None)
        self._vnc_lib.physical_interface_update(pi2)
        self.check_esi_config('ae127', esi_value, False)

        # set esi value back, run delete tests
        pi1.set_ethernet_segment_identifier(esi_value)
        self._vnc_lib.physical_interface_update(pi1)
        pi2.set_ethernet_segment_identifier(esi_value)
        self._vnc_lib.physical_interface_update(pi2)
        self.check_esi_config('ae127', esi_value, True)
        '''

        self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name())
        self._vnc_lib.logical_interface_delete(fq_name=li2.get_fq_name())
        self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name())
        self._vnc_lib.physical_interface_delete(fq_name=pi2.get_fq_name())
        self.check_esi_config('ae127', esi_value, False)
Beispiel #16
0
    def test_dm_qfx_switch_options(self):
        # check basic valid vendor, product plugin
        FakeNetconfManager.set_model('qfx5110')

        # create global vrouter config object
        self.create_global_vrouter_config()
        bgp_router, pr = self.create_router('router' + self.id(),
                                            '1.1.1.1',
                                            product="qfx5110")

        # enable vxlan routing on project
        proj = self._vnc_lib.project_read(
            fq_name=["default-domain", "default-project"])
        proj.set_vxlan_routing(True)
        self._vnc_lib.project_update(proj)

        # create customer network, logical router and link to logical router
        vn1_name = 'vn1' + self.id()
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam1' + self.id())
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(
            ipam_obj,
            VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2000)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type='project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        fq_name = ['default-domain', 'default-project', 'lr1' + self.id()]
        lr = LogicalRouter(fq_name=fq_name, parent_type='project')
        lr.set_physical_router(pr)
        lr.add_virtual_machine_interface(vmi1)
        lr_uuid = self._vnc_lib.logical_router_create(lr)

        # make sure internal is created
        int_vn = self.check_lr_internal_vn_state(lr)

        # verify generated switch options config
        self.check_switch_options_config(vn1_obj, "l2")
        # verify internal vn's config
        self.check_switch_options_config(int_vn, "l3")

        # check vlans config
        self.check_vlans_config(
            vn1_obj, vn1_obj_properties.get_vxlan_network_identifier(), 'l2')

        # cleanup
        pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name())
        lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name())
        lr.del_physical_router(pr)
        self._vnc_lib.logical_router_update(lr)

        bgp_router_fq = bgp_router.get_fq_name()
        pr_fq = pr.get_fq_name()
        self.delete_routers(bgp_router, pr)
        self.wait_for_routers_delete(bgp_router_fq, pr_fq)
Beispiel #17
0
    def test_dci_api(self):
        FakeNetconfManager.set_model('qfx10000')
        gs = GlobalSystemConfig(fq_name=["default-global-system-config"])
        subnets = SubnetListType([SubnetType("10.0.0.0", 24), SubnetType("20.0.0.0", 16)])
        gs.set_data_center_interconnect_loopback_namespace(subnets)
        self._vnc_lib.global_system_config_update(gs)
        self.check_dci_ipam()

        self.check_dci_lo_network(["10.0.0.0", 24])
        self.check_dci_lo_network(["20.0.0.0", 16])

        subnets = SubnetListType([SubnetType("30.0.0.0", 24)])
        gs.set_data_center_interconnect_loopback_namespace(subnets)
        self._vnc_lib.global_system_config_update(gs)
        self.check_dci_lo_network(["10.0.0.0", 24], False)
        self.check_dci_lo_network(["30.0.0.0", 24], True)

        gs.set_data_center_interconnect_loopback_namespace(None)
        self._vnc_lib.global_system_config_update(gs)
        self.check_dci_lo_network(["30.0.0.0", 24], False)

        bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product="qfx10000", role="spine")

        fab1 = self._vnc_lib.fabric_create(Fabric('fab1'))
        fab1 = self._vnc_lib.fabric_read(id=fab1)
        pr.set_fabric(fab1)
        self._vnc_lib.physical_router_update(pr)

        lr = LogicalRouter("lr1")
        lr.set_physical_router(pr)
        lr_uuid = self._vnc_lib.logical_router_create(lr)
        lr = self._vnc_lib.logical_router_read(id=lr_uuid)

        dci = DataCenterInterconnect("test-dci")
        dci.add_logical_router(lr)

        self._vnc_lib.data_center_interconnect_create(dci)

        # test lr connected two dcis
        dci2 = DataCenterInterconnect("test-dci-2")
        dci2.add_logical_router(lr)
        try:
            self._vnc_lib.data_center_interconnect_create(dci2)
            raise Exception("dci is not allowed to create with lr, which is part of another dci")
        except cfgm_common.exceptions.BadRequest as e:
            # lr can not be associated more than one dci
            pass

        # test lr connected to different fabric pr's, this lr can't be part of dci
        bgp_router2, pr2 = self.create_router('router-2' + self.id(), '2.1.1.1', product="qfx10000", role="spine")
        fab2 = self._vnc_lib.fabric_create(Fabric('fab2'))
        fab2 = self._vnc_lib.fabric_read(id=fab2)


        pr2.set_fabric(fab2)
        self._vnc_lib.physical_router_update(pr2)

        lr2 = LogicalRouter("lr2")
        lr2.add_physical_router(pr)
        lr2.add_physical_router(pr2)
        lr_uuid = self._vnc_lib.logical_router_create(lr2)
        lr = self._vnc_lib.logical_router_read(id=lr_uuid)

        dci2 = DataCenterInterconnect("test-dci-2")
        dci2.add_logical_router(lr)
        try:
            self._vnc_lib.data_center_interconnect_create(dci2)
            raise Exception("dci is not allowed to create with lr, lr has prs part of different fabrics")
        except cfgm_common.exceptions.BadRequest as e:
            # can't create dci with lr connected to two different fabrics
            pass

        self._vnc_lib.data_center_interconnect_delete(fq_name=dci.fq_name)
    def test_dm_plugins(self):
        # check basic valid vendor, product plugin
        bgp_router, pr = self.create_router('router100' + self.id(), '1.1.1.1',
                                                            product=self.product)
        self.check_dm_plugin()
        pr_config = FakeDeviceConnect.params.get("pr_config")

        # update valid another vendor, product; another plugin should be found
        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('qfx5110')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "qfx5110"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('qfx5100')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "qfx5100"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('qfx5200')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "qfx5200"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('qfx5300')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "qfx5300"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin(is_valid=False)

        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('qfx10000')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "qfx10000"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        # check invalid vendor, product; no plugin
        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('cix')
        pr.physical_router_vendor_name = "cix"
        pr.physical_router_product_name = "cix100"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin(is_valid=False)

        # update valid vendor, product; plugin should be found, config should be pushed
        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('mx80')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "mx"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        FakeDeviceConnect.reset()
        FakeNetconfManager.set_model('mx480')
        pr.physical_router_vendor_name = "juniper"
        pr.physical_router_product_name = "mx480"
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_plugin()

        # device connection is down, config should not be pushed
        pr_config = FakeDeviceConnect.params.get("pr_config")
        pr_config._nc_manager.connected = False
        self.assertFalse(pr_config.is_connected())
        FakeDeviceConnect.reset()
        self.set_hold_time(bgp_router, 100)
        self._vnc_lib.bgp_router_update(bgp_router)
        self.check_dm_plugin(False)
        # device connection is up, config should be auto pushed
        pr_config._nc_manager.connected = True
        self.check_dm_plugin()

        # unset vnc-managed, should generate delete groups config
        pr.physical_router_vnc_managed = False
        self._vnc_lib.physical_router_update(pr)
        self.check_dm_delete_groups()

        # set vnc-managed, should generate groups config again
        pr.physical_router_vnc_managed = True
        self._vnc_lib.physical_router_update(pr)
        self.check_if_xml_is_generated()

        bgp_router_fq = bgp_router.get_fq_name()
        pr_fq = pr.get_fq_name()
        self.delete_routers(bgp_router, pr)
        self.wait_for_routers_delete(bgp_router_fq, pr_fq)
    def test_esi_config(self):
        self.product = 'qfx5110'
        FakeNetconfManager.set_model(self.product)
        bgp_router, pr = self.create_router('router' + self.id(),
                                            '1.1.1.1',
                                            product=self.product)
        pr.set_physical_router_role("leaf")
        self._vnc_lib.physical_router_update(pr)
        pi = PhysicalInterface('pi1-esi', parent_obj=pr)
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        pi.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi)

        # associate li, vmi
        vn1_name = 'vn-esi-' + self.id() + "-" + self.product
        vn1_obj = VirtualNetwork(vn1_name)
        ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product)
        self._vnc_lib.network_ipam_create(ipam_obj)
        vn1_obj.add_network_ipam(
            ipam_obj,
            VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))]))

        vn1_obj_properties = VirtualNetworkType()
        vn1_obj_properties.set_vxlan_network_identifier(2000)
        vn1_obj_properties.set_forwarding_mode('l2_l3')
        vn1_obj.set_virtual_network_properties(vn1_obj_properties)

        vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj)
        vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid)

        fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()]
        vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type='project')
        vmi1.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi1)

        li1 = LogicalInterface('li1.0', parent_obj=pi)
        li1.set_virtual_machine_interface(vmi1)
        li1_id = self._vnc_lib.logical_interface_create(li1)

        self.check_esi_config('ae127', esi_value)
        self.check_esi_config('pi1-esi', esi_value, False)

        pi = PhysicalInterface('pi2-esi', parent_obj=pr)
        esi_value = "33:33:33:33:33:33:33:33:33:33"
        pi.set_ethernet_segment_identifier(esi_value)
        pi_id = self._vnc_lib.physical_interface_create(pi)

        fq_name = ['default-domain', 'default-project', 'vmi2-esi' + self.id()]
        vmi2 = VirtualMachineInterface(fq_name=fq_name, parent_type='project')
        vmi2.set_virtual_network(vn1_obj)
        self._vnc_lib.virtual_machine_interface_create(vmi2)

        li2 = LogicalInterface('li2.0', parent_obj=pi)
        li2.set_virtual_machine_interface(vmi2)
        li2_id = self._vnc_lib.logical_interface_create(li2)

        self.check_esi_config('ae127', esi_value)
        self.check_esi_config('pi2-esi', esi_value, False)

        self.check_chassis_config()
        self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"])
        self.check_l2_evpn_config("ae127")

        pi.set_ethernet_segment_identifier(None)
        self._vnc_lib.physical_interface_update(pi)
        self.check_esi_config('ae127', esi_value, False)