@Test
  public void testOneMultiProtoclConfiguration() throws Exception {
    Capabilities caps = parser.parseConfig(config.configurationAt("Capabilities(4)"));
    Iterator<Capability> capIt = caps.getRequiredCapabilities().iterator();

    Assert.assertTrue(capIt.hasNext());
    MultiProtocolCapability cap = (MultiProtocolCapability) capIt.next();
    Assert.assertEquals(AddressFamily.IPv4, cap.getAfi());
    Assert.assertEquals(SubsequentAddressFamily.NLRI_UNICAST_FORWARDING, cap.getSafi());

    Assert.assertFalse(capIt.hasNext());
  }
  @Test
  public void testDecodeUnsupportedCapabilityNotificationPacket() {
    CapabilityListUnsupportedCapabilityNotificationPacket packet =
        safeDowncast(
            decoder.decodePacket(
                buildProtocolPacket(
                    new byte[] {
                      (byte) 0x03, // type code NOTIFICATION
                      (byte) 0x02, // error code: BGP Open
                      (byte) 0x07, // suberror code: Unsupported capability
                      (byte) 0x41, // Capability code 65: 4-octet AS numbers
                      (byte) 0x04, // Capability length: 4 octets
                      (byte) 0x00,
                      (byte) 0x00,
                      (byte) 0xfc,
                      (byte) 0x00, // AS number 64512
                      0x02, // Capability code 2: Route refresh
                      0x00, // Capability length: 0 octets
                      0x01, // Capability code 1: Multi-Protocol
                      0x04, // Capability length: 4 octets
                      0x00,
                      0x01, // Address Family 1: IPv4
                      0x00, // reserved
                      0x01, // Subsequent address family 1: Unicast forwarding
                    })),
            CapabilityListUnsupportedCapabilityNotificationPacket.class);

    Iterator<Capability> capIt = packet.getCapabilities().iterator();

    Assert.assertTrue(capIt.hasNext());
    AutonomousSystem4Capability as4cap = (AutonomousSystem4Capability) capIt.next();
    Assert.assertEquals(64512, as4cap.getAutonomousSystem());

    Assert.assertTrue(capIt.hasNext());
    Assert.assertEquals(RouteRefreshCapability.class, capIt.next().getClass());

    Assert.assertTrue(capIt.hasNext());
    MultiProtocolCapability mpCap = (MultiProtocolCapability) capIt.next();
    Assert.assertEquals(AddressFamily.IPv4, mpCap.getAfi());
    Assert.assertEquals(SubsequentAddressFamily.NLRI_UNICAST_FORWARDING, mpCap.getSafi());

    Assert.assertFalse(capIt.hasNext());
  }
  @Test
  public void testRequiredOneAS4OptionalTwoMultiProtoclConfiguration() throws Exception {
    Capabilities caps = parser.parseConfig(config.configurationAt("Capabilities(9)"));
    Iterator<Capability> capIt = caps.getRequiredCapabilities().iterator();

    Assert.assertTrue(capIt.hasNext());
    AutonomousSystem4Capability as4cap = (AutonomousSystem4Capability) capIt.next();
    Assert.assertEquals(256, as4cap.getAutonomousSystem());
    Assert.assertFalse(capIt.hasNext());

    capIt = caps.getOptionalCapabilities().iterator();
    Assert.assertTrue(capIt.hasNext());
    MultiProtocolCapability cap = (MultiProtocolCapability) capIt.next();
    Assert.assertEquals(AddressFamily.IPv4, cap.getAfi());
    Assert.assertEquals(SubsequentAddressFamily.NLRI_UNICAST_FORWARDING, cap.getSafi());

    Assert.assertTrue(capIt.hasNext());
    cap = (MultiProtocolCapability) capIt.next();
    Assert.assertEquals(AddressFamily.IPv6, cap.getAfi());
    Assert.assertEquals(SubsequentAddressFamily.NLRI_UNICAST_FORWARDING, cap.getSafi());

    Assert.assertFalse(capIt.hasNext());
  }