예제 #1
0
    def test_learn_config(self):

        testbed = Testbed()
        dev = Device(testbed=testbed, name='PE1', os='nxos')
        dev.custom = {'abstraction': {'order': ['os'], 'context': 'cli'}}

        golden_output = {
            'return_value':
            '''
R2# show run vrf vni_10100 | sec '^vrf'
vrf context vni_10100
  vni 10100
  rd auto
  address-family ipv4 unicast
    route-target both auto
    route-target both auto mvpn
    route-target both auto evpn
 '''
        }

        vrf = Vrf('vni_10100')

        # Return outputs above as inputs to parser when called
        dev.execute = Mock(**golden_output)

        vrf.device_attr[dev]

        learn = Vrf.learn_config(device=dev)
        if learn:
            self.assertEqual(learn[0].device_attr[dev].address_family_attr['ipv4 unicast'].\
                         route_target_attr['auto'].protocol_attr['mvpn'].rt_mvpn, True)
예제 #2
0
    def test_learn_config(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        dev1.custom = {'abstraction':{'order':['os'], 'context':'cli'}}
        dev2 = Device(testbed=testbed, name='PE2', os='nxos')

        golden_output = {'return_value': '''
            pinxdt-n9kv-3# show run bgp

            !Command: show running-config bgp
            !Time: Wed Jun 28 06:23:27 2017

            version 7.0(3)I7(1)
            feature bgp

            router bgp 333
              dynamic-med-interval 70
              shutdown
              cluster-id 3
              no graceful-restart
              flush-routes
              isolate
              disable-policy-batching ipv4 prefix-list s
              no enforce-first-as
              event-history objstore size large
              address-family ipv4 multicast
                dampening 1 10 30 2
                redistribute static route-map PERMIT_ALL_RM
              address-family ipv6 multicast
                dampening 1 10 30 2
                redistribute static route-map PERMIT_ALL_RM
              address-family ipv6 unicast
                dampening 1 10 30 2
                redistribute static route-map PERMIT_ALL_RM
                inject-map ORIGINATE_IPV6 exist-map INJECTED_IPV6 copy-attributes
                nexthop route-map test
              address-family vpnv4 unicast
                dampening route-map PASS-ALL
                nexthop trigger-delay critical 4 non-critical 5
              address-family vpnv6 unicast
                dampening 1 10 30 2
              address-family ipv4 labeled-unicast
              template peer-session PEER-SESSION
                ebgp-multihop 3
              neighbor fec1::1002
                remote-as 333
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
              neighbor fec1::2002
                remote-as 888
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
              neighbor 4.4.4.4
                capability suppress 4-byte-as
                address-family vpnv6 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                  maximum-prefix 300000
              neighbor 21.0.101.1
                remote-as 333
                address-family ipv4 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family vpnv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                address-family vpnv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
              neighbor 21.0.102.1
                remote-as 333
                update-source loopback0
                address-family ipv4 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family vpnv4 unicast
                  send-community
                  send-community extended
                address-family vpnv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
              neighbor 21.0.201.1
                remote-as 888
                address-family ipv4 multicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family vpnv4 unicast
                  send-community
                  send-community extended
                address-family vpnv6 unicast
                  send-community
                  send-community extended
              vrf ac
                bestpath always-compare-med
                address-family ipv4 unicast
                neighbor 2.2.2.2
                  bfd
                  local-as 222
                  description ja
                  remove-private-as
                  disable-connected-check
                  capability suppress 4-byte-as
                  address-family ipv4 unicast
                    allowas-in 3
                    send-community
                    send-community extended
                    maximum-prefix 2
              vrf management
                neighbor 5.5.5.5
                  password 3 386c0565965f89de
              vrf vpn1
                address-family ipv4 multicast
                  redistribute static route-map PERMIT_ALL_RM
                address-family ipv4 unicast
                  dampening 1 10 30 2
                  redistribute static route-map PERMIT_ALL_RM
                address-family ipv6 multicast
                  dampening 1 10 30 2
                  redistribute static route-map PERMIT_ALL_RM
                address-family ipv6 unicast
                  dampening 1 10 30 2
                  redistribute static route-map PERMIT_ALL_RM
            vrf context vpn1
              rd 1:100
              address-family ipv4 unicast
                route-target import 100:1
                route-target export 100:1
                route-target export 400:400
                export map PERMIT_ALL_RM
                import map PERMIT_ALL_RM
                import vrf default map PERMIT_ALL_RM
                export vrf default map PERMIT_ALL_RM
              address-family ipv6 unicast
                route-target import 1:100
                route-target export 1:100
                route-target export 600:600
                export map PERMIT_ALL_RM
                import map PERMIT_ALL_RM
                import vrf default map PERMIT_ALL_RM
                export vrf default map PERMIT_ALL_RM
            vrf context vpn2
              rd 2:100
              address-family ipv4 unicast
                route-target import 400:400
              address-family ipv6 unicast
                route-target import 600:600
        '''}

        bgp = Bgp(asn=333, bgp_id=333)

        dev1.execute = Mock(**golden_output)

        bgp.device_attr[dev1]
        bgp.device_attr[dev1].enabled = True
        bgp.device_attr[dev1].vrf_attr[None].cluster_id = '3'

        af_name = 'ipv6 unicast'
        bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]
        bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
            af_nexthop_route_map = 'test'
        neighbor_id = '4.4.4.4'
        bgp.device_attr[dev1].vrf_attr[None].add_neighbor(neighbor_id)
        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            nbr_suppress_four_byte_as_capability = True
        nbr_af_name = 'vpnv6 unicast'
        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            address_family_attr[nbr_af_name]
        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            address_family_attr[nbr_af_name].\
            nbr_af_maximum_prefix_max_prefix_no = 300000

        cfgs = bgp.build_config(apply=False)

        # List of BGP conf objects representing the different instances
        # For NXOS, it is only one.
        learn = Bgp.learn_config(device=dev1)

        # Testing cluster_id
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            cluster_id,bgp.device_attr[dev1].vrf_attr['default'].cluster_id)

        # Testing af_nexthop_route_map
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            address_family_attr['ipv6 unicast'].af_nexthop_route_map,
            bgp.device_attr[dev1].vrf_attr['default'].address_family_attr\
            ['ipv6 unicast'].af_nexthop_route_map)

        # Testing nbr_suppress_four_byte_as_capability
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            neighbor_attr['4.4.4.4'].nbr_suppress_four_byte_as_capability,
            bgp.device_attr[dev1].vrf_attr['default'].neighbor_attr['4.4.4.4']\
            .nbr_suppress_four_byte_as_capability)

        # Testing nbr_af_maximum_prefix_max_prefix_no
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            neighbor_attr['4.4.4.4'].address_family_attr[nbr_af_name].\
            nbr_af_maximum_prefix_max_prefix_no, bgp.device_attr[dev1].\
            vrf_attr['default'].neighbor_attr['4.4.4.4'].address_family_attr\
            [nbr_af_name].nbr_af_maximum_prefix_max_prefix_no)
