Bug 3117 - Capability Parameter Parse Issue
[bgpcep.git] / bgp / parser-spi / src / test / java / org / opendaylight / protocol / bgp / parser / spi / pojo / SimpleRegistryTest.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
9 package org.opendaylight.protocol.bgp.parser.spi.pojo;
10
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.times;
16 import static org.mockito.Mockito.verify;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.buffer.Unpooled;
20 import org.junit.After;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mockito;
24 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
25 import org.opendaylight.protocol.bgp.parser.BGPParsingException;
26 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
27 import org.opendaylight.protocol.bgp.parser.spi.AttributeRegistry;
28 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
29 import org.opendaylight.protocol.bgp.parser.spi.CapabilityRegistry;
30 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
31 import org.opendaylight.protocol.bgp.parser.spi.NlriRegistry;
32 import org.opendaylight.protocol.bgp.parser.spi.ParameterRegistry;
33 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlri;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlriBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
44 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;
45 import org.opendaylight.yangtools.yang.binding.DataObject;
46 import org.opendaylight.yangtools.yang.binding.Notification;
47
48 public class SimpleRegistryTest {
49
50     protected BGPExtensionProviderContext ctx;
51     private BgpTestActivator activator;
52
53     @Before
54     public void setUp() {
55         this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
56         this.activator = new BgpTestActivator();
57         this.activator.start(this.ctx);
58     }
59
60     @After
61     public void tearDown() {
62         this.activator.close();
63     }
64
65     @Test
66     public void testSimpleAttribute() throws BGPDocumentedException, BGPParsingException {
67         final AttributeRegistry attrReg = this.ctx.getAttributeRegistry();
68         final byte[] attributeBytes = {
69             0x00, 0x00, 0x00
70         };
71         final ByteBuf byteAggregator = Unpooled.buffer(attributeBytes.length);
72         attrReg.serializeAttribute(Mockito.mock(DataObject.class), byteAggregator);
73         attrReg.parseAttributes(Unpooled.wrappedBuffer(attributeBytes));
74         verify(this.activator.attrParser, times(1)).parseAttribute(Mockito.any(ByteBuf.class), Mockito.any(AttributesBuilder.class));
75         verify(this.activator.attrSerializer, times(1)).serializeAttribute(Mockito.any(DataObject.class), Mockito.any(ByteBuf.class));
76     }
77
78     @Test
79     public void testSimpleParameter() throws Exception {
80         final ParameterRegistry paramReg = this.ctx.getParameterRegistry();
81         final BgpParameters param = Mockito.mock(BgpParameters.class);
82         Mockito.doReturn(BgpParameters.class).when(param).getImplementedInterface();
83         final byte[] paramBytes = {
84             0x00, 0x00
85         };
86         final ByteBuf buffer = Unpooled.buffer(paramBytes.length);
87         paramReg.serializeParameter(param, buffer);
88         paramReg.parseParameter(0, Unpooled.wrappedBuffer(paramBytes));
89         verify(this.activator.paramParser, times(1)).parseParameter(Mockito.any(ByteBuf.class));
90         verify(this.activator.paramSerializer, times(1)).serializeParameter(Mockito.any(BgpParameters.class), Mockito.any(ByteBuf.class));
91     }
92
93     @Test
94     public void testSimpleCapability() throws Exception {
95         final CapabilityRegistry capaRegistry = this.ctx.getCapabilityRegistry();
96         final byte[] capabilityBytes = {
97             0x0, 0x00
98         };
99         capaRegistry.parseCapability(BgpTestActivator.TYPE, Unpooled.wrappedBuffer(capabilityBytes));
100         verify(this.activator.capaParser, times(1)).parseCapability(Mockito.any(ByteBuf.class));
101     }
102
103     @Test
104     public void testSimpleMessageRegistry() throws Exception {
105         final MessageRegistry msgRegistry = this.ctx.getMessageRegistry();
106
107         final byte[] msgBytes = {
108             (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
109             (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
110             (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
111             (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
112             (byte) 0x00, (byte) 0x13, (byte) 0x00
113         };
114         final Notification msg = mock(Notification.class);
115         doReturn(Notification.class).when(msg).getImplementedInterface();
116
117         final ByteBuf buffer = Unpooled.buffer(msgBytes.length);
118         msgRegistry.serializeMessage(msg, buffer);
119         msgRegistry.parseMessage(Unpooled.wrappedBuffer(msgBytes));
120         verify(this.activator.msgParser, times(1)).parseMessageBody(Mockito.any(ByteBuf.class), Mockito.anyInt());
121         verify(this.activator.msgSerializer, times(1)).serializeMessage(Mockito.any(Notification.class), Mockito.any(ByteBuf.class));
122     }
123
124     @Test
125     public void testAfiRegistry() throws Exception {
126         final AddressFamilyRegistry afiRegistry = this.ctx.getAddressFamilyRegistry();
127         assertEquals(Ipv4AddressFamily.class, afiRegistry.classForFamily(1));
128         assertEquals(1, afiRegistry.numberForClass(Ipv4AddressFamily.class).intValue());
129     }
130
131     @Test
132     public void testSafiRegistry() throws Exception {
133         final SubsequentAddressFamilyRegistry safiRegistry = this.ctx.getSubsequentAddressFamilyRegistry();
134         assertEquals(UnicastSubsequentAddressFamily.class, safiRegistry.classForFamily(1));
135         assertEquals(1, safiRegistry.numberForClass(UnicastSubsequentAddressFamily.class).intValue());
136     }
137
138     @Test
139     public void testMpReachParser() throws BGPParsingException {
140         final NlriRegistry nlriReg = this.ctx.getNlriRegistry();
141         final byte[] mpReachBytes = {
142             0x00, 0x01, 0x01, 0x04, 0x7f, 0x00, 0x00, 0x01, 0x00
143         };
144         final MpReachNlri mpReach = new MpReachNlriBuilder()
145             .setAfi(Ipv4AddressFamily.class)
146             .setSafi(UnicastSubsequentAddressFamily.class)
147             .setCNextHop(new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder().setGlobal(new Ipv4Address("127.0.0.1")).build()).build())
148             .build();
149         final ByteBuf buffer = Unpooled.buffer(mpReachBytes.length);
150         nlriReg.serializeMpReach(mpReach, buffer);
151         assertArrayEquals(mpReachBytes, buffer.array());
152         assertEquals(mpReach, nlriReg.parseMpReach(Unpooled.wrappedBuffer(mpReachBytes)));
153         verify(this.activator.nlriParser, times(1)).parseNlri(Mockito.any(ByteBuf.class), Mockito.any(MpReachNlriBuilder.class));
154     }
155
156     @Test
157     public void testMpUnReachParser() throws BGPParsingException {
158         final NlriRegistry nlriReg = this.ctx.getNlriRegistry();
159         final byte[] mpUnreachBytes = {
160             0x00, 0x01, 0x01
161         };
162         final MpUnreachNlri mpUnreach = new MpUnreachNlriBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build();
163         final ByteBuf buffer = Unpooled.buffer(mpUnreachBytes.length);
164         nlriReg.serializeMpUnReach(mpUnreach, buffer);
165         assertArrayEquals(mpUnreachBytes, buffer.array());
166         assertEquals(mpUnreach, nlriReg.parseMpUnreach(Unpooled.wrappedBuffer(mpUnreachBytes)));
167         verify(this.activator.nlriParser, times(1)).parseNlri(Mockito.any(ByteBuf.class), Mockito.any(MpUnreachNlriBuilder.class));
168     }
169 }