BUG-730 : added test for bgp/concepts
[bgpcep.git] / bgp / concepts / src / test / java / org / opendaylight / bgp / concepts / NextHopUtilTest.java
index 2e54b4920395cc679937731ac344e775e89caec0..c65495ff83ef7e6c281d3c8ce8d8e7e6ad177243 100644 (file)
@@ -7,47 +7,88 @@
  */
 package org.opendaylight.bgp.concepts;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
+import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 
 import org.junit.Test;
+import org.opendaylight.protocol.util.ByteArray;
+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.Ipv6Address;
 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.Ipv4NextHopCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv6NextHopCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv6NextHopCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.ipv4.next.hop._case.Ipv4NextHopBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.ipv6.next.hop._case.Ipv6NextHopBuilder;
 
 public class NextHopUtilTest {
 
+    private static final byte[] ipv4B = { 42, 42, 42, 42 };
+    private static final byte[] ipv6B = { 0x20, 1, 0x0d, (byte) 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+    private static final byte[] ipv6lB = { 0x20, 1, 0x0d, (byte) 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        1, (byte) 0xfe, (byte) 0x80, 0, 0, 0, 0, 0, 0, (byte) 0xc0, 1, 0x0b, (byte) 0xff, (byte) 0xfe, 0x7e, 0, 0 };
+
+    private static final Ipv4Address ipv4 = new Ipv4Address("42.42.42.42");
+    private static final Ipv6Address ipv6 = new Ipv6Address("2001:db8::1");
+    private static final Ipv6Address ipv6l = new Ipv6Address("fe80::c001:bff:fe7e:0");
+
+    @Test
+    public void testSerializeNextHop() {
+        CNextHop hop = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder().setGlobal(ipv4).build()).build();
+        final ByteBuf buffer = Unpooled.buffer();
+        NextHopUtil.serializeNextHop(hop, buffer);
+        assertArrayEquals(ipv4B, ByteArray.readAllBytes(buffer));
+
+        hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setGlobal(ipv6).build()).build();
+        buffer.clear();
+        NextHopUtil.serializeNextHop(hop, buffer);
+        assertArrayEquals(ipv6B, ByteArray.readAllBytes(buffer));
+
+        hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setGlobal(ipv6).setLinkLocal(ipv6l).build()).build();
+        buffer.clear();
+        NextHopUtil.serializeNextHop(hop, buffer);
+        assertArrayEquals(ipv6lB, ByteArray.readAllBytes(buffer));
+
+        hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setLinkLocal(ipv6l).build()).build();
+        buffer.clear();
+        try {
+            NextHopUtil.serializeNextHop(hop, buffer);
+            fail("Exception should happen");
+        } catch (final IllegalArgumentException e) {
+            assertEquals("Ipv6 Next Hop is missing Global address.", e.getMessage());
+        }
+    }
+
     @Test
-    public void testNlriUtil() {
+    public void testParseNextHop() {
         CNextHop hop = null;
-        final byte[] ipv4 = new byte[] { 42, 42, 42, 42 };
         try {
-            hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(ipv4));
+            hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(ipv4B));
         } catch (final IllegalArgumentException e) {
             fail("This exception should not happen");
         }
-        assertEquals("42.42.42.42", ((Ipv4NextHopCase) hop).getIpv4NextHop().getGlobal().getValue());
+        assertEquals(ipv4, ((Ipv4NextHopCase) hop).getIpv4NextHop().getGlobal());
 
-        final byte[] ipv6 = new byte[] { (byte) 0x20, (byte) 0x01, (byte) 0x0d, (byte) 0xb8, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01 };
         try {
-            hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(ipv6));
+            hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(ipv6B));
         } catch (final IllegalArgumentException e) {
             fail("This exception should not happen");
         }
-        assertEquals("2001:db8::1", ((Ipv6NextHopCase) hop).getIpv6NextHop().getGlobal().getValue());
+        assertEquals(ipv6, ((Ipv6NextHopCase) hop).getIpv6NextHop().getGlobal());
         assertNull(((Ipv6NextHopCase) hop).getIpv6NextHop().getLinkLocal());
 
-        final byte[] ipv6l = new byte[] { (byte) 0x20, (byte) 0x01, (byte) 0x0d, (byte) 0xb8, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
-            01, (byte) 0xfe, (byte) 0x80, 00, 00, 00, 00, 00, 00, (byte) 0xc0, 01, 0x0b, (byte) 0xff, (byte) 0xfe, 0x7e, 00, 00 };
         try {
-            hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(ipv6l));
+            hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(ipv6lB));
         } catch (final IllegalArgumentException e) {
             fail("This exception should not happen");
         }
-        assertEquals("2001:db8::1", ((Ipv6NextHopCase) hop).getIpv6NextHop().getGlobal().getValue());
-        assertEquals("fe80::c001:bff:fe7e:0", ((Ipv6NextHopCase) hop).getIpv6NextHop().getLinkLocal().getValue());
+        assertEquals(ipv6, ((Ipv6NextHopCase) hop).getIpv6NextHop().getGlobal());
+        assertEquals(ipv6l, ((Ipv6NextHopCase) hop).getIpv6NextHop().getLinkLocal());
 
         final byte[] wrong = new byte[] { (byte) 0x20, (byte) 0x01, (byte) 0x0d };
         try {