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.yangtools.yang.common.Uint32;
36 public class LlGracefulCapabilityHandlerTest {
38 private LlGracefulCapabilityHandler handler;
42 final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
43 this.handler = new LlGracefulCapabilityHandler(
44 ctx.getAddressFamilyRegistry(), ctx.getSubsequentAddressFamilyRegistry());
48 public void testLongLivedGracefulCapabilityHandler() throws BGPParsingException, BGPDocumentedException {
50 final byte[] capaBytes = {
52 (byte) 0x47, (byte) 0x0e,
53 // Ipv4 Unicast, afiFlags = false, timer = 10
54 (byte) 0x00, (byte) 0x01, (byte) 0x01,
55 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0a,
56 // Ipv6 Unicast, afiFlags = true, timer = 160
57 (byte) 0x00, (byte) 0x02, (byte) 0x01,
58 (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0xa0
61 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
62 .setTables(Arrays.asList(new TablesBuilder()
63 .setAfi(Ipv4AddressFamily.class)
64 .setSafi(UnicastSubsequentAddressFamily.class)
65 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
66 .setLongLivedStaleTime(Uint32.TEN)
69 .setAfi(Ipv6AddressFamily.class)
70 .setSafi(UnicastSubsequentAddressFamily.class)
71 .setAfiFlags(new Tables.AfiFlags(Boolean.TRUE))
72 .setLongLivedStaleTime(Uint32.valueOf(160))
76 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
77 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
78 final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
79 this.handler.serializeCapability(cParameters, buffer);
81 Assert.assertArrayEquals(capaBytes, buffer.array());
82 Assert.assertEquals(cParameters, this.handler.parseCapability(Unpooled.wrappedBuffer(capaBytes)
83 .slice(2, capaBytes.length - 2)));
86 @Test(expected = IllegalArgumentException.class)
87 public void testUnsupportedAfi() {
88 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
89 .setTables(Arrays.asList(new TablesBuilder()
90 .setAfi(AddressFamily.class)
91 .setSafi(UnicastSubsequentAddressFamily.class)
92 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
93 .setLongLivedStaleTime(Uint32.TEN)
96 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
97 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
98 final ByteBuf buffer = Unpooled.buffer();
99 this.handler.serializeCapability(cParameters, buffer);
102 @Test(expected = IllegalArgumentException.class)
103 public void testUnsupportedSafi() {
104 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
105 .setTables(Arrays.asList(new TablesBuilder()
106 .setAfi(Ipv4AddressFamily.class)
107 .setSafi(SubsequentAddressFamily.class)
108 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
109 .setLongLivedStaleTime(Uint32.TEN)
112 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
113 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
114 final ByteBuf buffer = Unpooled.buffer();
115 this.handler.serializeCapability(cParameters, buffer);
118 @Test(expected = IllegalArgumentException.class)
119 public void testMinStaleTime() {
120 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
121 .setTables(Arrays.asList(new TablesBuilder()
122 .setAfi(Ipv4AddressFamily.class)
123 .setSafi(UnicastSubsequentAddressFamily.class)
124 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
125 // FIXME: this is throwing IAE, why is the rest of the test even here?
126 .setLongLivedStaleTime(Uint32.MAX_VALUE)
129 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
130 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
131 final ByteBuf buffer = Unpooled.buffer();
132 this.handler.serializeCapability(cParameters, buffer);
135 @Test(expected = IllegalArgumentException.class)
136 public void testMaxStaleTime() {
138 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
139 .setTables(Arrays.asList(new TablesBuilder()
140 .setAfi(Ipv4AddressFamily.class)
141 .setSafi(UnicastSubsequentAddressFamily.class)
142 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
143 .setLongLivedStaleTime(Uint32.valueOf(16777216L))
146 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
147 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
148 final ByteBuf buffer = Unpooled.buffer();
149 this.handler.serializeCapability(cParameters, buffer);