@Test
  public void testSerializeAttribute() throws BGPParsingException {
    final LinkstateNlriParser parser = new LinkstateNlriParser(true);
    setUp(this.prefixNlri);
    final List<CLinkstateDestination> dests = Lists.newArrayList(this.dest);
    final DestinationLinkstateCase dlc =
        new DestinationLinkstateCaseBuilder()
            .setDestinationLinkstate(
                new DestinationLinkstateBuilder().setCLinkstateDestination(dests).build())
            .build();
    final AdvertizedRoutes aroutes = new AdvertizedRoutesBuilder().setDestinationType(dlc).build();
    final Attributes1 reach =
        new Attributes1Builder()
            .setMpReachNlri(new MpReachNlriBuilder().setAdvertizedRoutes(aroutes).build())
            .build();

    Attributes pa = new AttributesBuilder().addAugmentation(Attributes1.class, reach).build();

    ByteBuf result = Unpooled.buffer();
    parser.serializeAttribute(pa, result);
    assertArrayEquals(this.prefixNlri, ByteArray.getAllBytes(result));

    setUp(this.nodeNlri);
    final List<CLinkstateDestination> destsU = Lists.newArrayList(this.dest);
    final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210
            .update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type
            .DestinationLinkstateCase
        dlcU =
            new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate
                    .rev150210.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type
                    .DestinationLinkstateCaseBuilder()
                .setDestinationLinkstate(
                    new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp
                            .linkstate.rev150210.update.attributes.mp.unreach.nlri.withdrawn.routes
                            .destination.type.destination.linkstate._case
                            .DestinationLinkstateBuilder()
                        .setCLinkstateDestination(destsU)
                        .build())
                .build();
    final WithdrawnRoutes wroutes = new WithdrawnRoutesBuilder().setDestinationType(dlcU).build();
    final Attributes2 unreach =
        new Attributes2Builder()
            .setMpUnreachNlri(new MpUnreachNlriBuilder().setWithdrawnRoutes(wroutes).build())
            .build();

    pa = new AttributesBuilder().addAugmentation(Attributes2.class, unreach).build();

    result = Unpooled.buffer();
    parser.serializeAttribute(pa, result);
    assertArrayEquals(this.nodeNlri, ByteArray.getAllBytes(result));
  }
  public static List<byte[]> parseMessages(final String c) {
    final String content = clearWhiteSpaceToUpper(c);
    final int sixteen = 16;
    final int four = 4;
    // search for 16 FFs

    final List<byte[]> messages = Lists.newLinkedList();
    int idx = content.indexOf(FF_16, 0);
    while (idx > -1) {
      // next 2 bytes are length
      final int lengthIdx = idx + sixteen * 2;
      final int messageIdx = lengthIdx + four;
      final String hexLength = content.substring(lengthIdx, messageIdx);
      final byte[] byteLength = BaseEncoding.base16().decode(hexLength);
      final int length = ByteArray.bytesToInt(byteLength);
      final int messageEndIdx = idx + length * 2;

      // Assert that message is longer than minimum 19(header.length == 19)
      // If length in BGP message would be 0, loop would never end
      Preconditions.checkArgument(
          length >= MINIMAL_LENGTH,
          "Invalid message at index " + idx + ", length atribute is lower than " + MINIMAL_LENGTH);

      final String hexMessage = content.substring(idx, messageEndIdx);
      final byte[] message = BaseEncoding.base16().decode(hexMessage);
      messages.add(message);
      idx = messageEndIdx;
      idx = content.indexOf(FF_16, idx);
    }
    LOG.info("Succesfully extracted {} messages", messages.size());
    return messages;
  }
 @Override
 public Tlv parseTlv(final ByteBuf buffer) throws BmpDeserializationException {
   if (buffer == null) {
     return null;
   }
   return new PerAfiSafiLocRibTlvBuilder()
       .setAfi(this.afiRegistry.classForFamily(buffer.readUnsignedShort()))
       .setSafi(this.safiRegistry.classForFamily(buffer.readUnsignedByte()))
       .setCount(new Gauge64(new BigInteger(ByteArray.readAllBytes(buffer))))
       .build();
 }
 @Override
 public SubobjectContainer parseSubobject(final ByteBuf buffer) throws RSVPParsingException {
   Preconditions.checkArgument(
       buffer != null && buffer.isReadable(),
       "Array of bytes is mandatory. Can't be null or empty.");
   if (buffer.readableBytes() != CONTENT_LENGTH) {
     throw new RSVPParsingException(
         "Wrong length of array of bytes. Passed: "
             + buffer.readableBytes()
             + "; Expected: >"
             + CONTENT_LENGTH
             + ".");
   }
   final int pathKey = buffer.readUnsignedShort();
   final byte[] pceId = ByteArray.readBytes(buffer, PCE_ID_F_LENGTH);
   final SubobjectContainerBuilder builder = new SubobjectContainerBuilder();
   final PathKeyBuilder pBuilder = new PathKeyBuilder();
   pBuilder.setPceId(new PceId(pceId));
   pBuilder.setPathKey(new PathKey(pathKey));
   builder.setSubobjectType(new PathKeyCaseBuilder().setPathKey(pBuilder.build()).build());
   return builder.build();
 }
 @Override
 public ExtendedCommunities parseExtendedCommunity(
     final ReferenceCache refCache, final ExtendedCommunitiesBuilder comm, final ByteBuf buffer)
     throws BGPDocumentedException {
   ExtendedCommunity c = null;
   if (comm.getCommType().equals(FS_TYPE)) {
     switch (comm.getCommSubType()) {
       case TRAFFIC_RATE_SUBTYPE:
         final ShortAsNumber as = new ShortAsNumber((long) buffer.readUnsignedShort());
         final Bandwidth value = new Bandwidth(ByteArray.readBytes(buffer, TRAFFIC_RATE_SIZE));
         c =
             new TrafficRateExtendedCommunityCaseBuilder()
                 .setTrafficRateExtendedCommunity(
                     new TrafficRateExtendedCommunityBuilder()
                         .setInformativeAs(as)
                         .setLocalAdministrator(value)
                         .build())
                 .build();
         break;
       case TRAFFIC_ACTION_SUBTYPE:
         buffer.skipBytes(RESERVED);
         final BitArray flags = BitArray.valueOf(buffer, FLAGS_SIZE);
         final boolean sample = flags.get(SAMPLE_BIT);
         final boolean terminal = flags.get(TERMINAL_BIT);
         c =
             new TrafficActionExtendedCommunityCaseBuilder()
                 .setTrafficActionExtendedCommunity(
                     new TrafficActionExtendedCommunityBuilder()
                         .setSample(sample)
                         .setTerminalAction(terminal)
                         .build())
                 .build();
         break;
       case REDIRECT_SUBTYPE:
         final ShortAsNumber as1 = new ShortAsNumber((long) buffer.readUnsignedShort());
         final byte[] byteValue = ByteArray.readBytes(buffer, TRAFFIC_RATE_SIZE);
         c =
             new RedirectExtendedCommunityCaseBuilder()
                 .setRedirectExtendedCommunity(
                     new RedirectExtendedCommunityBuilder()
                         .setGlobalAdministrator(as1)
                         .setLocalAdministrator(byteValue)
                         .build())
                 .build();
         break;
       case TRAFFIC_MARKING_SUBTYPE:
         buffer.skipBytes(RESERVED);
         final Dscp dscp = new Dscp(buffer.readUnsignedByte());
         c =
             new TrafficMarkingExtendedCommunityCaseBuilder()
                 .setTrafficMarkingExtendedCommunity(
                     new TrafficMarkingExtendedCommunityBuilder()
                         .setGlobalAdministrator(dscp)
                         .build())
                 .build();
         break;
       default:
         throw new BGPDocumentedException(
             "Could not parse Flowspec Extended Community type: " + comm.getCommSubType(),
             BGPError.OPT_ATTR_ERROR);
     }
   }
   if (c == null) {
     LOG.debug("Extended community is not from Flowspec, fallback to original communities.");
     return super.parseExtendedCommunity(refCache, comm, buffer);
   }
   return comm.setExtendedCommunity(c).build();
 }
  @Test
  public void testPrefixNlri() throws BGPParsingException {
    setUp(this.prefixNlri);

    // test BA form
    assertNull(this.dest.getDistinguisher());
    assertEquals(ProtocolId.IsisLevel2, this.dest.getProtocolId());
    assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());

    final PrefixCase pCase = ((PrefixCase) this.dest.getObjectType());

    final AdvertisingNodeDescriptors local = pCase.getAdvertisingNodeDescriptors();
    assertEquals(new AsNumber(72L), local.getAsNumber());
    assertEquals(new DomainIdentifier(0x28282828L), local.getDomainId());
    assertEquals(
        new IsisNodeCaseBuilder()
            .setIsisNode(
                new IsisNodeBuilder()
                    .setIsoSystemId(
                        new IsoSystemIdentifier(
                            new byte[] {
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x42
                            }))
                    .build())
            .build(),
        local.getCRouterIdentifier());

    final PrefixDescriptors pd = pCase.getPrefixDescriptors();
    assertEquals(OspfRouteType.External1, pd.getOspfRouteType());
    assertEquals(new TopologyIdentifier(15), pd.getMultiTopologyId());
    assertEquals(
        new Ipv4Prefix("255.255.0.0/16"), pd.getIpReachabilityInformation().getIpv4Prefix());

    final ByteBuf buffer = Unpooled.buffer();
    LinkstateNlriParser.serializeNlri(this.dest, buffer);
    assertArrayEquals(this.prefixNlri, ByteArray.readAllBytes(buffer));

    // test BI form
    final DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode>
        linkstateBI = ImmutableUnkeyedListEntryNodeBuilder.create();
    linkstateBI.withNodeIdentifier(C_LINKSTATE_NID);

    final ImmutableLeafNodeBuilder<String> protocolId = new ImmutableLeafNodeBuilder<>();
    protocolId.withNodeIdentifier(LinkstateNlriParser.PROTOCOL_ID_NID);
    protocolId.withValue("isis-level2");
    linkstateBI.addChild(protocolId.build());

    final ImmutableLeafNodeBuilder<BigInteger> identifier = new ImmutableLeafNodeBuilder<>();
    identifier.withNodeIdentifier(LinkstateNlriParser.IDENTIFIER_NID);
    identifier.withValue(BigInteger.ONE);
    linkstateBI.addChild(identifier.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> objectType =
        Builders.choiceBuilder();
    objectType.withNodeIdentifier(LinkstateNlriParser.OBJECT_TYPE_NID);

    // advertising node descriptors
    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> advertisingNodeDescriptors =
        Builders.containerBuilder();
    advertisingNodeDescriptors.withNodeIdentifier(
        LinkstateNlriParser.ADVERTISING_NODE_DESCRIPTORS_NID);

    final ImmutableLeafNodeBuilder<Long> asNumber = new ImmutableLeafNodeBuilder<>();
    asNumber.withNodeIdentifier(NodeNlriParser.AS_NUMBER_NID);
    asNumber.withValue(72L);
    advertisingNodeDescriptors.addChild(asNumber.build());

    final ImmutableLeafNodeBuilder<Long> domainID = new ImmutableLeafNodeBuilder<>();
    domainID.withNodeIdentifier(NodeNlriParser.DOMAIN_NID);
    domainID.withValue(673720360L);
    advertisingNodeDescriptors.addChild(domainID.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> crouterId = Builders.choiceBuilder();
    crouterId.withNodeIdentifier(C_ROUTER_ID_NID);

    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisNode =
        Builders.containerBuilder();
    isisNode.withNodeIdentifier(NodeNlriParser.ISIS_NODE_NID);

    final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
    isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
    isoSystemID.withValue(new byte[] {0, 0, 0, 0, 0, (byte) 0x42});

    isisNode.addChild(isoSystemID.build());
    crouterId.addChild(isisNode.build());
    advertisingNodeDescriptors.addChild(crouterId.build());

    // prefix descriptors
    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> prefixDescriptors =
        Builders.containerBuilder();
    prefixDescriptors.withNodeIdentifier(LinkstateNlriParser.PREFIX_DESCRIPTORS_NID);
    prefixDescriptors.addChild(asNumber.build());
    prefixDescriptors.addChild(domainID.build());

    final ImmutableLeafNodeBuilder<Integer> multiTopologyId = new ImmutableLeafNodeBuilder<>();
    multiTopologyId.withNodeIdentifier(TlvUtil.MULTI_TOPOLOGY_NID);
    multiTopologyId.withValue(15);

    prefixDescriptors.addChild(multiTopologyId.build());

    final ImmutableLeafNodeBuilder<String> ipReachabilityInformation =
        new ImmutableLeafNodeBuilder<>();
    ipReachabilityInformation.withNodeIdentifier(PrefixNlriParser.IP_REACH_NID);
    ipReachabilityInformation.withValue("255.255.0.0/16");

    prefixDescriptors.addChild(ipReachabilityInformation.build());

    final ImmutableLeafNodeBuilder<String> ospfRouteType = new ImmutableLeafNodeBuilder<>();
    ospfRouteType.withNodeIdentifier(PrefixNlriParser.OSPF_ROUTE_NID);
    ospfRouteType.withValue("external1");

    prefixDescriptors.addChild(ospfRouteType.build());

    objectType.addChild(advertisingNodeDescriptors.build());
    objectType.addChild(prefixDescriptors.build());

    linkstateBI.addChild(objectType.build());
    assertEquals(this.dest, LinkstateNlriParser.extractLinkstateDestination(linkstateBI.build()));
  }
  @Test
  public void testLinkNlri() throws BGPParsingException {
    setUp(this.linkNlri);

    // test BA form
    assertNull(this.dest.getDistinguisher());
    assertEquals(ProtocolId.IsisLevel2, this.dest.getProtocolId());
    assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());

    final LinkCase lCase = ((LinkCase) this.dest.getObjectType());

    final LocalNodeDescriptors local = lCase.getLocalNodeDescriptors();
    assertEquals(new AsNumber(72L), local.getAsNumber());
    assertEquals(new DomainIdentifier(0x28282828L), local.getDomainId());
    assertEquals(
        new IsisNodeCaseBuilder()
            .setIsisNode(
                new IsisNodeBuilder()
                    .setIsoSystemId(
                        new IsoSystemIdentifier(
                            new byte[] {
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x00,
                              (byte) 0x42
                            }))
                    .build())
            .build(),
        local.getCRouterIdentifier());
    assertEquals("1.1.1.1", local.getBgpRouterId().getValue());
    assertEquals(new AsNumber(258L), local.getMemberAsn());

    final RemoteNodeDescriptors remote = lCase.getRemoteNodeDescriptors();
    assertEquals(new AsNumber(72L), remote.getAsNumber());
    assertEquals(new DomainIdentifier(0x28282828L), remote.getDomainId());
    assertEquals(
        new OspfNodeCaseBuilder()
            .setOspfNode(new OspfNodeBuilder().setOspfRouterId(0x00000040L).build())
            .build(),
        remote.getCRouterIdentifier());
    assertEquals(new AsNumber(259L), remote.getMemberAsn());
    assertEquals("1.1.1.2", remote.getBgpRouterId().getValue());

    final LinkDescriptors ld = lCase.getLinkDescriptors();
    assertEquals("197.20.160.42", ld.getIpv4InterfaceAddress().getValue());
    assertEquals("197.20.160.40", ld.getIpv4NeighborAddress().getValue());

    final ByteBuf buffer = Unpooled.buffer();
    LinkstateNlriParser.serializeNlri(this.dest, buffer);
    assertArrayEquals(this.linkNlri, ByteArray.readAllBytes(buffer));

    // test BI form
    final DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode>
        linkstateBI = ImmutableUnkeyedListEntryNodeBuilder.create();
    linkstateBI.withNodeIdentifier(C_LINKSTATE_NID);

    final ImmutableLeafNodeBuilder<String> protocolId = new ImmutableLeafNodeBuilder<>();
    protocolId.withNodeIdentifier(LinkstateNlriParser.PROTOCOL_ID_NID);
    protocolId.withValue("isis-level2");
    linkstateBI.addChild(protocolId.build());

    final ImmutableLeafNodeBuilder<BigInteger> identifier = new ImmutableLeafNodeBuilder<>();
    identifier.withNodeIdentifier(LinkstateNlriParser.IDENTIFIER_NID);
    identifier.withValue(BigInteger.ONE);
    linkstateBI.addChild(identifier.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> objectType =
        Builders.choiceBuilder();
    objectType.withNodeIdentifier(LinkstateNlriParser.OBJECT_TYPE_NID);

    // local node descriptors
    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> localNodeDescriptors =
        Builders.containerBuilder();
    localNodeDescriptors.withNodeIdentifier(LinkstateNlriParser.LOCAL_NODE_DESCRIPTORS_NID);

    final ImmutableLeafNodeBuilder<Long> asNumber = new ImmutableLeafNodeBuilder<>();
    asNumber.withNodeIdentifier(NodeNlriParser.AS_NUMBER_NID);
    asNumber.withValue(72L);
    localNodeDescriptors.addChild(asNumber.build());

    final ImmutableLeafNodeBuilder<Long> domainID = new ImmutableLeafNodeBuilder<>();
    domainID.withNodeIdentifier(NodeNlriParser.DOMAIN_NID);
    domainID.withValue(0x28282828L);
    localNodeDescriptors.addChild(domainID.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> crouterId = Builders.choiceBuilder();
    crouterId.withNodeIdentifier(C_ROUTER_ID_NID);

    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisNode =
        Builders.containerBuilder();
    isisNode.withNodeIdentifier(NodeNlriParser.ISIS_NODE_NID);

    final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
    isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
    isoSystemID.withValue(new byte[] {0, 0, 0, 0, 0, (byte) 0x42});

    isisNode.addChild(isoSystemID.build());
    crouterId.addChild(isisNode.build());
    localNodeDescriptors.addChild(crouterId.build());

    final ImmutableLeafNodeBuilder<String> bgpRouterId = new ImmutableLeafNodeBuilder<>();
    bgpRouterId.withNodeIdentifier(NodeNlriParser.BGP_ROUTER_NID);
    bgpRouterId.withValue("1.1.1.1");

    final ImmutableLeafNodeBuilder<Long> memberAsn = new ImmutableLeafNodeBuilder<>();
    memberAsn.withNodeIdentifier(NodeNlriParser.MEMBER_ASN_NID);
    memberAsn.withValue(258L);

    localNodeDescriptors.addChild(bgpRouterId.build());
    localNodeDescriptors.addChild(memberAsn.build());

    // remote descriptors
    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> remoteNodeDescriptors =
        Builders.containerBuilder();
    remoteNodeDescriptors.withNodeIdentifier(LinkstateNlriParser.REMOTE_NODE_DESCRIPTORS_NID);
    remoteNodeDescriptors.addChild(asNumber.build());
    remoteNodeDescriptors.addChild(domainID.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> crouterId2 =
        Builders.choiceBuilder();
    crouterId2.withNodeIdentifier(C_ROUTER_ID_NID);

    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> ospfNode =
        Builders.containerBuilder();
    ospfNode.withNodeIdentifier(NodeNlriParser.OSPF_NODE_NID);

    final ImmutableLeafNodeBuilder<Long> ospfRouterId = new ImmutableLeafNodeBuilder<>();
    ospfRouterId.withNodeIdentifier(NodeNlriParser.OSPF_ROUTER_NID);
    ospfRouterId.withValue(0x00000040L);
    ospfNode.addChild(ospfRouterId.build());
    crouterId2.addChild(ospfNode.build());
    remoteNodeDescriptors.addChild(crouterId2.build());
    final ImmutableLeafNodeBuilder<String> bgpRouterIdRemote = new ImmutableLeafNodeBuilder<>();
    bgpRouterIdRemote.withNodeIdentifier(NodeNlriParser.BGP_ROUTER_NID);
    bgpRouterIdRemote.withValue("1.1.1.2");
    remoteNodeDescriptors.addChild(bgpRouterIdRemote.build());

    final ImmutableLeafNodeBuilder<Long> memberAsnRemote = new ImmutableLeafNodeBuilder<>();
    memberAsnRemote.withNodeIdentifier(NodeNlriParser.MEMBER_ASN_NID);
    memberAsnRemote.withValue(259L);
    remoteNodeDescriptors.addChild(memberAsnRemote.build());

    // link descritpors
    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> linkDescriptors =
        Builders.containerBuilder();
    linkDescriptors.withNodeIdentifier(LinkstateNlriParser.LINK_DESCRIPTORS_NID);

    final ImmutableLeafNodeBuilder<Long> linkLocalIdentifier = new ImmutableLeafNodeBuilder<>();
    linkLocalIdentifier.withNodeIdentifier(LinkNlriParser.LINK_LOCAL_NID);
    linkLocalIdentifier.withValue(16909060L);

    final ImmutableLeafNodeBuilder<Long> linkRemoteIdentifier = new ImmutableLeafNodeBuilder<>();
    linkRemoteIdentifier.withNodeIdentifier(LinkNlriParser.LINK_REMOTE_NID);
    linkRemoteIdentifier.withValue(168496141L);

    final ImmutableLeafNodeBuilder<String> ipv4InterfaceAddress = new ImmutableLeafNodeBuilder<>();
    ipv4InterfaceAddress.withNodeIdentifier(LinkNlriParser.IPV4_IFACE_NID);
    ipv4InterfaceAddress.withValue("197.20.160.42");

    final ImmutableLeafNodeBuilder<String> ipv4NeighborAddress = new ImmutableLeafNodeBuilder<>();
    ipv4NeighborAddress.withNodeIdentifier(LinkNlriParser.IPV4_NEIGHBOR_NID);
    ipv4NeighborAddress.withValue("197.20.160.40");

    final ImmutableLeafNodeBuilder<Integer> multiTopologyId = new ImmutableLeafNodeBuilder<>();
    multiTopologyId.withNodeIdentifier(TlvUtil.MULTI_TOPOLOGY_NID);
    multiTopologyId.withValue(3);

    linkDescriptors.addChild(linkLocalIdentifier.build());
    linkDescriptors.addChild(linkRemoteIdentifier.build());
    linkDescriptors.addChild(ipv4InterfaceAddress.build());
    linkDescriptors.addChild(ipv4NeighborAddress.build());
    linkDescriptors.addChild(multiTopologyId.build());

    objectType.addChild(localNodeDescriptors.build());
    objectType.addChild(remoteNodeDescriptors.build());
    objectType.addChild(linkDescriptors.build());

    linkstateBI.addChild(objectType.build());
    assertEquals(this.dest, LinkstateNlriParser.extractLinkstateDestination(linkstateBI.build()));
  }
  @Test
  public void testNodeNlri() throws BGPParsingException {
    setUp(this.nodeNlri);

    // test BA form
    assertNull(this.dest.getDistinguisher());
    assertEquals(ProtocolId.IsisLevel2, this.dest.getProtocolId());
    assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());
    final NodeCase nCase = ((NodeCase) this.dest.getObjectType());

    final NodeDescriptors nodeD = nCase.getNodeDescriptors();
    assertEquals(new AsNumber(72L), nodeD.getAsNumber());
    assertEquals(new DomainIdentifier(0x28282828L), nodeD.getDomainId());
    assertEquals(
        new IsisPseudonodeCaseBuilder()
            .setIsisPseudonode(
                new IsisPseudonodeBuilder()
                    .setPsn((short) 5)
                    .setIsIsRouterIdentifier(
                        new IsIsRouterIdentifierBuilder()
                            .setIsoSystemId(
                                new IsoSystemIdentifier(new byte[] {0, 0, 0, 0, 0, (byte) 0x39}))
                            .build())
                    .build())
            .build(),
        nodeD.getCRouterIdentifier());

    final ByteBuf buffer = Unpooled.buffer();
    LinkstateNlriParser.serializeNlri(this.dest, buffer);
    assertArrayEquals(this.nodeNlri, ByteArray.readAllBytes(buffer));

    // test BI form
    final DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode>
        linkstateBI = ImmutableUnkeyedListEntryNodeBuilder.create();
    linkstateBI.withNodeIdentifier(C_LINKSTATE_NID);

    final ImmutableLeafNodeBuilder<String> protocolId = new ImmutableLeafNodeBuilder<>();
    protocolId.withNodeIdentifier(LinkstateNlriParser.PROTOCOL_ID_NID);
    protocolId.withValue("isis-level2");
    linkstateBI.addChild(protocolId.build());

    final ImmutableLeafNodeBuilder<BigInteger> identifier = new ImmutableLeafNodeBuilder<>();
    identifier.withNodeIdentifier(LinkstateNlriParser.IDENTIFIER_NID);
    identifier.withValue(BigInteger.ONE);
    linkstateBI.addChild(identifier.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> objectType =
        Builders.choiceBuilder();
    objectType.withNodeIdentifier(LinkstateNlriParser.OBJECT_TYPE_NID);

    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> nodeDescriptors =
        Builders.containerBuilder();
    nodeDescriptors.withNodeIdentifier(LinkstateNlriParser.NODE_DESCRIPTORS_NID);

    final ImmutableLeafNodeBuilder<Long> asNumber = new ImmutableLeafNodeBuilder<>();
    asNumber.withNodeIdentifier(NodeNlriParser.AS_NUMBER_NID);
    asNumber.withValue(72L);
    nodeDescriptors.addChild(asNumber.build());

    final ImmutableLeafNodeBuilder<Long> areaID = new ImmutableLeafNodeBuilder<>();
    areaID.withNodeIdentifier(NodeNlriParser.AREA_NID);
    areaID.withValue(2697513L);
    nodeDescriptors.addChild(areaID.build());

    final ImmutableLeafNodeBuilder<Long> domainID = new ImmutableLeafNodeBuilder<>();
    domainID.withNodeIdentifier(NodeNlriParser.DOMAIN_NID);
    domainID.withValue(0x28282828L);
    nodeDescriptors.addChild(domainID.build());

    final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> crouterId = Builders.choiceBuilder();
    crouterId.withNodeIdentifier(C_ROUTER_ID_NID);

    final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisNode =
        Builders.containerBuilder();
    isisNode.withNodeIdentifier(NodeNlriParser.ISIS_PSEUDONODE_NID);

    final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
    isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
    isoSystemID.withValue(new byte[] {0, 0, 0, 0, 0, (byte) 0x39});
    isisNode.addChild(isoSystemID.build());
    isisNode.addChild(
        Builders.leafBuilder()
            .withNodeIdentifier(NodeNlriParser.PSN_NID)
            .withValue((short) 5)
            .build());
    crouterId.addChild(isisNode.build());

    nodeDescriptors.addChild(crouterId.build());
    objectType.addChild(nodeDescriptors.build());
    linkstateBI.addChild(objectType.build());

    assertEquals(this.dest, LinkstateNlriParser.extractLinkstateDestination(linkstateBI.build()));
  }