0839ddb68f0b9a912908fc8c48dfd9a10236223a
[bgpcep.git] / bgp / concepts / src / test / java / org / opendaylight / bgp / concepts / NextHopUtilTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.bgp.concepts;
9
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.junit.Assert.fail;
14
15 import io.netty.buffer.ByteBuf;
16 import io.netty.buffer.Unpooled;
17 import org.junit.Test;
18 import org.opendaylight.protocol.util.ByteArray;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv6NextHopCase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv6NextHopCaseBuilder;
26 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;
27 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;
28
29 public class NextHopUtilTest {
30
31     private static final byte[] IPV4B = {42, 42, 42, 42};
32     private static final byte[] IPV6B = {0x20, 1, 0x0d, (byte) 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
33     private static final byte[] IPV6LB = {0x20, 1, 0x0d, (byte) 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34         1, (byte) 0xfe, (byte) 0x80, 0, 0, 0, 0, 0, 0, (byte) 0xc0, 1, 0x0b, (byte) 0xff, (byte) 0xfe, 0x7e, 0, 0};
35
36     private static final Ipv4Address IPV4 = new Ipv4Address("42.42.42.42");
37     private static final Ipv6Address IPV6 = new Ipv6Address("2001:db8::1");
38     private static final Ipv6Address IPV6L = new Ipv6Address("fe80::c001:bff:fe7e:0");
39
40     @Test
41     public void testSerializeNextHop() {
42         CNextHop hop = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder()
43                 .setGlobal(IPV4).build()).build();
44         final ByteBuf buffer = Unpooled.buffer();
45         NextHopUtil.serializeNextHop(hop, buffer);
46         assertArrayEquals(IPV4B, ByteArray.readAllBytes(buffer));
47
48         hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setGlobal(IPV6).build()).build();
49         buffer.clear();
50         NextHopUtil.serializeNextHop(hop, buffer);
51         assertArrayEquals(IPV6B, ByteArray.readAllBytes(buffer));
52
53         hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setGlobal(IPV6)
54                 .setLinkLocal(IPV6L).build()).build();
55         buffer.clear();
56         NextHopUtil.serializeNextHop(hop, buffer);
57         assertArrayEquals(IPV6LB, ByteArray.readAllBytes(buffer));
58
59         buffer.clear();
60
61         hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setLinkLocal(IPV6L).build()).build();
62         buffer.clear();
63         try {
64             NextHopUtil.serializeNextHop(hop, buffer);
65             fail("Exception should happen");
66         } catch (final IllegalArgumentException e) {
67             assertEquals("Ipv6 Next Hop is missing Global address.", e.getMessage());
68         }
69     }
70
71     @Test(expected = IllegalArgumentException.class)
72     public void testSerializeNextHopException() {
73         NextHopUtil.serializeNextHop(() -> null, null);
74     }
75
76     @Test
77     public void testParseNextHop() {
78         CNextHop hop = null;
79         try {
80             hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(IPV4B));
81         } catch (final IllegalArgumentException e) {
82             fail("This exception should not happen");
83         }
84         assertEquals(IPV4, ((Ipv4NextHopCase) hop).getIpv4NextHop().getGlobal());
85
86         try {
87             hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(IPV6B));
88         } catch (final IllegalArgumentException e) {
89             fail("This exception should not happen");
90         }
91         assertEquals(IPV6, ((Ipv6NextHopCase) hop).getIpv6NextHop().getGlobal());
92         assertNull(((Ipv6NextHopCase) hop).getIpv6NextHop().getLinkLocal());
93
94         try {
95             hop = NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(IPV6LB));
96         } catch (final IllegalArgumentException e) {
97             fail("This exception should not happen");
98         }
99         assertEquals(IPV6, ((Ipv6NextHopCase) hop).getIpv6NextHop().getGlobal());
100         assertEquals(IPV6L, ((Ipv6NextHopCase) hop).getIpv6NextHop().getLinkLocal());
101
102         final byte[] wrong = new byte[]{(byte) 0x20, (byte) 0x01, (byte) 0x0d};
103         try {
104             NextHopUtil.parseNextHop(Unpooled.wrappedBuffer(wrong));
105             fail("Exception should happen");
106         } catch (final IllegalArgumentException e) {
107             assertEquals("Cannot parse NEXT_HOP attribute. Wrong bytes length: 3", e.getMessage());
108         }
109     }
110 }