2 * Copyright (c) 2018 AT&T Intellectual Property. 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 io.netty.buffer.ByteBuf;
11 import io.netty.buffer.Unpooled;
12 import java.util.Arrays;
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
17 import org.opendaylight.protocol.bgp.parser.BGPParsingException;
18 import org.opendaylight.protocol.bgp.parser.impl.message.open.LlGracefulCapabilityHandler;
19 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
20 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParameters;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapability;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapabilityBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.Tables;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.SubsequentAddressFamily;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
35 import org.opendaylight.yangtools.yang.common.Uint32;
37 public class LlGracefulCapabilityHandlerTest {
38 private static final Uint24 TEN = new Uint24(Uint32.TEN);
40 private LlGracefulCapabilityHandler handler;
44 final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
45 this.handler = new LlGracefulCapabilityHandler(
46 ctx.getAddressFamilyRegistry(), ctx.getSubsequentAddressFamilyRegistry());
50 public void testLongLivedGracefulCapabilityHandler() throws BGPParsingException, BGPDocumentedException {
52 final byte[] capaBytes = {
54 (byte) 0x47, (byte) 0x0e,
55 // Ipv4 Unicast, afiFlags = false, timer = 10
56 (byte) 0x00, (byte) 0x01, (byte) 0x01,
57 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0a,
58 // Ipv6 Unicast, afiFlags = true, timer = 160
59 (byte) 0x00, (byte) 0x02, (byte) 0x01,
60 (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0xa0
63 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
64 .setTables(Arrays.asList(new TablesBuilder()
65 .setAfi(Ipv4AddressFamily.class)
66 .setSafi(UnicastSubsequentAddressFamily.class)
67 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
68 .setLongLivedStaleTime(TEN)
71 .setAfi(Ipv6AddressFamily.class)
72 .setSafi(UnicastSubsequentAddressFamily.class)
73 .setAfiFlags(new Tables.AfiFlags(Boolean.TRUE))
74 .setLongLivedStaleTime(new Uint24(Uint32.valueOf(160)))
78 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
79 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
80 final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
81 this.handler.serializeCapability(cParameters, buffer);
83 Assert.assertArrayEquals(capaBytes, buffer.array());
84 Assert.assertEquals(cParameters, this.handler.parseCapability(Unpooled.wrappedBuffer(capaBytes)
85 .slice(2, capaBytes.length - 2)));
88 @Test(expected = IllegalArgumentException.class)
89 public void testUnsupportedAfi() {
90 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
91 .setTables(Arrays.asList(new TablesBuilder()
92 .setAfi(AddressFamily.class)
93 .setSafi(UnicastSubsequentAddressFamily.class)
94 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
95 .setLongLivedStaleTime(TEN)
98 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
99 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
100 final ByteBuf buffer = Unpooled.buffer();
101 this.handler.serializeCapability(cParameters, buffer);
104 @Test(expected = IllegalArgumentException.class)
105 public void testUnsupportedSafi() {
106 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
107 .setTables(Arrays.asList(new TablesBuilder()
108 .setAfi(Ipv4AddressFamily.class)
109 .setSafi(SubsequentAddressFamily.class)
110 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
111 .setLongLivedStaleTime(TEN)
114 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
115 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
116 final ByteBuf buffer = Unpooled.buffer();
117 this.handler.serializeCapability(cParameters, buffer);