BUG-49 : fixed tests for bgp-parser. 32/2032/2
authorDana Kutenicsova <dkutenic@cisco.com>
Sun, 20 Oct 2013 20:17:57 +0000 (22:17 +0200)
committerDana Kutenicsova <dkutenic@cisco.com>
Tue, 22 Oct 2013 18:13:07 +0000 (20:13 +0200)
Change-Id: Ic89749be1488672de4546bf2d86ece139fc6e5a1
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/LinkstateNlriParser.java
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/BGPUpdateMessageParser.java
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/CommunitiesParser.java
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/ExtendedCommunitiesAttributeParser.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/BGPParserTest.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java
bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java
concepts/src/main/java/org/opendaylight/protocol/concepts/Ipv4Util.java
concepts/src/main/java/org/opendaylight/protocol/concepts/Ipv6Util.java
concepts/src/test/java/org/opendaylight/protocol/concepts/IPAddressesAndPrefixesTest.java

index d92b0605f57ccefa1e5da928c0948ba1f7568659..688fbd90de006700fbbfeb89a023ea958fc4dd6f 100644 (file)
@@ -315,8 +315,8 @@ public final class LinkstateNlriParser implements NlriParser {
                        }
                        byteOffset += locallength;
                        builder.setLocalNodeDescriptors((LocalNodeDescriptors) localDescriptor);
