8c4b7cecf5cc0c06ec881a9d6eedd1ea47710972
[bgpcep.git] / bgp / linkstate / src / test / java / org / opendaylight / protocol / bgp / linkstate / attribute / next / hop / LinkstateNextHopParserTest.java
1 /*
2  * Copyright (c) 2015 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
9 package org.opendaylight.protocol.bgp.linkstate.attribute.next.hop;
10
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.junit.Assert.fail;
16
17 import io.netty.buffer.ByteBuf;
18 import io.netty.buffer.Unpooled;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.protocol.bgp.parser.BGPParsingException;
22 import org.opendaylight.protocol.util.ByteArray;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCase;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv6NextHopCase;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv6NextHopCaseBuilder;
30 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;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.ipv6.next.hop._case.Ipv6NextHop;
32 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;
33 import org.opendaylight.yangtools.yang.binding.DataContainer;
34
35 public class LinkstateNextHopParserTest {
36
37     public static final byte[] ipv6B = {0x20, 1, 0x0d, (byte) 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
38     public static final byte[] ipv6lB = {0x20, 1, 0x0d, (byte) 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39         1, (byte) 0xfe, (byte) 0x80, 0, 0, 0, 0, 0, 0, (byte) 0xc0, 1, 0x0b, (byte) 0xff, (byte) 0xfe, 0x7e, 0, 0};
40
41     public static final Ipv6Address ipv6 = new Ipv6Address("2001:db8::1");
42     public static final Ipv6Address ipv6l = new Ipv6Address("fe80::c001:bff:fe7e:0");
43
44     LinkstateNextHopParser linkstateNextHopParser;
45     CNextHop hop;
46     ByteBuf buffer;
47
48     @Before
49     public final void setUp() {
50         linkstateNextHopParser = new LinkstateNextHopParser();
51         buffer = Unpooled.buffer();
52     }
53
54     @Test
55     public void testSerializeIpv4NextHopCase() throws BGPParsingException {
56         final byte[] ipv4B = {42, 42, 42, 42};
57         hop = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder()
58             .setGlobal(new Ipv4Address("42.42.42.42")).build()).build();
59
60         linkstateNextHopParser.serializeNextHop(hop, buffer);
61         assertArrayEquals(ipv4B, ByteArray.readAllBytes(buffer));
62
63         final CNextHop parsedHop = linkstateNextHopParser.parseNextHop(Unpooled.wrappedBuffer(ipv4B));
64         assertTrue(parsedHop instanceof Ipv4NextHopCase);
65         assertEquals(hop, parsedHop);
66     }
67
68     @Test
69     public void testSerializeIpv6NextHopCase() throws BGPParsingException {
70         hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setGlobal(ipv6).setLinkLocal(ipv6l).build()).build();
71         buffer.clear();
72         linkstateNextHopParser.serializeNextHop(hop, buffer);
73         assertArrayEquals(ipv6lB, ByteArray.readAllBytes(buffer));
74
75         final CNextHop parsedHop = linkstateNextHopParser.parseNextHop(Unpooled.wrappedBuffer(ipv6B));
76         assertTrue(parsedHop instanceof Ipv6NextHopCase);
77         final Ipv6NextHop nextHopIpv6 = ((Ipv6NextHopCase) parsedHop).getIpv6NextHop();
78         assertEquals(ipv6, nextHopIpv6.getGlobal());
79         assertNull(nextHopIpv6.getLinkLocal());
80     }
81
82     @Test
83     public void testSerializeNextHopEmpty() {
84         buffer.clear();
85         try {
86             linkstateNextHopParser.serializeNextHop(new CNextHop() {
87                 @Override
88                 public Class<? extends DataContainer> getImplementedInterface() {
89                     return null;
90                 }
91             }, buffer);
92         } catch (final IllegalArgumentException e) {
93             assertEquals("cNextHop is not a Linkstate Ipv6 NextHop object.", e.getMessage());
94         }
95     }
96
97     @Test
98     public void testSerializeNextHopGlobalAddressEmpty() {
99         hop = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder().setLinkLocal(ipv6l).build()).build();
100         buffer.clear();
101         try {
102             linkstateNextHopParser.serializeNextHop(hop, buffer);
103             fail("Exception should happen");
104         } catch (final IllegalArgumentException e) {
105             assertEquals("Ipv6 Next Hop is missing Global address.", e.getMessage());
106         }
107     }
108 }