def test_pack_body(self):
        lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV4)
        lsa_body.add_subnet_info(10, '255.255.255.0', '222.222.1.0')
        self.assertEqual(TestExtensionPrefix.body_bytes_v2_1,
                         lsa_body.pack_lsa_body())
        lsa_body.add_subnet_info(20, '255.255.0.0', '222.1.0.0')
        self.assertEqual(TestExtensionPrefix.body_bytes_v2_2,
                         lsa_body.pack_lsa_body())
        lsa_body.add_subnet_info(30, '255.0.0.0', '1.0.0.0')
        self.assertEqual(TestExtensionPrefix.body_bytes_v2_3,
                         lsa_body.pack_lsa_body())
        lsa_body.add_subnet_info(40, '0.0.0.0', '0.0.0.0')
        self.assertEqual(TestExtensionPrefix.body_bytes_v2_4,
                         lsa_body.pack_lsa_body())

        lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV6)
        lsa_body.add_prefix_info(10, 0, 0, '::')
        self.assertEqual(TestExtensionPrefix.body_bytes_v3_1,
                         lsa_body.pack_lsa_body())
        lsa_body.add_prefix_info(20, 32, 0, '2001:db8::')
        self.assertEqual(TestExtensionPrefix.body_bytes_v3_2,
                         lsa_body.pack_lsa_body())
        lsa_body.add_prefix_info(30, 64, 0, '2001:db8:cafe:1::')
        self.assertEqual(TestExtensionPrefix.body_bytes_v3_3,
                         lsa_body.pack_lsa_body())
        lsa_body.add_prefix_info(40, 96, 0, '2001:db8:cafe:1::')
        self.assertEqual(TestExtensionPrefix.body_bytes_v3_4,
                         lsa_body.pack_lsa_body())
        lsa_body.add_prefix_info(50, 128, 0, '2001:db8:cafe:1::')
        self.assertEqual(TestExtensionPrefix.body_bytes_v3_5,
                         lsa_body.pack_lsa_body())
 def test_get_subnet_info(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV4)
     self.assertIsNone(
         lsa_body.get_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertIsNone(
         lsa_body.get_subnet_info('255.255.0.0', '111.111.2.0'))
     lsa_body.add_subnet_info(10, '255.255.255.0', '222.222.1.0')
     self.assertEqual([10, '255.255.255.0', '222.222.1.0'],
                      lsa_body.get_subnet_info('255.255.255.0',
                                               '222.222.1.0'))
     self.assertIsNone(
         lsa_body.get_subnet_info('255.255.0.0', '111.111.2.0'))
     lsa_body.add_subnet_info(10, '255.255.0.0', '111.111.2.0')
     self.assertEqual([10, '255.255.255.0', '222.222.1.0'],
                      lsa_body.get_subnet_info('255.255.255.0',
                                               '222.222.1.0'))
     self.assertEqual([10, '255.255.0.0', '111.111.2.0'],
                      lsa_body.get_subnet_info('255.255.0.0',
                                               '111.111.2.0'))
     lsa_body.delete_subnet_info('255.255.255.0', '222.222.1.0')
     self.assertIsNone(
         lsa_body.get_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertEqual([10, '255.255.0.0', '111.111.2.0'],
                      lsa_body.get_subnet_info('255.255.0.0',
                                               '111.111.2.0'))
     lsa_body.delete_subnet_info('255.255.0.0', '111.111.2.0')
     self.assertIsNone(
         lsa_body.get_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertIsNone(
         lsa_body.get_subnet_info('255.255.0.0', '111.111.2.0'))
 def test_delete_prefix_info(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV6)
     lsa_body.delete_prefix_info(64, '2001:db8:cafe:1::')
     self.assertEqual(0, len(lsa_body.prefix_list))
     lsa_body.add_prefix_info(10, 64, 0, '2001:db8:cafe:1::')
     lsa_body.add_prefix_info(10, 32, 0, '2001:db8::')
     lsa_body.delete_prefix_info(64, '2001:db8:cafe:1::')
     self.assertEqual(1, len(lsa_body.prefix_list))
     self.assertEqual([[10, 32, 0, '2001:db8::']], lsa_body.prefix_list)
     lsa_body.delete_prefix_info(64, '2001:db8:cafe:1::')
     self.assertEqual(1, len(lsa_body.prefix_list))
     self.assertEqual([[10, 32, 0, '2001:db8::']], lsa_body.prefix_list)
     lsa_body.delete_prefix_info(32, '2001:db8::')
     self.assertEqual(0, len(lsa_body.prefix_list))
 def test_add_subnet_info_invalid_parameters(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV4)
     with self.assertRaises(ValueError):
         lsa_body.add_subnet_info(-1, '0.0.0.0', '0.0.0.0')
     with self.assertRaises(ValueError):
         lsa_body.add_subnet_info(conf.MAX_VALUE_24_BITS + 1, '0.0.0.0',
                                  '0.0.0.0')
     with self.assertRaises(ValueError):
         lsa_body.add_subnet_info(0, '', '0.0.0.0')
     with self.assertRaises(ValueError):
         lsa_body.add_subnet_info(0, '2001:db8:cafe:1::', '0.0.0.0')
     with self.assertRaises(ValueError):
         lsa_body.add_subnet_info(0, '0.0.0.0', '')
     with self.assertRaises(ValueError):
         lsa_body.add_subnet_info(0, '0.0.0.0', '2001:db8:cafe:1::')
 def test_delete_subnet_info(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV4)
     lsa_body.delete_subnet_info('255.255.255.0', '222.222.1.0')
     self.assertEqual(0, len(lsa_body.subnet_list))
     lsa_body.add_subnet_info(10, '255.255.255.0', '222.222.1.0')
     lsa_body.add_subnet_info(10, '255.255.0.0', '111.111.2.0')
     lsa_body.delete_subnet_info('255.255.255.0', '222.222.1.0')
     self.assertEqual(1, len(lsa_body.subnet_list))
     self.assertEqual([[10, '255.255.0.0', '111.111.2.0']],
                      lsa_body.subnet_list)
     lsa_body.delete_subnet_info('255.255.255.0', '222.222.1.0')
     self.assertEqual(1, len(lsa_body.subnet_list))
     self.assertEqual([[10, '255.255.0.0', '111.111.2.0']],
                      lsa_body.subnet_list)
     lsa_body.delete_subnet_info('255.255.0.0', '111.111.2.0')
     self.assertEqual(0, len(lsa_body.subnet_list))
 def test_has_prefix_info(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV6)
     self.assertFalse(lsa_body.has_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertFalse(lsa_body.has_prefix_info(32, '2001:db8::'))
     lsa_body.add_prefix_info(10, 64, 0, '2001:db8:cafe:1::')
     self.assertTrue(lsa_body.has_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertFalse(lsa_body.has_prefix_info(32, '2001:db8::'))
     lsa_body.add_prefix_info(10, 32, 0, '2001:db8::')
     self.assertTrue(lsa_body.has_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertTrue(lsa_body.has_prefix_info(32, '2001:db8::'))
     lsa_body.delete_prefix_info(64, '2001:db8:cafe:1::')
     self.assertFalse(lsa_body.has_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertTrue(lsa_body.has_prefix_info(32, '2001:db8::'))
     lsa_body.delete_prefix_info(32, '2001:db8::')
     self.assertFalse(lsa_body.has_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertFalse(lsa_body.has_prefix_info(32, '2001:db8::'))
 def test_add_prefix_info_invalid_parameters(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV6)
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(-1, 0, 0, '::')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(conf.MAX_VALUE_24_BITS + 1, 0, 0, '::')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(0, -1, 0, '::')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(0, 16 * conf.BYTE_SIZE + 1, 0, '::')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(0, 0, -1, '::')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(0, 0, conf.MAX_VALUE_8_BITS + 1, '::')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(0, 0, 0, '')
     with self.assertRaises(ValueError):
         lsa_body.add_prefix_info(0, 0, 0, '0.0.0.0')
 def test_add_subnet_info_successful(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV4)
     self.assertEqual(0, len(lsa_body.subnet_list))
     lsa_body.add_subnet_info(0, '0.0.0.0', '255.255.255.255')
     self.assertEqual(1, len(lsa_body.subnet_list))
     self.assertEqual([[0, '0.0.0.0', '255.255.255.255']],
                      lsa_body.subnet_list)
     lsa_body.add_subnet_info(conf.MAX_VALUE_24_BITS, '0.0.0.0',
                              '255.255.255.255')
     self.assertEqual(1, len(lsa_body.subnet_list))
     self.assertEqual([[0, '0.0.0.0', '255.255.255.255']],
                      lsa_body.subnet_list)
     lsa_body.add_subnet_info(conf.MAX_VALUE_24_BITS, '255.255.255.255',
                              '0.0.0.0')
     self.assertEqual(2, len(lsa_body.subnet_list))
     self.assertEqual(
         [[0, '0.0.0.0', '255.255.255.255'],
          [conf.MAX_VALUE_24_BITS, '255.255.255.255', '0.0.0.0']],
         lsa_body.subnet_list)
 def test_add_prefix_info_successful(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV6)
     self.assertEqual(0, len(lsa_body.prefix_list))
     lsa_body.add_prefix_info(0, 0, 0, '::')
     self.assertEqual(1, len(lsa_body.prefix_list))
     self.assertEqual([[0, 0, 0, '::']], lsa_body.prefix_list)
     lsa_body.add_prefix_info(conf.MAX_VALUE_24_BITS, 0,
                              conf.MAX_VALUE_8_BITS, '::')
     self.assertEqual(1, len(lsa_body.prefix_list))
     self.assertEqual([[0, 0, 0, '::']], lsa_body.prefix_list)
     lsa_body.add_prefix_info(conf.MAX_VALUE_24_BITS, 16 * conf.BYTE_SIZE,
                              conf.MAX_VALUE_8_BITS,
                              'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
     self.assertEqual(2, len(lsa_body.prefix_list))
     self.assertEqual([[0, 0, 0, '::'],
                       [
                           conf.MAX_VALUE_24_BITS, 16 * conf.BYTE_SIZE,
                           conf.MAX_VALUE_8_BITS,
                           'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
                       ]], lsa_body.prefix_list)
 def test_get_prefix_info(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV6)
     self.assertIsNone(lsa_body.get_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertIsNone(lsa_body.get_prefix_info(32, '2001:db8::'))
     lsa_body.add_prefix_info(10, 64, 0, '2001:db8:cafe:1::')
     self.assertEqual([10, 64, 0, '2001:db8:cafe:1::'],
                      lsa_body.get_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertIsNone(lsa_body.get_prefix_info(32, '2001:db8::'))
     lsa_body.add_prefix_info(10, 32, 0, '2001:db8::')
     self.assertEqual([10, 64, 0, '2001:db8:cafe:1::'],
                      lsa_body.get_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertEqual([10, 32, 0, '2001:db8::'],
                      lsa_body.get_prefix_info(32, '2001:db8::'))
     lsa_body.delete_prefix_info(64, '2001:db8:cafe:1::')
     self.assertIsNone(lsa_body.get_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertEqual([10, 32, 0, '2001:db8::'],
                      lsa_body.get_prefix_info(32, '2001:db8::'))
     lsa_body.delete_prefix_info(32, '2001:db8::')
     self.assertIsNone(lsa_body.get_prefix_info(64, '2001:db8:cafe:1::'))
     self.assertIsNone(lsa_body.get_prefix_info(32, '2001:db8::'))
 def test_has_subnet_info(self):
     lsa_body = extension_prefix.ExtensionPrefix(conf.VERSION_IPV4)
     self.assertFalse(
         lsa_body.has_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertFalse(lsa_body.has_subnet_info('255.255.0.0',
                                               '111.111.2.0'))
     lsa_body.add_subnet_info(10, '255.255.255.0', '222.222.1.0')
     self.assertTrue(
         lsa_body.has_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertFalse(lsa_body.has_subnet_info('255.255.0.0',
                                               '111.111.2.0'))
     lsa_body.add_subnet_info(10, '255.255.0.0', '111.111.2.0')
     self.assertTrue(
         lsa_body.has_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertTrue(lsa_body.has_subnet_info('255.255.0.0', '111.111.2.0'))
     lsa_body.delete_subnet_info('255.255.255.0', '222.222.1.0')
     self.assertFalse(
         lsa_body.has_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertTrue(lsa_body.has_subnet_info('255.255.0.0', '111.111.2.0'))
     lsa_body.delete_subnet_info('255.255.0.0', '111.111.2.0')
     self.assertFalse(
         lsa_body.has_subnet_info('255.255.255.0', '222.222.1.0'))
     self.assertFalse(lsa_body.has_subnet_info('255.255.0.0',
                                               '111.111.2.0'))
 def create_extension_prefix_lsa_body(self, version):
     self.body = extension_prefix.ExtensionPrefix(version)
     self.set_lsa_length()
     self.set_lsa_checksum()