Example #1
0
    def testAddressListExclusion(self):
        a1 = nacaddr.IPv4('1.1.1.0/24')
        a2 = nacaddr.IPv4('10.0.0.0/24')
        b1 = nacaddr.IPv4('1.1.1.1/32')
        b2 = nacaddr.IPv4('10.0.0.25/32')
        b3 = nacaddr.IPv4('192.168.0.0/16')

        expected = [
            nacaddr.IPv4('1.1.1.0/32'),
            nacaddr.IPv4('1.1.1.2/31'),
            nacaddr.IPv4('1.1.1.4/30'),
            nacaddr.IPv4('1.1.1.8/29'),
            nacaddr.IPv4('1.1.1.16/28'),
            nacaddr.IPv4('1.1.1.32/27'),
            nacaddr.IPv4('1.1.1.64/26'),
            nacaddr.IPv4('1.1.1.128/25'),
            nacaddr.IPv4('10.0.0.0/28'),
            nacaddr.IPv4('10.0.0.16/29'),
            nacaddr.IPv4('10.0.0.24/32'),
            nacaddr.IPv4('10.0.0.26/31'),
            nacaddr.IPv4('10.0.0.28/30'),
            nacaddr.IPv4('10.0.0.32/27'),
            nacaddr.IPv4('10.0.0.64/26'),
            nacaddr.IPv4('10.0.0.128/25')
        ]

        self.assertListEqual(
            nacaddr.AddressListExclude([a1, a2], [b1, b2, b3]), expected)
        # [1,2,3] + [4,5,6] = [1,2,3,4,5,6].  this is basically the same test as
        # above but i think it's a little more readable
        self.assertListEqual(
            nacaddr.AddressListExclude([a1, a2], [b1, b2, b3]),
            a1.AddressExclude(b1) + a2.AddressExclude(b2))
Example #2
0
 def testAddressListExcludeCaseSix(self):
     # IPv6 does not affect IPv4
     superset = [nacaddr.IPv6('0::ffff:0.0.0.0/96')]
     excludes = [nacaddr.IPv4('0.0.0.0/0')]
     expected = [nacaddr.IPv6('0::ffff:0.0.0.0/96')]
     self.assertListEqual(nacaddr.AddressListExclude(superset, excludes),
                          expected)
Example #3
0
  def testComplexAddressListExcludesion(self):
    # this is a big fugly test. there was a bug in AddressListExclude
    # which manifested itself when more than one member of the excludes
    # list was a part of the same superset token.
    #
    # for example, it used to be like so:
    #  excludes = ['1.1.1.1/32', '1.1.1.2/32']
    #  superset = ['1.1.1.0/30']
    #
    # '1.1.1.0/30'.AddressExclude('1.1.1.1/32') ->
    #    ['1.1.1.0/32', '1.1.1.2/32', '1.1.1.3/32']
    # '1.1.1.0/30'.AddressExclude('1.1.1.2/32') ->
    #    ['1.1.1.0/32', '1.1.1.1/32', '1.1.1.3/32']
    #
    # yet combining those two results gives you
    #   ['1.1.1.0/32', '1.1.1.1/32', '1.1.1.2/32' '1.1.1.3/32'], or
    #   '1.1.1.0/30', which clearly isn't right.

    excludes = [nacaddr.IPv4('10.0.0.0/23'), nacaddr.IPv4('10.1.0.0/16')]
    superset = [nacaddr.IPv4('0.0.0.0/0')]

    expected = [nacaddr.IPv4('0.0.0.0/5'), nacaddr.IPv4('8.0.0.0/7'),
                nacaddr.IPv4('10.0.2.0/23'), nacaddr.IPv4('10.0.4.0/22'),
                nacaddr.IPv4('10.0.8.0/21'), nacaddr.IPv4('10.0.16.0/20'),
                nacaddr.IPv4('10.0.32.0/19'), nacaddr.IPv4('10.0.64.0/18'),
                nacaddr.IPv4('10.0.128.0/17'), nacaddr.IPv4('10.2.0.0/15'),
                nacaddr.IPv4('10.4.0.0/14'), nacaddr.IPv4('10.8.0.0/13'),
                nacaddr.IPv4('10.16.0.0/12'), nacaddr.IPv4('10.32.0.0/11'),
                nacaddr.IPv4('10.64.0.0/10'), nacaddr.IPv4('10.128.0.0/9'),
                nacaddr.IPv4('11.0.0.0/8'), nacaddr.IPv4('12.0.0.0/6'),
                nacaddr.IPv4('16.0.0.0/4'), nacaddr.IPv4('32.0.0.0/3'),
                nacaddr.IPv4('64.0.0.0/2'), nacaddr.IPv4('128.0.0.0/1')]

    self.assertListEqual(nacaddr.AddressListExclude(superset, excludes),
                         expected)
Example #4
0
 def testAddressListExcludeCaseOne(self):
   # Small block eliminated by large block, and an extra block that stays.
   # For both IP versions.
   superset = [nacaddr.IPv4('200.0.0.0/24'), nacaddr.IPv4('10.1.0.0/24'),
               nacaddr.IPv6('200::/56'), nacaddr.IPv6('10:1::/56')]
   excludes = [nacaddr.IPv6('10::/16'), nacaddr.IPv4('10.0.0.0/8')]
   expected = [nacaddr.IPv4('200.0.0.0/24'), nacaddr.IPv6('200::/56')]
   self.assertListEqual(nacaddr.AddressListExclude(superset, excludes),
                        expected)
Example #5
0
 def testAddressListExcludeCaseThree(self):
   # Two blocks off both ends of a large block.
   superset = [nacaddr.IPv4('200.0.0.0/24'), nacaddr.IPv4('10.0.0.0/8'),
               nacaddr.IPv6('200::/56'), nacaddr.IPv6('10::/16')]
   excludes = [nacaddr.IPv6('10::/18'), nacaddr.IPv6('10:c000::/18'),
               nacaddr.IPv4('10.0.0.0/10'), nacaddr.IPv4('10.192.0.0/10')]
   expected = [nacaddr.IPv4('10.64.0.0/10'), nacaddr.IPv4('10.128.0.0/10'),
               nacaddr.IPv4('200.0.0.0/24'),
               nacaddr.IPv6('10:4000::/18'), nacaddr.IPv6('10:8000::/18'),
               nacaddr.IPv6('200::/56')]
   self.assertListEqual(nacaddr.AddressListExclude(superset, excludes),
                        expected)