예제 #3
0
    def test_learn_config(self):

        testbed = Testbed()
        dev = Device(testbed=testbed, name='PE2', os='nxos')
        dev.custom = {'abstraction': {'order': ['os'], 'context': 'cli'}}
        dev.mapping = {}
        dev.mapping['cli'] = 'cli'
        # Give the device as a connection type
        # This is done in order to call the parser on the output provided
        dev.connectionmgr.connections['cli'] = dev

        golden_output = {
            'return_value':
            '''
            N95_2_R2# show run pim
            !Command: show running-config pim
!Time: Wed Aug 15 14:45:52 2018

version 7.0(3)I7(3)
feature pim

ip pim bsr bsr-candidate loopback0 priority 128
ip pim rp-address 6.6.6.6 group-list 234.0.0.0/8
ip pim rp-address 6.6.6.6 group-list 239.1.1.0/24 bidir
ip pim rp-address 26.26.26.26 group-list 237.0.0.0/8
ip pim rp-address 126.126.126.126 group-list 238.0.0.0/8
ip pim bsr rp-candidate loopback0 group-list 235.0.0.0/8 priority 128
ip pim send-rp-announce loopback0 group-list 236.0.0.0/8
ip pim send-rp-discovery loopback0
ip pim ssm range 232.0.0.0/8
ip pim anycast-rp 126.126.126.126 2.2.2.2
ip pim anycast-rp 126.126.126.126 6.6.6.6
ip pim bsr forward listen
ip pim register-source loopback0

vrf context VRF1
  ip pim bsr bsr-candidate loopback11 priority 128
  ip pim rp-address 6.6.6.6 group-list 234.0.0.0/8
  ip pim rp-address 6.6.6.6 group-list 239.1.1.0/24 bidir
  ip pim rp-address 26.26.26.26 group-list 237.0.0.0/8
  ip pim rp-address 126.126.126.126 group-list 238.0.0.0/8
  ip pim bsr rp-candidate loopback11 group-list 235.0.0.0/8 priority 128
  ip pim send-rp-announce loopback11 group-list 236.0.0.0/8
  ip pim send-rp-discovery loopback11
  ip pim ssm range 232.0.0.0/8
  ip pim anycast-rp 126.126.126.126 2.2.2.2
  ip pim anycast-rp 126.126.126.126 6.6.6.6
  ip pim bsr forward listen
  ip pim register-source loopback11

interface loopback0
  ip pim sparse-mode
        '''
        }

        golden_output_vrf = '''
            N95_2_R2# show run pim | inc vrf
vrf context VRF1
        '''
        golden_output_vrf6 = '''
            N95_2_R2# show run pim6 | inc vrf
vrf context VRF1
        '''
        golden_output_feature = '''
            N95_2_R2# show run pim | inc feature
feature pim
        '''
        golden_output_feature6 = '''
            N95_2_R2# show run pim6 | inc feature
feature pim6
        '''
        golden_output_auto_rp = '''
            N95_2_R2# show run pim | sec '^i' | inc send-rp-announce
ip pim send-rp-announce loopback0 group-list 236.0.0.0/8
        '''
        golden_output_auto_rp_vrf = '''
            N95_2_R2# show run pim | sec VRF1 | inc send-rp-announce
  ip pim send-rp-announce loopback11 group-list 236.0.0.0/8
        '''

        pim = Pim()
        outputs[
            'show running-config pim | inc feature'] = golden_output_feature
        outputs[
            'show running-config pim6 | inc feature'] = golden_output_feature6
        outputs['show running-config pim | inc vrf'] = golden_output_vrf
        outputs['show running-config pim6 | inc vrf'] = golden_output_vrf6
        outputs[
            "show running-config pim | sec '^i' | inc send-rp-announce"] = golden_output_auto_rp
        outputs[
            "show running-config pim | sec VRF1 | inc send-rp-announce"] = golden_output_auto_rp_vrf
        # Return outputs above as inputs to parser when called
        dev.execute = Mock()
        dev.execute.side_effect = mapper

        learn = Pim.learn_config(
            device=dev,
            attributes=[
                'pim[vrf_attr][default][address_family_attr][ipv4][send_rp_announce_intf]'
            ])

        self.assertEqual(
            learn[0].device_attr[dev].vrf_attr['default'].
            address_family_attr['ipv4'].send_rp_announce_intf, 'loopback0')
        self.assertEqual(
            learn[0].device_attr[dev].vrf_attr['default'].
            address_family_attr['ipv4'].send_rp_announce_group_list, None)

        learn = Pim.learn_config(device=dev)

        self.assertEqual(
            learn[0].device_attr[dev].vrf_attr['default'].
            address_family_attr['ipv4'].send_rp_announce_intf, 'loopback0')
        self.assertEqual(
            learn[0].device_attr[dev].vrf_attr['default'].
            address_family_attr['ipv4'].send_rp_announce_group_list,
            '236.0.0.0/8')
        self.assertEqual(
            learn[0].device_attr[dev].vrf_attr['VRF1'].
            address_family_attr['ipv4'].send_rp_announce_intf, 'loopback11')
        self.assertEqual(
            learn[0].device_attr[dev].vrf_attr['VRF1'].
            address_family_attr['ipv4'].send_rp_announce_group_list,
            '236.0.0.0/8')
