Unit test for Ipv4NlriParser 77/22977/8
authorIveta Halanova <iveta.halanova@pantheon.sk>
Wed, 17 Jun 2015 05:26:38 +0000 (07:26 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 14 Jul 2015 21:19:05 +0000 (21:19 +0000)
created Ipv4NlriParserTest
correction of:
- check of nlri instance type
- serialize nlri in <length, prefix> order

Change-Id: I00c06b352aabe4eb94a492c737377ec1efefec99
Signed-off-by: Iveta Halanova <iveta.halanova@pantheon.sk>
(cherrypicked from fe956c3355f88b3b4a12ae512ac45d00777e3abf)

bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/Ipv4NlriParser.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/Ipv4NlriParserTest.java [new file with mode: 0644]

index 6db05b60906f2a3f285b9b18a9fe4ce9f4f317ff..f94e24892ffc84014a37dda358e28b85938e283a 100644 (file)
@@ -22,7 +22,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.destination.ipv4.Ipv4Prefixes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.destination.ipv4.Ipv4PrefixesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv4CaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.Nlri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlriBuilder;
@@ -34,10 +33,10 @@ public final class Ipv4NlriParser implements NlriParser, NlriSerializer {
 
     @Override
     public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) {
-        Preconditions.checkArgument(attribute instanceof Attributes, "Attribute parameter is not a PathAttribute object.");
+        Preconditions.checkArgument(attribute instanceof Nlri, "Attribute parameter is not a Nlri object.");
         final Nlri nlri = (Nlri) attribute;
         for (final Ipv4Prefix ipv4Prefix : nlri.getNlri()) {
-            byteAggregator.writeBytes(Ipv4Util.bytesForPrefix(ipv4Prefix));
+            byteAggregator.writeBytes(Ipv4Util.bytesForPrefixBegin(ipv4Prefix));
         }
     }
 
diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/Ipv4NlriParserTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/Ipv4NlriParserTest.java
new file mode 100644 (file)
index 0000000..69174a0
--- /dev/null
@@ -0,0 +1,122 @@
+package org.opendaylight.protocol.bgp.parser.impl;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import com.google.common.collect.Lists;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.protocol.bgp.parser.BGPParsingException;
+import org.opendaylight.protocol.bgp.parser.impl.message.update.Ipv4NlriParser;
+import org.opendaylight.protocol.util.Ipv4Util;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.DestinationIpv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.destination.ipv4.Ipv4Prefixes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.destination.ipv4.Ipv4PrefixesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv4Case;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv4CaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.Nlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.NlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlriBuilder;
+
+public class Ipv4NlriParserTest {
+    private final Ipv4NlriParser parser = new Ipv4NlriParser();
+
+    private final String ipPrefix1 = "1.2.3.4/32";
+    private final String ipPrefix2 = "1.2.3.5/32";
+    private final String additionalIpWD = "1.2.3.6/32";
+
+    private final List<Ipv4Prefixes> prefixes = new ArrayList<>();
+    private final ByteBuf inputBytes = Unpooled.buffer();
+
+    private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationIpv4Case ip4caseWD;
+    private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationIpv4Case ip4caseWDWrong;
+    private DestinationIpv4Case ip4caseAD;
+    private DestinationIpv4Case ip4caseADWrong;
+
+    private Nlri nlri;
+    private Nlri nlriWrong;
+
+
+    @Before
+    public void setUp() {
+        final Ipv4Prefix prefix1 = new Ipv4Prefix(this.ipPrefix1);
+        final Ipv4Prefix prefix2 = new Ipv4Prefix(this.ipPrefix2);
+        final Ipv4Prefix wrongPrefix = new Ipv4Prefix(this.additionalIpWD);
+        this.prefixes.add(new Ipv4PrefixesBuilder().setPrefix(prefix1).build());
+        this.prefixes.add(new Ipv4PrefixesBuilder().setPrefix(prefix2).build());
+
+        this.ip4caseWD = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationIpv4CaseBuilder().setDestinationIpv4(
+            new DestinationIpv4Builder().setIpv4Prefixes(this.prefixes).build()).build();
+        this.ip4caseAD = new DestinationIpv4CaseBuilder().setDestinationIpv4(new DestinationIpv4Builder().setIpv4Prefixes(this.prefixes).build()).build();
+
+        final ArrayList<Ipv4Prefixes> fakePrefixes = new ArrayList<Ipv4Prefixes>(this.prefixes);
+        fakePrefixes.add(new Ipv4PrefixesBuilder().setPrefix(wrongPrefix).build());
+        this.ip4caseWDWrong = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationIpv4CaseBuilder().setDestinationIpv4(
+            new DestinationIpv4Builder().setIpv4Prefixes(fakePrefixes).build()).build();
+        this.ip4caseADWrong = new DestinationIpv4CaseBuilder().setDestinationIpv4(new DestinationIpv4Builder().setIpv4Prefixes(fakePrefixes).build()).build();
+
+        this.inputBytes.writeBytes(Ipv4Util.bytesForPrefixBegin(prefix1));
+        this.inputBytes.writeBytes(Ipv4Util.bytesForPrefixBegin(prefix2));
+
+        final List<Ipv4Prefix> prefixList = new ArrayList<Ipv4Prefix>();
+        prefixList.add(prefix1);
+        prefixList.add(prefix2);
+        this.nlri = new NlriBuilder().setNlri(prefixList).build();
+        final List<Ipv4Prefix> prefixWrongList = Lists.newArrayList(prefixList.iterator());
+        prefixWrongList.add(wrongPrefix);
+        this.nlriWrong = new NlriBuilder().setNlri(prefixWrongList).build();
+    }
+
+    @Test
+    public void prefixesTest() {
+        assertEquals(this.ipPrefix1, this.prefixes.get(0).getPrefix().getValue());
+        assertEquals(this.ipPrefix2, this.prefixes.get(1).getPrefix().getValue());
+        assertEquals(2, this.prefixes.size());
+    }
+
+    @Test
+    public void serializeAttributeTest() throws UnsupportedEncodingException {
+        final ByteBuf outputBytes = Unpooled.buffer();
+
+        this.parser.serializeAttribute(this.nlri, outputBytes);
+        assertArrayEquals(this.inputBytes.array(), outputBytes.array());
+        this.parser.serializeAttribute(this.nlriWrong, outputBytes);
+        assertFalse(Arrays.equals(this.inputBytes.array(), outputBytes.array()));
+    }
+
+    @Test
+    public void parseUnreachedNlriTest() {
+        final MpUnreachNlriBuilder b = new MpUnreachNlriBuilder();
+        this.parser.parseNlri(this.inputBytes, b);
+        assertNotNull("Withdrawn routes, destination type should not be null", b.getWithdrawnRoutes().getDestinationType());
+
+        assertEquals(this.ip4caseWD.hashCode(), b.getWithdrawnRoutes().getDestinationType().hashCode());
+        assertFalse(this.ip4caseWDWrong.hashCode() == b.getWithdrawnRoutes().getDestinationType().hashCode());
+
+        assertTrue(this.ip4caseWD.toString().equals(b.getWithdrawnRoutes().getDestinationType().toString()));
+        assertFalse(this.ip4caseWDWrong.toString().equals(b.getWithdrawnRoutes().getDestinationType().toString()));
+    }
+
+    @Test
+    public void parseReachedNlriTest() throws BGPParsingException {
+        final MpReachNlriBuilder b = new MpReachNlriBuilder();
+        this.parser.parseNlri(this.inputBytes, b);
+        assertNotNull("Advertized routes, destination type should not be null", b.getAdvertizedRoutes().getDestinationType());
+
+        assertEquals(this.ip4caseAD.hashCode(), b.getAdvertizedRoutes().getDestinationType().hashCode());
+        assertFalse(this.ip4caseADWrong.hashCode() == b.getAdvertizedRoutes().getDestinationType().hashCode());
+
+        assertTrue(this.ip4caseAD.toString().equals(b.getAdvertizedRoutes().getDestinationType().toString()));
+        assertFalse(this.ip4caseADWrong.toString().equals(b.getAdvertizedRoutes().getDestinationType().toString()));
+    }
+}