-                       final int restLength = length - (this.isVpn ? ROUTE_DISTINGUISHER_LENGTH : 0) - PROTOCOL_ID_LENGTH - IDENTIFIER_LENGTH
-                                       - TYPE_LENGTH - LENGTH_SIZE - locallength;
+                       final int restLength = length - (isVpn ? ROUTE_DISTINGUISHER_LENGTH : 0) - PROTOCOL_ID_LENGTH - IDENTIFIER_LENGTH - TYPE_LENGTH
+                                       - LENGTH_SIZE - locallength;
                        logger.debug("Restlength {}", restLength);
                        switch (type) {
                        case Link:
@@ -336,7 +336,9 @@ public final class LinkstateNlriParser implements NlriParser {
        }
 
        @Override
-       public void parseNlri(final byte[] nlri, final MpUnreachNlriBuilder builder) throws BGPParsingException {
+       public final void parseNlri(final byte[] nlri, final MpUnreachNlriBuilder builder) throws BGPParsingException {
+               if (nlri.length == 0)
+                       return;
                final CLinkstateDestination dst = parseNlri(nlri);
 
                // FIXME: This cast is because of a bug in yangtools (augmented choice has no relationship with base choice)
@@ -355,4 +357,4 @@ public final class LinkstateNlriParser implements NlriParser {
                builder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(s).build());
                NlriUtil.parseNextHop(nextHop, builder);
        }
-}
\ No newline at end of file
+}
index 7f107a6ae3ebbcb9162f8cf533cc2577252259aa..2f2fba196de6a82312259a893a15d50ae484c024 100644 (file)
@@ -92,8 +92,7 @@ public class BGPUpdateMessageParser implements MessageParser {
 
                if (totalPathAttrLength > 0) {
                        try {
-                               final PathAttributes pathAttributes = reg.parseAttributes(ByteArray.subByte(body, byteOffset,
-                                               totalPathAttrLength));
+                               final PathAttributes pathAttributes = reg.parseAttributes(ByteArray.subByte(body, byteOffset, totalPathAttrLength));
                                byteOffset += totalPathAttrLength;
                                eventBuilder.setPathAttributes(pathAttributes);
                        } catch (final BGPParsingException e) {
@@ -103,8 +102,9 @@ public class BGPUpdateMessageParser implements MessageParser {
                }
 
                final List<Ipv4Prefix> nlri = Ipv4Util.prefixListForBytes(ByteArray.subByte(body, byteOffset, body.length - byteOffset));
-               eventBuilder.setNlri(new NlriBuilder().setNlri(nlri).build());
-
+               if (nlri != null && !nlri.isEmpty()) {
+                       eventBuilder.setNlri(new NlriBuilder().setNlri(nlri).build());
+               }
                logger.trace("Update message was parsed.");
                return eventBuilder.build();
        }
index 5be864ec09395d567df73440124a3c3c810214e5..5a73c6b34737ce97f53cb28e443099b184475f1f 100644 (file)
@@ -80,6 +80,7 @@ public final class CommunitiesParser {
         * @throws BGPDocumentedException if the type is not recognized
         */
        @VisibleForTesting
+       // FIXME: switch to return ExtendedCommunities with setType and subtype
        public static ExtendedCommunity parseExtendedCommunity(final byte[] bytes) throws BGPDocumentedException {
                final int type = UnsignedBytes.toInt(bytes[0]);
                final int subType = UnsignedBytes.toInt(bytes[1]);
index c094ed021ec8ea989d8510d2bd369b9c4156009f..9b29303abe4a0daf3e231c766ab13487c74735db 100644 (file)
@@ -13,7 +13,9 @@ import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
 import org.opendaylight.protocol.bgp.parser.spi.AttributeParser;
 import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.ExtendedCommunities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.ExtendedCommunitiesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.ExtendedCommunity;
 
 import com.google.common.collect.Lists;
 
@@ -25,9 +27,10 @@ public final class ExtendedCommunitiesAttributeParser implements AttributeParser
                final List<ExtendedCommunities> set = Lists.newArrayList();
                int i = 0;
                while (i < bytes.length) {
-                       set.add((ExtendedCommunities) CommunitiesParser.parseExtendedCommunity(ByteArray.subByte(bytes, i,
-                                       CommunitiesParser.EXTENDED_COMMUNITY_LENGTH)));
+                       ExtendedCommunity comm = CommunitiesParser.parseExtendedCommunity(ByteArray.subByte(bytes, i,
+                                       CommunitiesParser.EXTENDED_COMMUNITY_LENGTH));
                        i += CommunitiesParser.EXTENDED_COMMUNITY_LENGTH;
+                       set.add(new ExtendedCommunitiesBuilder().setExtendedCommunity(comm).build());
                }
 
                builder.setExtendedCommunities(set);
index c4a237fcae6e47d3e84b12b3de632d8f1fd02151..3337a244b06974d67d45ee88a6e38e5599cc3b87 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.bgp.parser.impl;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -15,7 +16,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -33,6 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.LinkstateAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.LinkstateSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.Open;
@@ -40,16 +41,34 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.UpdateBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.BgpParameters;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.bgp.parameters.CParameters;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.Aggregator;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.AggregatorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.AsPathBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.AtomicAggregateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.Communities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.ExtendedCommunities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.ExtendedCommunitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.LocalPrefBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.MultiExitDiscBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.OriginBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.as.path.Segments;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.as.path.SegmentsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.Nlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.NlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.WithdrawnRoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.BgpTableType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.PathAttributes1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.PathAttributes1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.PathAttributes2;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.destination.destination.type.DestinationIpv6Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.open.bgp.parameters.c.parameters.CMultiprotocol;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.MpReachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.mp.reach.nlri.AdvertizedRoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AsPathSegment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpAggregator;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Community;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpOrigin;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
@@ -58,7 +77,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.CASetBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.c.a.list.AsSequence;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.c.a.list.AsSequenceBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.ExtendedCommunity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CInet4SpecificExtendedCommunityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.c.inet4.specific.extended.community.Inet4SpecificExtendedCommunityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.CIpv4NextHop;
@@ -155,8 +173,6 @@ public class BGPParserTest {
         * 18 ac 11 00 <- IPv4 Prefix (172.17.0.0 / 24)
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testGetUpdateMessage1() throws Exception {
 
                final byte[] body = ByteArray.cutBytes(inputBytes.get(0), MessageUtil.COMMON_HEADER_LENGTH);
@@ -171,71 +187,60 @@ public class BGPParserTest {
                // attributes
 
                final List<AsSequence> asnums = Lists.newArrayList(new AsSequenceBuilder().setAs(new AsNumber(65002L)).build());
-               final List<AsPathSegment> asPath = Lists.newArrayList();
+               final List<Segments> asPath = Lists.newArrayList();
                asPath.add(new SegmentsBuilder().setCSegment(new CAListBuilder().setAsSequence(asnums).build()).build());
 
                final CIpv4NextHop nextHop = new CIpv4NextHopBuilder().setIpv4NextHop(
                                new Ipv4NextHopBuilder().setGlobal(new Ipv4Address("10.0.0.2")).build()).build();
 
-               final Set<Community> comms = new HashSet<>();
-               comms.add(CommunityUtil.NO_EXPORT);
-               comms.add(CommunityUtil.NO_ADVERTISE);
-               comms.add(CommunityUtil.NO_EXPORT_SUBCONFED);
-               comms.add(CommunityUtil.create(0xFFFF, 0xFF10));
+               final List<Communities> comms = Lists.newArrayList();
+               comms.add((Communities) CommunityUtil.NO_EXPORT);
+               comms.add((Communities) CommunityUtil.NO_ADVERTISE);
+               comms.add((Communities) CommunityUtil.NO_EXPORT_SUBCONFED);
+               comms.add((Communities) CommunityUtil.create(0xFFFF, 0xFF10));
+
+               final UpdateBuilder builder = new UpdateBuilder();
+
+               // check nlri
+
+               List<Ipv4Prefix> prefs = Lists.newArrayList();
+               prefs.add(new Ipv4Prefix("172.17.2.0/24"));
+               prefs.add(new Ipv4Prefix("172.17.1.0/24"));
+               prefs.add(new Ipv4Prefix("172.17.0.0/24"));
+
+               Nlri nlri = new NlriBuilder().setNlri(prefs).build();
+
+               assertEquals(nlri, message.getNlri());
+
+               builder.setNlri(nlri);
 
                // check path attributes
 
-               // final PathAttribute originAttr = new PathAttribute(TypeCode.ORIGIN, false,
-               // true, false, false, BGPOrigin.IGP);
-               // assertEquals(originAttr, attrs.get(0));
-               //
-               // final PathAttribute asPathAttr = new PathAttribute(TypeCode.AS_PATH, false,
-               // true, false, false, asPath);
-               // assertEquals(asPathAttr, attrs.get(1));
-               //
-               // final PathAttribute nextHopAttr = new PathAttribute(TypeCode.NEXT_HOP, false,
-               // true, false, false, nextHop);
-               // assertEquals(nextHopAttr, attrs.get(2));
-               //
-               // final PathAttribute multiExitDisc = new PathAttribute(
-               // TypeCode.MULTI_EXIT_DISC, true, false, false, false, 0);
-               // assertEquals(multiExitDisc, attrs.get(3));
-               //
-               // final PathAttribute atomic = new PathAttribute(TypeCode.ATOMIC_AGGREGATE, false,
-               // true, true, false, null);
-               // assertEquals(atomic, attrs.get(4));
-               //
-               // final PathAttribute comm = new PathAttribute(TypeCode.COMMUNITIES, false,
-               // true, true, false, comms);
-               // assertEquals(comm, attrs.get(5));
+               PathAttributes attrs = message.getPathAttributes();
 
-               // check nlri
+               PathAttributesBuilder paBuilder = new PathAttributesBuilder();
 
-               // final Set<IPv4Prefix> nlri = Sets.newHashSet(pref1, pref2, pref3);
-               // assertEquals(nlri, ret.getBgpUpdateMessageBuilder().getNlri());
+               paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build());
+               assertEquals(paBuilder.getOrigin(), attrs.getOrigin());
 
-               // final BaseBGPObjectState state = new BaseBGPObjectState(BgpOrigin.Igp, null);
-               // final NetworkRouteState routeState = new NetworkRouteState(new NetworkObjectState(asPath, comms,
-               // Collections.<ExtendedCommunity> emptySet()), nextHop);
+               paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build());
+               assertEquals(paBuilder.getAsPath(), attrs.getAsPath());
 
-               // check API message
+               paBuilder.setCNextHop(nextHop);
+               assertEquals(paBuilder.getCNextHop(), attrs.getCNextHop());
 
-               // final Set<BGPObject> addedObjects = Sets.newHashSet();
-               //
-               // final BGPRoute route1 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("172.17.2.0/24"), state,
-               // routeState);
-               //
-               // addedObjects.add(route1);
-               //
-               // final BGPRoute route2 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("172.17.1.0/24"), state,
-               // routeState);
-               //
-               // addedObjects.add(route2);
-               //
-               // final BGPRoute route3 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("172.17.0.0/24"), state,
-               // routeState);
-               //
-               // addedObjects.add(route3);
+               paBuilder.setMultiExitDisc(new MultiExitDiscBuilder().setMed((long) 0).build());
+               assertEquals(paBuilder.getMultiExitDisc(), attrs.getMultiExitDisc());
+
+               paBuilder.setAtomicAggregate(new AtomicAggregateBuilder().build());
+               assertEquals(paBuilder.getAtomicAggregate(), attrs.getAtomicAggregate());
+
+               paBuilder.setCommunities(comms);
+               assertEquals(paBuilder.getCommunities(), attrs.getCommunities());
+
+               builder.setPathAttributes(paBuilder.build());
+
+               assertEquals(builder.build(), message);
        }
 
        /*
@@ -286,73 +291,74 @@ public class BGPParserTest {
         * 
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testGetUpdateMessage2() throws Exception {
                final byte[] body = ByteArray.cutBytes(inputBytes.get(1), MessageUtil.COMMON_HEADER_LENGTH);
                final int messageLength = ByteArray.bytesToInt(ByteArray.subByte(inputBytes.get(1), MessageUtil.MARKER_LENGTH,
                                MessageUtil.LENGTH_FIELD_LENGTH));
                final Update message = BGPParserTest.updateParser.parseMessageBody(body, messageLength);
-               // check fields
 
+               // check fields
                assertNull(message.getWithdrawnRoutes());
 
+               final UpdateBuilder builder = new UpdateBuilder();
+
+               // check NLRI
+
+               List<Ipv6Prefix> prefs = Lists.newArrayList();
+               prefs.add(new Ipv6Prefix("2001:db8:1:2::/64"));
+               prefs.add(new Ipv6Prefix("2001:db8:1:1::/64"));
+               prefs.add(new Ipv6Prefix("2001:db8:1::/64"));
+
+               assertNull(message.getNlri());
+
                // attributes
+
                final List<AsSequence> asnums = Lists.newArrayList(new AsSequenceBuilder().setAs(new AsNumber(65001L)).build());
-               final List<AsPathSegment> asPath = Lists.newArrayList();
+               final List<Segments> asPath = Lists.newArrayList();
                asPath.add(new SegmentsBuilder().setCSegment(new CAListBuilder().setAsSequence(asnums).build()).build());
 
                final CIpv6NextHop nextHop = new CIpv6NextHopBuilder().setIpv6NextHop(
                                new Ipv6NextHopBuilder().setGlobal(new Ipv6Address("2001:db8::1")).setLinkLocal(new Ipv6Address("fe80::c001:bff:fe7e:0")).build()).build();
 
-               // final List<ClusterIdentifier> clusters = Lists.newArrayList(
-               // new ClusterIdentifier(new byte[] { 1, 2, 3, 4}),
-               // new ClusterIdentifier(new byte[] { 5, 6, 7, 8}));
+               final List<ClusterIdentifier> clusters = Lists.newArrayList(new ClusterIdentifier(new byte[] { 1, 2, 3, 4 }),
+                               new ClusterIdentifier(new byte[] { 5, 6, 7, 8 }));
 
                // check path attributes
 
-               // final PathAttribute originAttr = new PathAttribute(TypeCode.ORIGIN, false,
-               // true, false, false, BGPOrigin.IGP);
-               // assertEquals(originAttr, attrs.get(0));
-               //
-               // final PathAttribute asPathAttr = new PathAttribute(TypeCode.AS_PATH, false,
-               // true, false, false, asPath);
-               // assertEquals(asPathAttr, attrs.get(1));
-               //
-               // final PathAttribute multiExitDisc = new PathAttribute(
-               // TypeCode.MULTI_EXIT_DISC, true, false, false, false, 0);
-               // assertEquals(multiExitDisc, attrs.get(2));
-               //
-               // final PathAttribute originatorAttr = new PathAttribute(
-               // TypeCode.ORIGINATOR_ID, true, false, false, false, IPv4.FAMILY.addressForString("127.0.0.1"));
-               // assertEquals(originatorAttr, attrs.get(3));
-               //
-               // final PathAttribute clusterAttr = new PathAttribute(
-               // TypeCode.CLUSTER_LIST, true, false, false, false, clusters);
-               // assertEquals(clusterAttr, attrs.get(4));
+               PathAttributes attrs = message.getPathAttributes();
 
-               // final BaseBGPObjectState state = new BaseBGPObjectState(BgpOrigin.Igp, null);
-               // final NetworkRouteState routeState = new NetworkRouteState(new NetworkObjectState(asPath,
-               // Collections.<Community> emptySet(), Collections.<ExtendedCommunity> emptySet()), nextHop);
+               PathAttributesBuilder paBuilder = new PathAttributesBuilder();
+
+               paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build());
+               assertEquals(paBuilder.getOrigin(), attrs.getOrigin());
+
+               paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build());
+               assertEquals(paBuilder.getAsPath(), attrs.getAsPath());
+
+               paBuilder.setMultiExitDisc(new MultiExitDiscBuilder().setMed((long) 0).build());
+               assertEquals(paBuilder.getMultiExitDisc(), attrs.getMultiExitDisc());
+
+               paBuilder.setOriginatorId(new byte[] { 127, 0, 0, 1 });
+               assertArrayEquals(paBuilder.getOriginatorId(), attrs.getOriginatorId());
+
+               paBuilder.setClusterId(clusters);
+               assertEquals(paBuilder.getClusterId(), attrs.getClusterId());
+
+               MpReachNlriBuilder mpBuilder = new MpReachNlriBuilder();
+               mpBuilder.setAfi(Ipv6AddressFamily.class);
+               mpBuilder.setSafi(UnicastSubsequentAddressFamily.class);
+               mpBuilder.setCNextHop(nextHop);
+               mpBuilder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(
+                               new DestinationIpv6Builder().setIpv6Prefixes(prefs).build()).build());
+
+               paBuilder.addAugmentation(PathAttributes1.class, new PathAttributes1Builder().setMpReachNlri(mpBuilder.build()).build());
+               assertEquals(paBuilder.getAugmentation(PathAttributes1.class).getMpReachNlri(),
+                               attrs.getAugmentation(PathAttributes1.class).getMpReachNlri());
 
                // check API message
 
-               // final Set<BGPObject> addedObjects = Sets.newHashSet();
-               //
-               // final BGPRoute route1 = new BGPIPv6RouteImpl(IPv6.FAMILY.prefixForString("2001:db8:1:2::/64"), state,
-               // routeState);
-               //
-               // addedObjects.add(route1);
-               //
-               // final BGPRoute route2 = new BGPIPv6RouteImpl(IPv6.FAMILY.prefixForString("2001:db8:1:1::/64"), state,
-               // routeState);
-               //
-               // addedObjects.add(route2);
-               //
-               // final BGPRoute route3 = new BGPIPv6RouteImpl(IPv6.FAMILY.prefixForString("2001:db8:1::/64"), state,
-               // routeState);
-               //
-               // addedObjects.add(route3);
+               builder.setPathAttributes(paBuilder.build());
+               assertEquals(builder.build(), message);
        }
 
        /*
@@ -395,70 +401,59 @@ public class BGPParserTest {
         * 15 ac 10 00 <- IPv4 Prefix (172.16.0.0 / 21)
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testGetUpdateMessage3() throws Exception {
                final byte[] body = ByteArray.cutBytes(inputBytes.get(2), MessageUtil.COMMON_HEADER_LENGTH);
                final int messageLength = ByteArray.bytesToInt(ByteArray.subByte(inputBytes.get(2), MessageUtil.MARKER_LENGTH,
                                MessageUtil.LENGTH_FIELD_LENGTH));
                final Update message = BGPParserTest.updateParser.parseMessageBody(body, messageLength);
 
+               final UpdateBuilder builder = new UpdateBuilder();
+
+               // check nlri
+               final Ipv4Prefix pref1 = new Ipv4Prefix("172.16.0.0/21");
+
+               final List<Ipv4Prefix> nlri = Lists.newArrayList(pref1);
+               builder.setNlri(new NlriBuilder().setNlri(nlri).build());
+               assertEquals(builder.getNlri(), message.getNlri());
+
                // check fields
                assertNull(message.getWithdrawnRoutes());
 
                // attributes
-
                final List<AsSequence> asnums = Lists.newArrayList(new AsSequenceBuilder().setAs(new AsNumber(30L)).build());
-               final List<AsPathSegment> asPath = Lists.newArrayList();
+               final List<Segments> asPath = Lists.newArrayList();
                asPath.add(new SegmentsBuilder().setCSegment(new CAListBuilder().setAsSequence(asnums).build()).build());
                asPath.add(new SegmentsBuilder().setCSegment(
                                new CASetBuilder().setAsSet(Lists.newArrayList(new AsNumber(10L), new AsNumber(20L))).build()).build());
 
-               final BgpAggregator aggregator = new AggregatorBuilder().setAsNumber(new AsNumber((long) 30)).setNetworkAddress(
+               final Aggregator aggregator = new AggregatorBuilder().setAsNumber(new AsNumber((long) 30)).setNetworkAddress(
                                new Ipv4Address("10.0.0.9")).build();
                final CIpv4NextHop nextHop = new CIpv4NextHopBuilder().setIpv4NextHop(
                                new Ipv4NextHopBuilder().setGlobal(new Ipv4Address("10.0.0.9")).build()).build();
 
-               // final IPv4Prefix pref1 = IPv4.FAMILY.prefixForString("172.16.0.0/21");
-
                // check path attributes
+               PathAttributes attrs = message.getPathAttributes();
 
-               // final PathAttribute originAttr = new PathAttribute(TypeCode.ORIGIN, false,
-               // true, false, false, BGPOrigin.INCOMPLETE);
-               // assertEquals(originAttr, attrs.get(0));
-               //
-               // final PathAttribute asPathAttr = new PathAttribute(TypeCode.AS_PATH, false,
-               // true, false, false, asPath);
-               // assertEquals(asPathAttr, attrs.get(1));
-               //
-               // final PathAttribute nextHopAttr = new PathAttribute(TypeCode.NEXT_HOP, false,
-               // true, false, false, nextHop);
-               // assertEquals(nextHopAttr, attrs.get(2));
-               //
-               // final PathAttribute multiExitDisc = new PathAttribute(
-               // TypeCode.MULTI_EXIT_DISC, true, false, false, false, 0);
-               // assertEquals(multiExitDisc, attrs.get(3));
-               //
-               // final PathAttribute agg = new PathAttribute(TypeCode.AGGREGATOR, true, true,
-               // false, false, aggregator);
-               // assertEquals(agg, attrs.get(4));
-               //
-               // // check nlri
-               //
-               // final Set<IPv4Prefix> nlri = Sets.newHashSet(pref1);
-               // assertEquals(nlri, ret.getBgpUpdateMessageBuilder().getNlri());
-               //
-               // final BaseBGPObjectState state = new BaseBGPObjectState(BgpOrigin.Incomplete, aggregator);
-               // final NetworkRouteState routeState = new NetworkRouteState(new NetworkObjectState(asPath,
-               // Collections.<Community> emptySet(), Collections.<ExtendedCommunity> emptySet()), nextHop);
+               PathAttributesBuilder paBuilder = new PathAttributesBuilder();
 
-               // check API message
+               paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Incomplete).build());
+               assertEquals(paBuilder.getOrigin(), attrs.getOrigin());
 
-               // final Set<BGPObject> addedObjects = Sets.newHashSet();
-               //
-               // final BGPRoute route1 = new BGPIPv4RouteImpl(pref1, state, routeState);
-               //
-               // addedObjects.add(route1);
+               paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build());
+               assertEquals(paBuilder.getAsPath(), attrs.getAsPath());
+
+               paBuilder.setCNextHop(nextHop);
+               assertEquals(paBuilder.getCNextHop(), attrs.getCNextHop());
+
+               paBuilder.setMultiExitDisc(new MultiExitDiscBuilder().setMed((long) 0).build());
+               assertEquals(paBuilder.getMultiExitDisc(), attrs.getMultiExitDisc());
+
+               paBuilder.setAggregator(aggregator);
+               assertEquals(paBuilder.getAggregator(), attrs.getAggregator());
+
+               builder.setPathAttributes(paBuilder.build());
+
+               assertEquals(builder.build(), message);
        }
 
        /*
@@ -501,74 +496,64 @@ public class BGPParserTest {
         * 18 0a 1e 01 <- IPv4 Prefix (10.30.1.0 / 24)
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testGetUpdateMessage4() throws Exception {
                final byte[] body = ByteArray.cutBytes(inputBytes.get(3), MessageUtil.COMMON_HEADER_LENGTH);
                final int messageLength = ByteArray.bytesToInt(ByteArray.subByte(inputBytes.get(3), MessageUtil.MARKER_LENGTH,
                                MessageUtil.LENGTH_FIELD_LENGTH));
                final Update message = BGPParserTest.updateParser.parseMessageBody(body, messageLength);
 
-               // check fields
+               final UpdateBuilder builder = new UpdateBuilder();
 
+               // check fields
                assertNull(message.getWithdrawnRoutes());
 
-               // attributes
+               // check nlri
+               final Ipv4Prefix pref1 = new Ipv4Prefix("10.30.3.0/24");
+               final Ipv4Prefix pref2 = new Ipv4Prefix("10.30.2.0/24");
+               final Ipv4Prefix pref3 = new Ipv4Prefix("10.30.1.0/24");
+
+               final List<Ipv4Prefix> nlri = Lists.newArrayList(pref1, pref2, pref3);
+               builder.setNlri(new NlriBuilder().setNlri(nlri).build());
+               assertEquals(builder.getNlri(), message.getNlri());
 
+               // attributes
                final CIpv4NextHop nextHop = new CIpv4NextHopBuilder().setIpv4NextHop(
                                new Ipv4NextHopBuilder().setGlobal(new Ipv4Address("3.3.3.3")).build()).build();
 
-               final Set<ExtendedCommunity> comms = Sets.newHashSet();
-               comms.add(new CInet4SpecificExtendedCommunityBuilder().setInet4SpecificExtendedCommunity(
-                               new Inet4SpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(new Ipv4Address("192.168.1.0")).setLocalAdministrator(
-                                               new byte[] { 0x12, 0x34 }).build()).build());
+               final List<ExtendedCommunities> comms = Lists.newArrayList();
+               comms.add(new ExtendedCommunitiesBuilder().setExtendedCommunity(
+                               new CInet4SpecificExtendedCommunityBuilder().setInet4SpecificExtendedCommunity(
+                                               new Inet4SpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(
+                                                               new Ipv4Address("192.168.1.0")).setLocalAdministrator(new byte[] { 0x12, 0x34 }).build()).build()).build());
+
+               final List<Segments> asPath = Lists.newArrayList();
 
                // check path attributes
+               PathAttributes attrs = message.getPathAttributes();
 
-               // final PathAttribute originAttr = new PathAttribute(TypeCode.ORIGIN, false,
-               // true, false, false, BGPOrigin.EGP);
-               // assertEquals(originAttr, attrs.get(0));
-               //
-               // final PathAttribute asPathAttr = new PathAttribute(TypeCode.AS_PATH, false,
-               // true, false, false, asPath);
-               // assertEquals(asPathAttr, attrs.get(1));
-               //
-               // final PathAttribute nextHopAttr = new PathAttribute(TypeCode.NEXT_HOP, false,
-               // true, false, false, nextHop);
-               // assertEquals(nextHopAttr, attrs.get(2));
-               //
-               // final PathAttribute multiExitDisc = new PathAttribute(
-               // TypeCode.MULTI_EXIT_DISC, true, false, false, false, 0);
-               // assertEquals(multiExitDisc, attrs.get(3));
-               //
-               // final PathAttribute localPref = new PathAttribute(TypeCode.LOCAL_PREF, false,
-               // true, false, false, 100);
-               // assertEquals(localPref, attrs.get(4));
+               PathAttributesBuilder paBuilder = new PathAttributesBuilder();
 
-               // check nlri
-               //
-               // final Set<IPv4Prefix> nlri = Sets.newHashSet(pref1, pref2, pref3);
-               // assertEquals(nlri, ret.getBgpUpdateMessageBuilder().getNlri());
+               paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Egp).build());
+               assertEquals(paBuilder.getOrigin(), attrs.getOrigin());
 
-               // final BaseBGPObjectState state = new BaseBGPObjectState(BgpOrigin.Egp, null);
-               // final NetworkRouteState routeState = new NetworkRouteState(new NetworkObjectState(Collections.<AsPathSegment>
-               // emptyList(), Collections.<Community> emptySet(), comms), nextHop);
+               paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build());
+               assertEquals(paBuilder.getAsPath(), attrs.getAsPath());
 
-               // check API message
+               paBuilder.setCNextHop(nextHop);
+               assertEquals(paBuilder.getCNextHop(), attrs.getCNextHop());
 
-               // final Set<BGPObject> addedObjects = Sets.newHashSet();
-               //
-               // final BGPRoute route1 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("10.30.3.0/24"), state, routeState);
-               //
-               // addedObjects.add(route1);
-               //
-               // final BGPRoute route2 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("10.30.2.0/24"), state, routeState);
-               //
-               // addedObjects.add(route2);
-               //
-               // final BGPRoute route3 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("10.30.1.0/24"), state, routeState);
-               //
-               // addedObjects.add(route3);
+               paBuilder.setMultiExitDisc(new MultiExitDiscBuilder().setMed((long) 0).build());
+               assertEquals(paBuilder.getMultiExitDisc(), attrs.getMultiExitDisc());
+
+               paBuilder.setLocalPref(new LocalPrefBuilder().setPref(100L).build());
+               assertEquals(paBuilder.getLocalPref(), attrs.getLocalPref());
+
+               paBuilder.setExtendedCommunities(comms);
+               assertEquals(paBuilder.getExtendedCommunities(), attrs.getExtendedCommunities());
+
+               // check API message
+               builder.setPathAttributes(paBuilder.build());
+               assertEquals(builder.build(), message);
        }
 
        /*
@@ -582,8 +567,6 @@ public class BGPParserTest {
         * 00 00 <- total path attribute length
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testGetUpdateMessage5() throws Exception {
                final byte[] body = ByteArray.cutBytes(inputBytes.get(4), MessageUtil.COMMON_HEADER_LENGTH);
                final int messageLength = ByteArray.bytesToInt(ByteArray.subByte(inputBytes.get(4), MessageUtil.MARKER_LENGTH,
@@ -591,20 +574,17 @@ public class BGPParserTest {
                final Update message = BGPParserTest.updateParser.parseMessageBody(body, messageLength);
 
                // attributes
-
                final List<Ipv4Prefix> prefs = Lists.newArrayList(new Ipv4Prefix("172.16.0.4/30"));
 
                // check API message
-
                final Update expectedMessage = new UpdateBuilder().setWithdrawnRoutes(
                                new WithdrawnRoutesBuilder().setWithdrawnRoutes(prefs).build()).build();
 
-               assertEquals(expectedMessage.getWithdrawnRoutes().getWithdrawnRoutes().get(0).toString(),
-                               message.getWithdrawnRoutes().getWithdrawnRoutes().get(0).toString());
+               assertEquals(expectedMessage.getWithdrawnRoutes(), message.getWithdrawnRoutes());
        }
 
        /*
-        * Test EOR for IPv4.
+        * End of Rib for Ipv4.
         * 
         * ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff <- marker
         * 00 17 <- length (23) - including header
@@ -637,21 +617,17 @@ public class BGPParserTest {
         * 01 <- value (SAFI 1)
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testEORIpv6() throws Exception {
                final byte[] body = ByteArray.cutBytes(inputBytes.get(6), MessageUtil.COMMON_HEADER_LENGTH);
                final int messageLength = ByteArray.bytesToInt(ByteArray.subByte(inputBytes.get(6), MessageUtil.MARKER_LENGTH,
                                MessageUtil.LENGTH_FIELD_LENGTH));
                final Update message = BGPParserTest.updateParser.parseMessageBody(body, messageLength);
 
-               // check fields
-
-               final Class<? extends AddressFamily> afi = message.getPathAttributes().getAugmentation(PathAttributes1.class).getMpReachNlri().getAfi();
-               final SubsequentAddressFamily safi = message.getPathAttributes().getAugmentation(PathAttributes1.class).getMpReachNlri().getSafi().newInstance();
+               final Class<? extends AddressFamily> afi = message.getPathAttributes().getAugmentation(PathAttributes2.class).getMpUnreachNlri().getAfi();
+               final Class<? extends SubsequentAddressFamily> safi = message.getPathAttributes().getAugmentation(PathAttributes2.class).getMpUnreachNlri().getSafi();
 
                assertEquals(Ipv6AddressFamily.class, afi);
-               assertEquals(UnicastSubsequentAddressFamily.INSTANCE, safi);
+               assertEquals(UnicastSubsequentAddressFamily.class, safi);
        }
 
        /*
@@ -669,19 +645,17 @@ public class BGPParserTest {
         * 47 <- value (SAFI 71)
         */
        @Test
-       @Ignore
-       // FIXME: to be fixed in testing phase
        public void testEORLS() throws Exception {
                final byte[] body = ByteArray.cutBytes(inputBytes.get(7), MessageUtil.COMMON_HEADER_LENGTH);
                final int messageLength = ByteArray.bytesToInt(ByteArray.subByte(inputBytes.get(7), MessageUtil.MARKER_LENGTH,
                                MessageUtil.LENGTH_FIELD_LENGTH));
                final Update message = BGPParserTest.updateParser.parseMessageBody(body, messageLength);
 
-               final Class<? extends AddressFamily> afi = message.getPathAttributes().getAugmentation(PathAttributes1.class).getMpReachNlri().getAfi();
-               final SubsequentAddressFamily safi = message.getPathAttributes().getAugmentation(PathAttributes1.class).getMpReachNlri().getSafi().newInstance();
+               final Class<? extends AddressFamily> afi = message.getPathAttributes().getAugmentation(PathAttributes2.class).getMpUnreachNlri().getAfi();
+               final Class<? extends SubsequentAddressFamily> safi = message.getPathAttributes().getAugmentation(PathAttributes2.class).getMpUnreachNlri().getSafi();
 
                assertEquals(LinkstateAddressFamily.class, afi);
-               assertEquals(LinkstateSubsequentAddressFamily.INSTANCE, safi);
+               assertEquals(LinkstateSubsequentAddressFamily.class, safi);
        }
 
        /*
index a25092369b3fbfa692f8726b549458365d05cbc0..3666ab7e8f7ed3bb88bd266456dab95c1c8f149f 100644 (file)
@@ -100,9 +100,9 @@ public class ComplementaryTest {
 
                assertEquals(40, ((CAs4Bytes) tlv4).getAs4BytesCapability().getAsNumber().getValue().longValue());
 
-               // FIXME: no generated toString
-               // assertEquals(new As4BytesBuilder().setCAs4Bytes(new CAs4BytesBuilder().setAsNumber(new AsNumber((long)
-               // 40)).build()).build().toString(), tlv4.toString());
+               assertEquals(
+                               new CAs4BytesBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(),
+                               tlv4);
        }
 
        @Test
index 2191dc06510d53cfe09a1d5f690f1efa5d57c089..8ebe4c08deda0311b6d9a11c375e207831b5f6c4 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.protocol.bgp.parser.mock;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -18,11 +19,13 @@ import java.util.Map;
 import java.util.Set;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
 import org.opendaylight.protocol.framework.DeserializerException;
 import org.opendaylight.protocol.framework.DocumentedException;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.Open;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.OpenBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.ProtocolVersion;
@@ -31,12 +34,31 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.BgpParameters;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.BgpParametersBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.bgp.parameters.CParameters;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.AsPathBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.OriginBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.as.path.Segments;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.as.path.SegmentsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.BgpTableType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.PathAttributes1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.PathAttributes1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.destination.destination.type.DestinationIpv6Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.open.bgp.parameters.c.parameters.CMultiprotocol;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.open.bgp.parameters.c.parameters.CMultiprotocolBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.open.bgp.parameters.c.parameters.c.multiprotocol.MultiprotocolCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.MpReachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.mp.reach.nlri.AdvertizedRoutesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpOrigin;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.MplsLabeledVpnSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.CAListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.c.a.list.AsSequence;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.c.a.list.AsSequenceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.CIpv6NextHopBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.c.ipv6.next.hop.Ipv6NextHopBuilder;
 import org.opendaylight.yangtools.yang.binding.Notification;
 
 import com.google.common.collect.Lists;
@@ -65,8 +87,6 @@ public class BGPMessageParserMockTest {
         * @throws IOException
         */
        @Test
-       @Ignore
-       // FIXME : BUG-94
        public void testGetUpdateMessage() throws DeserializerException, DocumentedException, IOException {
                final Map<byte[], Notification> updateMap = Maps.newHashMap();
                for (int i = 0; i < this.inputBytes.length; i++) {
@@ -78,7 +98,7 @@ public class BGPMessageParserMockTest {
                for (int i = 0; i < this.inputBytes.length; i++) {
                        assertEquals(this.messages.get(i), mockParser.parse(this.inputBytes[i]));
                }
-               // assertThat(this.messages.get(3), not(mockParser.parse(this.inputBytes[8]).get(0)));
+               assertNotSame(this.messages.get(3), mockParser.parse(this.inputBytes[8]));
        }
 
        /**
@@ -125,32 +145,34 @@ public class BGPMessageParserMockTest {
         */
        private Update fillMessages(final long asn) throws UnknownHostException {
 
-               // FIXME: to be fixed in testing phase
-               /*final List<AsSequence> asnums = Lists.newArrayList(new AsSequenceBuilder().setAs(new AsNumber(asn)).build());
-               final List<AsPathSegment> asPath = Lists.newArrayList();
+               final UpdateBuilder builder = new UpdateBuilder();
+
+               final List<AsSequence> asnums = Lists.newArrayList(new AsSequenceBuilder().setAs(new AsNumber(asn)).build());
+               final List<Segments> asPath = Lists.newArrayList();
                asPath.add(new SegmentsBuilder().setCSegment(new CAListBuilder().setAsSequence(asnums).build()).build());
-               final CNextHop nextHop = new CIpv6NextHopBuilder().setIpv6NextHop(
+               final CNextHop nextHop = (CNextHop) new CIpv6NextHopBuilder().setIpv6NextHop(
                                new Ipv6NextHopBuilder().setGlobal(new Ipv6Address("2001:db8::1")).setLinkLocal(new Ipv6Address("fe80::c001:bff:fe7e:0")).build()).build();
 
-               final Prefix<IPv6Address> pref1 = new IPv6Prefix(new IPv6Address(InetAddress.getByName("2001:db8:1:2::")), 64);
-               final Prefix<IPv6Address> pref2 = new IPv6Prefix(new IPv6Address(InetAddress.getByName("2001:db8:1:1::")), 64);
-               final Prefix<IPv6Address> pref3 = new IPv6Prefix(new IPv6Address(InetAddress.getByName("2001:db8:1::")), 64);
+               final Ipv6Prefix pref1 = new Ipv6Prefix("2001:db8:1:2::/64");
+               final Ipv6Prefix pref2 = new Ipv6Prefix("2001:db8:1:1::/64");
+               final Ipv6Prefix pref3 = new Ipv6Prefix("2001:db8:1::/64");
 
-               final Set<BGPObject> addedObjects = new HashSet<BGPObject>();
+               PathAttributesBuilder paBuilder = new PathAttributesBuilder();
+               paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build());
+               paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build());
 
-               final NetworkRouteState nstate = new NetworkRouteState(new NetworkObjectState(asPath, Collections.<Community> emptySet(), Collections.<ExtendedCommunity> emptySet()), nextHop);
-               final BaseBGPObjectState state = new BaseBGPObjectState(BgpOrigin.Igp, null);
+               MpReachNlriBuilder mpReachBuilder = new MpReachNlriBuilder();
+               mpReachBuilder.setAfi(Ipv6AddressFamily.class);
+               mpReachBuilder.setSafi(UnicastSubsequentAddressFamily.class);
+               mpReachBuilder.setCNextHop(nextHop);
+               mpReachBuilder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(
+                               new DestinationIpv6Builder().setIpv6Prefixes(Lists.newArrayList(pref1, pref2, pref3)).build()).build());
 
-               final BGPRoute route1 = new BGPIPv6RouteImpl(pref1, state, nstate);
-               final BGPRoute route2 = new BGPIPv6RouteImpl(pref2, state, nstate);
-               final BGPRoute route3 = new BGPIPv6RouteImpl(pref3, state, nstate);
-               addedObjects.add(route1);
-               addedObjects.add(route2);
-               addedObjects.add(route3);
+               paBuilder.addAugmentation(PathAttributes1.class, new PathAttributes1Builder().setMpReachNlri(mpReachBuilder.build()).build());
 
-               return new BGPUpdateMessageImpl(addedObjects, Collections.<Identifier> emptySet());*/
+               builder.setPathAttributes(paBuilder.build());
 
-               return new UpdateBuilder().build();
+               return builder.build();
        }
 
        @Test
index 60560dc2f5b00a1bc8a3a4a78f91a09dad9e4589..5c4b78e041ff30dd33d7792a2aff9ff35289766e 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.protocol.concepts;
 import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -20,6 +21,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
+import com.google.common.net.InetAddresses;
+import com.google.common.primitives.Bytes;
 import com.google.common.primitives.UnsignedBytes;
 
 /**
@@ -29,7 +32,7 @@ public final class Ipv4Util {
 
        public static Ipv4Address addressForBytes(final byte[] bytes) {
                try {
-                       return new Ipv4Address(Inet4Address.getByAddress(bytes).getHostAddress());
+                       return new Ipv4Address(InetAddresses.toAddrString(Inet4Address.getByAddress(bytes)));
                } catch (final UnknownHostException e) {
                        throw new IllegalArgumentException(e.getMessage());
                }
@@ -45,9 +48,27 @@ public final class Ipv4Util {
                return a.getAddress();
        }
 
+       public static byte[] bytesForPrefix(final Ipv4Prefix prefix) {
+               String p = prefix.getValue();
+               final int sep = p.indexOf("/");
+               try {
+                       byte[] bytes = Inet4Address.getByName(p.substring(0, sep)).getAddress();
+                       return Bytes.concat(bytes, new byte[] { Byte.valueOf(p.substring(sep + 1, p.length() - 1)) });
+               } catch (UnknownHostException e) {
+                       throw new IllegalArgumentException(e.getMessage());
+               }
+       }
+
        public static Ipv4Prefix prefixForBytes(final byte[] bytes, final int length) {
                Preconditions.checkArgument(length <= bytes.length * 8);
-               return new Ipv4Prefix(addressForBytes(bytes).toString() + "/" + length);
+               byte[] tmp = Arrays.copyOfRange(bytes, 0, 4);
+               InetAddress a = null;
+               try {
+                       a = InetAddress.getByAddress(tmp);
+               } catch (UnknownHostException e) {
+                       throw new IllegalArgumentException(e.getMessage());
+               }
+               return new Ipv4Prefix(InetAddresses.toAddrString(a) + "/" + length);
        }
 
        public static List<Ipv4Prefix> prefixListForBytes(final byte[] bytes) {
index 6eb959d8de32b944340df9631346cfe713000ff6..00b2da5ac676ac40f1ba14f11d25ffce76e2e406 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.protocol.concepts;
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -19,6 +20,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
+import com.google.common.net.InetAddresses;
 import com.google.common.primitives.UnsignedBytes;
 
 /**
@@ -28,7 +30,7 @@ public class Ipv6Util {
 
        public static Ipv6Address addressForBytes(final byte[] bytes) {
                try {
-                       return new Ipv6Address(Inet6Address.getByAddress(bytes).toString());
+                       return new Ipv6Address(InetAddresses.toAddrString(Inet6Address.getByAddress(bytes)));
                } catch (final UnknownHostException e) {
                        throw new IllegalArgumentException(e.getMessage());
                }
@@ -46,7 +48,14 @@ public class Ipv6Util {
 
        public static Ipv6Prefix prefixForBytes(final byte[] bytes, final int length) {
                Preconditions.checkArgument(length <= bytes.length * 8);
-               return new Ipv6Prefix(addressForBytes(bytes).toString() + "/" + length);
+               byte[] tmp = Arrays.copyOfRange(bytes, 0, 16);
+               InetAddress a = null;
+               try {
+                       a = InetAddress.getByAddress(tmp);
+               } catch (UnknownHostException e) {
+                       throw new IllegalArgumentException(e.getMessage());
+               }
+               return new Ipv6Prefix(InetAddresses.toAddrString(a) + "/" + length);
        }
 
        public static List<Ipv6Prefix> prefixListForBytes(final byte[] bytes) {
index 341fe3cb74a5d658a4e144ab559fd7c9af27915c..1820c8232927bb7a62076ed1577a66281f0bcf75 100644 (file)
@@ -7,9 +7,12 @@
  */
 package org.opendaylight.protocol.concepts;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.net.UnknownHostException;
+import java.util.List;
 
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
@@ -18,6 +21,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
 
+import com.google.common.collect.Lists;
+
 public class IPAddressesAndPrefixesTest {
 
        @Test
@@ -37,4 +42,46 @@ public class IPAddressesAndPrefixesTest {
                assertTrue("123.123.123.123/24".equals(new Ipv4Prefix("123.123.123.123/24").getValue()));
                assertTrue("2001::1/120".equals(new Ipv6Prefix("2001::1/120").getValue()));
        }
+
+       @Test
+       public void testPrefix4ForBytes() {
+               byte[] bytes = new byte[] { 123, 122, 4, 5 };
+               assertEquals(new Ipv4Prefix("123.122.4.5/32"), Ipv4Util.prefixForBytes(bytes, 32));
+       }
+
+       @Test
+       public void testAddress4ForBytes() {
+               byte[] bytes = new byte[] { (byte) 123, (byte) 122, (byte) 4, (byte) 5 };
+               assertEquals(new Ipv4Address("123.122.4.5"), Ipv4Util.addressForBytes(bytes));
+               try {
+                       Ipv4Util.addressForBytes(new byte[] { 22, 44, 66, 18, 88, 33 });
+                       fail();
+               } catch (IllegalArgumentException e) {
+                       assertEquals("addr is of illegal length", e.getMessage());
+               }
+       }
+
+       @Test
+       public void testPrefixList4ForBytes() {
+               byte[] bytes = new byte[] { 22, (byte) 172, (byte) 168, 3, 8, 12, 32, (byte) 192, (byte) 168, 35, 100 };
+               List<Ipv4Prefix> prefs = Ipv4Util.prefixListForBytes(bytes);
+               assertEquals(
+                               Lists.newArrayList(new Ipv4Prefix("172.168.3.0/22"), new Ipv4Prefix("12.0.0.0/8"), new Ipv4Prefix("192.168.35.100/32")),
+                               prefs);
+       }
+
+       @Test
+       public void testPrefix6ForBytes() {
+               byte[] bytes = new byte[] { 0x20, 0x01, 0x0d, (byte) 0xb8, 0x00, 0x01, 0x00, 0x02 };
+               assertEquals(new Ipv6Prefix("2001:db8:1:2::/64"), Ipv6Util.prefixForBytes(bytes, 64));
+       }
+
+       @Test
+       public void testPrefixList6ForBytes() {
+               List<Ipv6Prefix> prefs = Lists.newArrayList();
+               prefs.add(new Ipv6Prefix("2001:db8:1:2::/64"));
+               prefs.add(new Ipv6Prefix("2001:db8:1:1::/64"));
+               prefs.add(new Ipv6Prefix("2001:db8:1::/64"));
+
+       }
 }