예제 #4
0
    def test_learn_config(self):

        testbed = Testbed()
        dev = Device(testbed=testbed, name='PE2', os='nxos')
        dev.custom = {'abstraction': {'order': ['os'], 'context': 'cli'}}
        dev.mapping = {}
        dev.mapping['cli'] = 'cli'
        # Give the device as a connection type
        # This is done in order to call the parser on the output provided
        dev.connectionmgr.connections['cli'] = dev

        golden_output = {
            'return_value':
            '''
            N95_2_R2# show run msdp
!Command: show running-config msdp
!Time: Mon Aug 27 20:17:11 2018

version 7.0(3)I7(3)
feature msdp

ip msdp description 6.6.6.6 test description
ip msdp keepalive 6.6.6.6 50 60
ip msdp reconnect-interval 15

vrf context VRF1
  ip msdp description 6.6.6.6 test description on VRF1
        '''
        }

        golden_output_vrf = '''
            N95_2_R2# show run pim | inc vrf
vrf context VRF1
        '''
        golden_output_reconnect = '''
            N95_2_R2# show run msdp | sec '^i' | inc reconnect-interval
ip msdp reconnect-interval 15
        '''
        golden_output_reconnect_vrf = '''
            N95_2_R2# show run msdp | sec VRF1 | inc reconnect-interval

        '''
        golden_output_description = '''
            N95_2_R2# show run msdp | sec '^i | inc description
ip msdp description 6.6.6.6 test description
        '''
        golden_output_description_vrf = '''
            N95_2_R2# show run msdp | sec VRF1 | inc description
  ip msdp description 6.6.6.6 test description on VRF1
        '''
        golden_output_keepalive = '''
            N95_2_R2# show run msdp | sec '^i' | inc keepalive
ip msdp keepalive 6.6.6.6 50 60
        '''
        golden_output_keepalive_vrf = '''
            N95_2_R2# show run msdp | sec VRF1 | inc keepalive
        '''
        golden_output_originator_id = '''
            N95_2_R2# show run msdp | sec '^i' | inc originator-id
ip msdp originator-id loopback0
        '''
        golden_output_originator_id_vrf = '''
            N95_2_R2# show run msdp | sec VRF1 | inc originator-id
  ip msdp originator-id loopback11
        '''
        golden_output_connect_source = '''
            N95_2_R2# show run msdp | sec '^i' | inc originator-id
ip msdp peer 6.6.6.6 connect-source loopback0
        '''
        golden_output_connect_source_vrf = '''
            N95_2_R2# show run msdp | sec VRF1 | inc originator-id
  ip msdp peer 6.6.6.6 connect-source loopback11 remote-as 234
        '''

        msdp = Msdp()
        outputs['show running-config msdp | inc vrf'] = golden_output_vrf
        outputs[
            "show running-config msdp | sec '^i' | inc reconnect-interval"] = golden_output_reconnect
        outputs[
            "show running-config msdp | sec VRF1 | inc reconnect-interval"] = golden_output_reconnect_vrf
        outputs[
            "show running-config msdp | sec '^i' | inc description"] = golden_output_description
        outputs[
            "show running-config msdp | sec VRF1 | inc description"] = golden_output_description_vrf
        outputs[
            "show running-config msdp | sec '^i' | inc keepalive"] = golden_output_keepalive
        outputs[
            "show running-config msdp | sec VRF1 | inc keepalive"] = golden_output_keepalive_vrf
        outputs[
            "show running-config msdp | sec '^i' | inc originator-id"] = golden_output_originator_id
        outputs[
            "show running-config msdp | sec VRF1 | inc originator-id"] = golden_output_originator_id_vrf
        outputs[
            "show running-config msdp | sec '^i' | inc connect-source"] = golden_output_connect_source
        outputs[
            "show running-config msdp | sec VRF1 | inc connect-source"] = golden_output_connect_source_vrf
        # Return outputs above as inputs to parser when called
        dev.execute = Mock()
        dev.execute.side_effect = mapper

        learn = Msdp.learn_config(
            device=dev,
            attributes=[
                'msdp[vrf_attr][default][peer_attr][(.*)][description]'
            ])

        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .peer_attr['6.6.6.6'].description, 'test description')
        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .peer_attr['6.6.6.6'].keepalive_interval, None)

        learn = Msdp.learn_config(device=dev)

        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .peer_attr['6.6.6.6'].keepalive_interval, 50)
        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .peer_attr['6.6.6.6'].holdtime_interval, 60)

        self.assertEqual(learn[0].device_attr[dev].vrf_attr['VRF1']\
                .peer_attr['6.6.6.6'].description, 'test description on VRF1')
        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .peer_attr['6.6.6.6'].description, 'test description')

        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .originating_rp, 'loopback0')
        self.assertEqual(learn[0].device_attr[dev].vrf_attr['VRF1']\
                .originating_rp, 'loopback11')

        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .peer_attr['6.6.6.6'].connected_source, 'loopback0')
        self.assertEqual(learn[0].device_attr[dev].vrf_attr['VRF1']\
                .peer_attr['6.6.6.6'].connected_source, 'loopback11')
        self.assertEqual(learn[0].device_attr[dev].vrf_attr['VRF1']\
                .peer_attr['6.6.6.6'].peer_as, '234')

        self.assertEqual(learn[0].device_attr[dev].vrf_attr['default']\
                .global_connect_retry_interval, 15)