def test3_IPVPNHashEqual(self): ''' Two VPN NLRI distinct only by their *action* should hash to the same value, and be equal ''' packedPrefix, mask = prefixToPackedIPMask("1.1.1.1/32") nlri1 = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packedPrefix, mask, Labels([42], True), RouteDistinguisher.fromElements("42.42.42.42", 5), IP.pton("45.45.45.45"), OUT.ANNOUNCE) nlri2 = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packedPrefix, mask, Labels([42], True), RouteDistinguisher.fromElements("42.42.42.42", 5), IP.pton("45.45.45.45"), OUT.WITHDRAW) self.assertEqual(hash(nlri1), hash(nlri2)) self.assertTrue(nlri1.eq(nlri2)) self.assertEqual(nlri1, nlri2)
def test200_IPVPNCreatePackUnpack(self): '''Test pack/unpack for IPVPN routes''' nlri = IPVPN.new( AFI.ipv4, SAFI.mpls_vpn, IP.pton("1.2.3.0"), 24, Labels([42], True), RouteDistinguisher.fromElements("42.42.42.42", 5), ) packed = nlri.pack() unpacked, leftover = IPVPN.unpack_nlri(AFI.ipv4, SAFI.mpls_vpn, packed, OUT.UNSET, None) self.assertEqual(0, len(leftover)) # TODO: compare packed with a reference encoding verified # as conformant with RFC4364 self.assertTrue(isinstance(unpacked, IPVPN)) self.assertEqual("1.2.3.0/24", unpacked.cidr.prefix()) self.assertEqual(1, len(unpacked.labels.labels)) self.assertEqual(42, unpacked.labels.labels[0]) self.assertEqual("42.42.42.42:5", unpacked.rd._str())
def test0_IPVPNHashEqual(self): ''' Two indistinct VPN NLRIs should hash to the same value, and be equal ''' rd = RouteDistinguisher.fromElements("42.42.42.42", 5) packedPrefix, mask = prefixToPackedIPMask("1.1.1.1/32") nlri1 = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packedPrefix, mask, Labels([42], True), rd, IP.pton("45.45.45.45"), OUT.ANNOUNCE) nlri2 = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packedPrefix, mask, Labels([42], True), rd, IP.pton("45.45.45.45"), OUT.ANNOUNCE) self.assertEqual(hash(nlri1), hash(nlri2)) self.assertEqual(nlri1, nlri2)
def test2_IPVPNHashEqual(self): ''' Two VPN NLRI distinct only by their *nexthop* should hash to the same value, and be equal ''' packedPrefix, mask = prefixToPackedIPMask("1.1.1.1/32") nlri1 = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packedPrefix, mask, Labels([42], True), RouteDistinguisher.fromElements("42.42.42.42", 5), IP.pton("45.45.45.45"), OUT.ANNOUNCE) nlri2 = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packedPrefix, mask, Labels([42], True), RouteDistinguisher.fromElements("42.42.42.42", 5), IP.pton("77.77.77.77"), OUT.ANNOUNCE) self.assertEqual(hash(nlri1), hash(nlri2)) self.assertTrue(nlri1.eq(nlri2)) self.assertNotEqual(nlri1, nlri2)
def test200_IPVPNCreatePackUnpack(self): '''Test pack/unpack for IPVPN routes''' nlri = IPVPN.new(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), IP.pton("1.2.3.0"), 24, Labels([42], True), RouteDistinguisher.fromElements("42.42.42.42", 5)) packed = nlri.pack() unpacked,leftover = IPVPN.unpack_nlri(AFI(AFI.ipv4), SAFI(SAFI.mpls_vpn), packed, OUT.UNSET, None) self.assertEqual(0, len(leftover)) # TODO: compare packed with a reference encoding verified # as conformant with RFC4364 self.assertTrue(isinstance(unpacked, IPVPN)) self.assertEqual("1.2.3.0/24", unpacked.cidr.prefix()) self.assertEqual(1, len(unpacked.labels.labels)) self.assertEqual(42, unpacked.labels.labels[0]) self.assertEqual("42.42.42.42:5", unpacked.rd._str())