def test_eos_bgp_operation_replace(self):
        net = dict(prefix="203.0.113.0", masklen=27, route_map="RMAP_1")
        net2 = dict(prefix="192.0.2.32", masklen=29, route_map="RMAP_2")
        net_3 = dict(prefix="2001:db8:8000::", masklen=34, route_map=None)
        net_4 = dict(prefix="2001:db8:c000::", masklen=34, route_map=None)

        af_1 = dict(afi="ipv4", networks=[net, net2])
        af_2 = dict(afi="ipv6", networks=[net_3, net_4])

        config = dict(bgp_as=64496, address_family=[af_1, af_2], networks=None)
        obj = Provider(params=dict(config=config, operation="replace"))
        commands = obj.render(self._bgp_config)

        cmd = [
            "router bgp 64496",
            "address-family ipv4",
            "network 203.0.113.0/27 route-map RMAP_1",
            "network 192.0.2.32/29 route-map RMAP_2",
            "no network 192.0.2.0/27",
            "no network 198.51.100.0/24",
            "exit",
            "exit",
        ]

        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_address_family_neighbors(self):
        af_nbr_1 = dict(neighbor="198.51.100.104",
                        default_originate=True,
                        activate=True)
        af_nbr_2 = dict(
            neighbor="198.51.100.105",
            activate=True,
            weight=30,
            graceful_restart=True,
        )

        config = dict(
            bgp_as=64496,
            address_family=[dict(afi="ipv4", neighbors=[af_nbr_1, af_nbr_2])],
            networks=None,
        )

        obj = Provider(params=dict(config=config, operation="merge"))

        commands = obj.render(self._bgp_config)
        cmd = [
            "router bgp 64496",
            "address-family ipv4",
            "neighbor 198.51.100.104 activate",
            "neighbor 198.51.100.104 default-originate",
            "neighbor 198.51.100.105 weight 30",
            "neighbor 198.51.100.105 activate",
            "neighbor 198.51.100.105 graceful-restart",
            "exit",
            "exit",
        ]
        self.assertEqual(sorted(commands), sorted(cmd))
 def test_eos_bgp_remove(self):
     obj = Provider(params=dict(
         config=dict(bgp_as=64496, networks=None, address_family=None),
         operation="delete",
     ))
     commands = obj.render(self._bgp_config)
     self.assertEqual(commands, ["no router bgp 64496"])
    def test_eos_bgp_address_family_neighbors(self):
        af_nbr_1 = dict(neighbor='198.51.100.104',
                        default_originate=True,
                        activate=True)
        af_nbr_2 = dict(neighbor='198.51.100.105',
                        activate=True,
                        weight=30,
                        graceful_restart=True)

        config = dict(
            bgp_as=64496,
            address_family=[dict(afi='ipv4', neighbors=[af_nbr_1, af_nbr_2])],
            networks=None)

        obj = Provider(params=dict(config=config, operation='merge'))

        commands = obj.render(self._bgp_config)
        cmd = [
            'router bgp 64496', 'address-family ipv4',
            'neighbor 198.51.100.104 activate',
            'neighbor 198.51.100.104 default-originate',
            'neighbor 198.51.100.105 weight 30',
            'neighbor 198.51.100.105 activate',
            'neighbor 198.51.100.105 graceful-restart', 'exit', 'exit'
        ]
        self.assertEqual(sorted(commands), sorted(cmd))
 def test_eos_bgp_idempotent(self):
     obj = Provider(params=dict(config=dict(bgp_as=64496,
                                            router_id='192.0.2.1',
                                            networks=None,
                                            address_family=None),
                                operation='merge'))
     commands = obj.render(self._bgp_config)
     self.assertEqual(commands, [])
 def test_eos_bgp_network_idempotent(self):
     obj = Provider(params=dict(config=dict(
         bgp_as=64496,
         networks=[
             dict(prefix='192.0.2.0', masklen=27, route_map='RMAP_1'),
             dict(prefix='198.51.100.0', masklen=24, route_map='RMAP_2')
         ],
         address_family=None),
                                operation='merge'))
     commands = obj.render(self._bgp_config)
     self.assertEqual(commands, [])
    def test_eos_bgp_redistribute_idempotent(self):
        rd_1 = dict(protocol='ospf', route_map='RMAP_1')
        config = dict(bgp_as=64496,
                      redistribute=[rd_1],
                      networks=None,
                      address_family=None)

        obj = Provider(params=dict(config=config, operation='merge'))

        commands = obj.render(self._bgp_config)
        self.assertEqual(commands, [])
 def test_eos_bgp_neighbor(self):
     obj = Provider(params=dict(config=dict(
         bgp_as=64496,
         neighbors=[dict(neighbor='198.51.100.12', remote_as=64498)],
         networks=None,
         address_family=None),
                                operation='merge'))
     commands = obj.render(self._bgp_config)
     self.assertEqual(commands, [
         'router bgp 64496', 'neighbor 198.51.100.12 remote-as 64498',
         'exit'
     ])
    def test_eos_bgp_address_family_networks_idempotent(self):
        net = dict(prefix='2001:db8:8000::', masklen=34, route_map=None)
        net2 = dict(prefix='2001:db8:c000::', masklen=34, route_map=None)

        config = dict(bgp_as=64496,
                      address_family=[dict(afi='ipv6', networks=[net, net2])],
                      networks=None)

        obj = Provider(params=dict(config=config, operation='merge'))

        commands = obj.render(self._bgp_config)
        self.assertEqual(commands, [])
 def test_eos_bgp(self):
     obj = Provider(params=dict(
         config=dict(
             bgp_as=64496,
             router_id="192.0.2.2",
             networks=None,
             address_family=None,
         ),
         operation="merge",
     ))
     commands = obj.render(self._bgp_config)
     self.assertEqual(commands,
                      ["router bgp 64496", "router-id 192.0.2.2", "exit"])
    def test_eos_bgp_redistribute(self):
        rd_1 = dict(protocol='rip', route_map='RMAP_1')

        config = dict(bgp_as=64496,
                      redistribute=[rd_1],
                      networks=None,
                      address_family=None)

        obj = Provider(params=dict(config=config, operation='merge'))

        commands = obj.render(self._bgp_config)
        cmd = ['router bgp 64496', 'redistribute rip route-map RMAP_1', 'exit']
        self.assertEqual(sorted(commands), sorted(cmd))
 def test_eos_bgp_neighbor_idempotent(self):
     neighbors = [
         dict(neighbor='198.51.100.102',
              remote_as=64498,
              timers=dict(keepalive=300, holdtime=360)),
         dict(neighbor='203.0.113.5', remote_as=64511, maximum_prefix=500)
     ]
     obj = Provider(params=dict(config=dict(bgp_as=64496,
                                            neighbors=neighbors,
                                            networks=None,
                                            address_family=None),
                                operation='merge'))
     commands = obj.render(self._bgp_config)
     self.assertEqual(commands, [])
    def test_eos_bgp_operation_override(self):
        net_1 = dict(prefix="2001:0db8:0800::", masklen=38, route_map="RMAP_1")
        net_2 = dict(prefix="2001:0db8:1c00::", masklen=38, route_map="RMAP_2")
        nbr_1 = dict(
            neighbor="203.0.113.111",
            remote_as=64511,
            update_source="Ethernet2",
        )
        nbr_2 = dict(
            neighbor="203.0.113.120",
            remote_as=64511,
            timers=dict(keepalive=300, holdtime=360),
        )
        af_nbr_1 = dict(neighbor="203.0.113.111", activate=True)
        af_nbr_2 = dict(neighbor="203.0.113.120",
                        activate=True,
                        default_originate=True)

        af_1 = dict(afi="ipv4", neighbors=[af_nbr_1, af_nbr_2])
        af_2 = dict(afi="ipv6", networks=[net_1, net_2])
        config = dict(
            bgp_as=64496,
            neighbors=[nbr_1, nbr_2],
            address_family=[af_1, af_2],
            networks=None,
        )

        obj = Provider(params=dict(config=config, operation="override"))
        commands = obj.render(self._bgp_config)

        cmd = [
            "no router bgp 64496",
            "router bgp 64496",
            "neighbor 203.0.113.111 remote-as 64511",
            "neighbor 203.0.113.111 update-source Ethernet2",
            "neighbor 203.0.113.120 remote-as 64511",
            "neighbor 203.0.113.120 timers 300 360",
            "address-family ipv4",
            "neighbor 203.0.113.111 activate",
            "neighbor 203.0.113.120 default-originate",
            "neighbor 203.0.113.120 activate",
            "exit",
            "address-family ipv6",
            "network 2001:0db8:0800::/38 route-map RMAP_1",
            "network 2001:0db8:1c00::/38 route-map RMAP_2",
            "exit",
            "exit",
        ]

        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_redistribute(self):
        rd_1 = dict(protocol="rip", route_map="RMAP_1")

        config = dict(
            bgp_as=64496,
            redistribute=[rd_1],
            networks=None,
            address_family=None,
        )

        obj = Provider(params=dict(config=config, operation="merge"))

        commands = obj.render(self._bgp_config)
        cmd = ["router bgp 64496", "redistribute rip route-map RMAP_1", "exit"]
        self.assertEqual(sorted(commands), sorted(cmd))
 def test_eos_bgp_network(self):
     obj = Provider(params=dict(config=dict(
         bgp_as=64496,
         networks=[
             dict(prefix='203.0.113.0', masklen=24, route_map='RMAP_1')
         ],
         address_family=None),
                                operation='merge'))
     commands = obj.render(self._bgp_config)
     self.assertEqual(
         sorted(commands),
         sorted([
             'router bgp 64496', 'network 203.0.113.0/24 route-map RMAP_1',
             'exit'
         ]))
    def test_eos_bgp_address_family_networks(self):
        net = dict(prefix='203.0.113.128', masklen=26, route_map='RMAP_1')
        net2 = dict(prefix='203.0.113.192', masklen=26, route_map='RMAP_2')

        config = dict(bgp_as=64496,
                      address_family=[dict(afi='ipv4', networks=[net, net2])],
                      networks=None)

        obj = Provider(params=dict(config=config, operation='merge'))

        commands = obj.render(self._bgp_config)
        cmd = [
            'router bgp 64496', 'address-family ipv4',
            'network 203.0.113.128/26 route-map RMAP_1',
            'network 203.0.113.192/26 route-map RMAP_2', 'exit', 'exit'
        ]
        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_address_family_neighbors_idempotent(self):
        af_nbr_1 = dict(neighbor='198.51.100.102',
                        activate=True,
                        graceful_restart=True,
                        default_originate=True,
                        weight=25)
        af_nbr_2 = dict(neighbor='192.0.2.111',
                        activate=True,
                        default_originate=True)
        config = dict(
            bgp_as=64496,
            address_family=[dict(afi='ipv4', neighbors=[af_nbr_1, af_nbr_2])],
            networks=None)

        obj = Provider(params=dict(config=config, operation='merge'))

        commands = obj.render(self._bgp_config)
        self.assertEqual(commands, [])
 def test_eos_bgp_neighbor(self):
     obj = Provider(params=dict(
         config=dict(
             bgp_as=64496,
             neighbors=[dict(neighbor="198.51.100.12", remote_as=64498)],
             networks=None,
             address_family=None,
         ),
         operation="merge",
     ))
     commands = obj.render(self._bgp_config)
     self.assertEqual(
         commands,
         [
             "router bgp 64496",
             "neighbor 198.51.100.12 remote-as 64498",
             "exit",
         ],
     )
    def test_eos_bgp_operation_replace_with_new_as(self):
        nbr = dict(neighbor='203.0.113.124',
                   remote_as=64496,
                   update_source='Ethernet3')

        config = dict(bgp_as=64497,
                      neighbors=[nbr],
                      networks=None,
                      address_family=None)
        obj = Provider(params=dict(config=config, operation='replace'))
        commands = obj.render(self._bgp_config)

        cmd = [
            'no router bgp 64496', 'router bgp 64497',
            'neighbor 203.0.113.124 remote-as 64496',
            'neighbor 203.0.113.124 update-source Ethernet3', 'exit'
        ]

        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_address_family_networks(self):
        net = dict(prefix="203.0.113.128", masklen=26, route_map="RMAP_1")
        net2 = dict(prefix="203.0.113.192", masklen=26, route_map="RMAP_2")

        config = dict(
            bgp_as=64496,
            address_family=[dict(afi="ipv4", networks=[net, net2])],
            networks=None,
        )

        obj = Provider(params=dict(config=config, operation="merge"))

        commands = obj.render(self._bgp_config)
        cmd = [
            "router bgp 64496",
            "address-family ipv4",
            "network 203.0.113.128/26 route-map RMAP_1",
            "network 203.0.113.192/26 route-map RMAP_2",
            "exit",
            "exit",
        ]
        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_operation_replace(self):
        net = dict(prefix='203.0.113.0', masklen=27, route_map='RMAP_1')
        net2 = dict(prefix='192.0.2.32', masklen=29, route_map='RMAP_2')
        net_3 = dict(prefix='2001:db8:8000::', masklen=34, route_map=None)
        net_4 = dict(prefix='2001:db8:c000::', masklen=34, route_map=None)

        af_1 = dict(afi='ipv4', networks=[net, net2])
        af_2 = dict(afi='ipv6', networks=[net_3, net_4])

        config = dict(bgp_as=64496, address_family=[af_1, af_2], networks=None)
        obj = Provider(params=dict(config=config, operation='replace'))
        commands = obj.render(self._bgp_config)

        cmd = [
            'router bgp 64496', 'address-family ipv4',
            'network 203.0.113.0/27 route-map RMAP_1',
            'network 192.0.2.32/29 route-map RMAP_2',
            'no network 192.0.2.0/27', 'no network 198.51.100.0/24', 'exit',
            'exit'
        ]

        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_operation_override(self):
        net_1 = dict(prefix='2001:0db8:0800::', masklen=38, route_map='RMAP_1')
        net_2 = dict(prefix='2001:0db8:1c00::', masklen=38, route_map='RMAP_2')
        nbr_1 = dict(neighbor='203.0.113.111',
                     remote_as=64511,
                     update_source='Ethernet2')
        nbr_2 = dict(neighbor='203.0.113.120',
                     remote_as=64511,
                     timers=dict(keepalive=300, holdtime=360))
        af_nbr_1 = dict(neighbor='203.0.113.111', activate=True)
        af_nbr_2 = dict(neighbor='203.0.113.120',
                        activate=True,
                        default_originate=True)

        af_1 = dict(afi='ipv4', neighbors=[af_nbr_1, af_nbr_2])
        af_2 = dict(afi='ipv6', networks=[net_1, net_2])
        config = dict(bgp_as=64496,
                      neighbors=[nbr_1, nbr_2],
                      address_family=[af_1, af_2],
                      networks=None)

        obj = Provider(params=dict(config=config, operation='override'))
        commands = obj.render(self._bgp_config)

        cmd = [
            'no router bgp 64496', 'router bgp 64496',
            'neighbor 203.0.113.111 remote-as 64511',
            'neighbor 203.0.113.111 update-source Ethernet2',
            'neighbor 203.0.113.120 remote-as 64511',
            'neighbor 203.0.113.120 timers 300 360', 'address-family ipv4',
            'neighbor 203.0.113.111 activate',
            'neighbor 203.0.113.120 default-originate',
            'neighbor 203.0.113.120 activate', 'exit', 'address-family ipv6',
            'network 2001:0db8:0800::/38 route-map RMAP_1',
            'network 2001:0db8:1c00::/38 route-map RMAP_2', 'exit', 'exit'
        ]

        self.assertEqual(sorted(commands), sorted(cmd))
    def test_eos_bgp_operation_replace_with_new_as(self):
        nbr = dict(
            neighbor="203.0.113.124",
            remote_as=64496,
            update_source="Ethernet3",
        )

        config = dict(bgp_as=64497,
                      neighbors=[nbr],
                      networks=None,
                      address_family=None)
        obj = Provider(params=dict(config=config, operation="replace"))
        commands = obj.render(self._bgp_config)

        cmd = [
            "no router bgp 64496",
            "router bgp 64497",
            "neighbor 203.0.113.124 remote-as 64496",
            "neighbor 203.0.113.124 update-source Ethernet3",
            "exit",
        ]

        self.assertEqual(sorted(commands), sorted(cmd))
 def test_eos_bgp_network(self):
     obj = Provider(params=dict(
         config=dict(
             bgp_as=64496,
             networks=[
                 dict(
                     prefix="203.0.113.0",
                     masklen=24,
                     route_map="RMAP_1",
                 )
             ],
             address_family=None,
         ),
         operation="merge",
     ))
     commands = obj.render(self._bgp_config)
     self.assertEqual(
         sorted(commands),
         sorted([
             "router bgp 64496",
             "network 203.0.113.0/24 route-map RMAP_1",
             "exit",
         ]),
     )