2 * Copyright (c) 2013 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
8 package org.opendaylight.protocol.bgp.parser.impl;
10 import static org.junit.Assert.assertEquals;
12 import com.google.common.collect.ImmutableList;
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.Unpooled;
15 import java.util.ArrayList;
16 import java.util.List;
17 import org.junit.Test;
18 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
19 import org.opendaylight.protocol.bgp.parser.impl.message.BGPOpenMessageParser;
20 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
21 import org.opendaylight.protocol.util.ByteArray;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Open;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.OpenBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.ProtocolVersion;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.BgpParametersBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.OptionalCapabilities;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.OptionalCapabilitiesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapabilityBuilder;
36 import org.opendaylight.yangtools.yang.common.Uint16;
37 import org.opendaylight.yangtools.yang.common.Uint32;
38 import org.opendaylight.yangtools.yang.common.Uint8;
40 public class OpenTest {
43 public void testSerializeOpen() throws BGPDocumentedException {
44 final Open open = new OpenBuilder()
45 .setBgpIdentifier(new Ipv4Address("127.0.0.1"))
46 .setMyAsNumber(Uint16.valueOf(30))
47 .setHoldTimer(Uint16.valueOf(3))
48 .setVersion(new ProtocolVersion(Uint8.valueOf(4)))
49 .setBgpParameters(ImmutableList.of(new BgpParametersBuilder()
50 .setOptionalCapabilities(ImmutableList.of(new OptionalCapabilitiesBuilder()
51 .setCParameters(new CParametersBuilder()
52 .setAs4BytesCapability(new As4BytesCapabilityBuilder()
53 .setAsNumber(new AsNumber(Uint32.valueOf(1000))).build())
54 .addAugmentation(CParameters1.class, new CParameters1Builder()
55 .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder()
56 .setRestartFlags(new GracefulRestartCapability.RestartFlags(false))
57 .setRestartTime(Uint16.ZERO)
58 .setTables(ImmutableList.of()).build())
63 final ByteBuf msg = Unpooled.buffer();
64 new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getParameterRegistry())
65 .serializeMessage(open, msg);
66 final byte[] temp = ByteArray.cutBytes(ByteArray.getAllBytes(msg), 19);
67 final Open openResult = new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance()
68 .getParameterRegistry()).parseMessageBody(Unpooled.copiedBuffer(temp), temp.length, null);
70 assertEquals(open.getBgpIdentifier(),openResult.getBgpIdentifier());
71 assertEquals(open.getHoldTimer(), openResult.getHoldTimer());
72 assertEquals(open.getMyAsNumber(), openResult.getMyAsNumber());
73 boolean grace = false;
74 if (openResult.getBgpParameters().get(0).getOptionalCapabilities().get(0).getCParameters()
75 .getAs4BytesCapability() != null) {
78 assertEquals(open.getBgpParameters().get(0).getOptionalCapabilities().get(0).getCParameters()
79 .getAs4BytesCapability(),
80 openResult.getBgpParameters().get(0).getOptionalCapabilities().get(grace ? 0 : 1).getCParameters()
81 .getAs4BytesCapability());
82 assertEquals(open.getBgpParameters().get(0).getOptionalCapabilities().get(0).getCParameters()
83 .augmentation(CParameters1.class).getGracefulRestartCapability(),
84 openResult.getBgpParameters().get(0).getOptionalCapabilities().get(grace ? 1 : 0).getCParameters()
85 .augmentation(CParameters1.class).getGracefulRestartCapability());
90 public void testSerializeLongOpen() throws BGPDocumentedException {
91 final List<OptionalCapabilities> capabilities = new ArrayList<>();
92 for (int i = 0; i < 200; ++i) {
93 capabilities.add(new OptionalCapabilitiesBuilder()
94 .setCParameters(new CParametersBuilder()
95 .setAs4BytesCapability(new As4BytesCapabilityBuilder()
96 .setAsNumber(new AsNumber(Uint32.valueOf(1000))).build())
101 final Open open = new OpenBuilder()
102 .setBgpIdentifier(new Ipv4Address("127.0.0.1"))
103 .setMyAsNumber(Uint16.valueOf(30))
104 .setHoldTimer(Uint16.valueOf(3))
105 .setVersion(new ProtocolVersion(Uint8.valueOf(4)))
106 .setBgpParameters(ImmutableList.of(
107 new BgpParametersBuilder().setOptionalCapabilities(capabilities).build()))
110 final ByteBuf msg = Unpooled.buffer();
111 new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getParameterRegistry())
112 .serializeMessage(open, msg);
114 assertEquals(1235, msg.readableBytes());
116 final byte[] temp = ByteArray.cutBytes(ByteArray.getAllBytes(msg), 19);
117 final Open openResult = new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance()
118 .getParameterRegistry()).parseMessageBody(Unpooled.copiedBuffer(temp), temp.length, null);
120 assertEquals(200, openResult.getBgpParameters().get(0).getOptionalCapabilities().size());