2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.protocol.bgp.parser.spi.pojo;
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;
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;
48 public class SimpleRegistryTest {
50 protected BGPExtensionProviderContext ctx;
51 private BgpTestActivator activator;
55 this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
56 this.activator = new BgpTestActivator();
57 this.activator.start(this.ctx);
61 public void tearDown() {
62 this.activator.close();
66 public void testSimpleAttribute() throws BGPDocumentedException, BGPParsingException {
67 final AttributeRegistry attrReg = this.ctx.getAttributeRegistry();
68 final byte[] attributeBytes = {
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));
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 = {
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));
94 public void testSimpleCapability() throws Exception {
95 final CapabilityRegistry capaRegistry = this.ctx.getCapabilityRegistry();
96 final byte[] capabilityBytes = {
99 capaRegistry.parseCapability(BgpTestActivator.TYPE, Unpooled.wrappedBuffer(capabilityBytes));
100 verify(this.activator.capaParser, times(1)).parseCapability(Mockito.any(ByteBuf.class));
104 public void testSimpleMessageRegistry() throws Exception {
105 final MessageRegistry msgRegistry = this.ctx.getMessageRegistry();
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
114 final Notification msg = mock(Notification.class);
115 doReturn(Notification.class).when(msg).getImplementedInterface();
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));
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());
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());
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
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())
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));
157 public void testMpUnReachParser() throws BGPParsingException {
158 final NlriRegistry nlriReg = this.ctx.getNlriRegistry();
159 final byte[] mpUnreachBytes = {
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));