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;
35 public class LlGracefulCapabilityHandlerTest {
37 private LlGracefulCapabilityHandler handler;
41 final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
42 this.handler = new LlGracefulCapabilityHandler(
43 ctx.getAddressFamilyRegistry(), ctx.getSubsequentAddressFamilyRegistry());
47 public void testLongLivedGracefulCapabilityHandler() throws BGPParsingException, BGPDocumentedException {
49 final byte[] capaBytes = {
51 (byte) 0x47, (byte) 0x0e,
52 // Ipv4 Unicast, afiFlags = false, timer = 10
53 (byte) 0x00, (byte) 0x01, (byte) 0x01,
54 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0a,
55 // Ipv6 Unicast, afiFlags = true, timer = 160
56 (byte) 0x00, (byte) 0x02, (byte) 0x01,
57 (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0xa0
60 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
61 .setTables(Arrays.asList(new TablesBuilder()
62 .setAfi(Ipv4AddressFamily.class)
63 .setSafi(UnicastSubsequentAddressFamily.class)
64 .setAfiFlags(new Tables.AfiFlags(false))
65 .setLongLivedStaleTime(10L)
68 .setAfi(Ipv6AddressFamily.class)
69 .setSafi(UnicastSubsequentAddressFamily.class)
70 .setAfiFlags(new Tables.AfiFlags(true))
71 .setLongLivedStaleTime(160L)
75 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
76 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
77 final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
78 this.handler.serializeCapability(cParameters, buffer);
80 Assert.assertArrayEquals(capaBytes, buffer.array());
81 Assert.assertEquals(cParameters, this.handler.parseCapability(Unpooled.wrappedBuffer(capaBytes)
82 .slice(2, capaBytes.length - 2)));
85 @Test(expected = IllegalArgumentException.class)
86 public void testUnsupportedAfi() {
87 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
88 .setTables(Arrays.asList(new TablesBuilder()
89 .setAfi(AddressFamily.class)
90 .setSafi(UnicastSubsequentAddressFamily.class)
91 .setAfiFlags(new Tables.AfiFlags(false))
92 .setLongLivedStaleTime(10L)
95 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
96 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
97 final ByteBuf buffer = Unpooled.buffer();
98 this.handler.serializeCapability(cParameters, buffer);
101 @Test(expected = IllegalArgumentException.class)
102 public void testUnsupportedSafi() {
103 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
104 .setTables(Arrays.asList(new TablesBuilder()
105 .setAfi(Ipv4AddressFamily.class)
106 .setSafi(SubsequentAddressFamily.class)
107 .setAfiFlags(new Tables.AfiFlags(false))
108 .setLongLivedStaleTime(10L)
111 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
112 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
113 final ByteBuf buffer = Unpooled.buffer();
114 this.handler.serializeCapability(cParameters, buffer);
117 @Test(expected = IllegalArgumentException.class)
118 public void testMinStaleTime() {
119 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
120 .setTables(Arrays.asList(new TablesBuilder()
121 .setAfi(Ipv4AddressFamily.class)
122 .setSafi(UnicastSubsequentAddressFamily.class)
123 .setAfiFlags(new Tables.AfiFlags(false))
124 .setLongLivedStaleTime(-1L)
127 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
128 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
129 final ByteBuf buffer = Unpooled.buffer();
130 this.handler.serializeCapability(cParameters, buffer);
133 @Test(expected = IllegalArgumentException.class)
134 public void testMaxStaleTime() {
136 final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
137 .setTables(Arrays.asList(new TablesBuilder()
138 .setAfi(Ipv4AddressFamily.class)
139 .setSafi(UnicastSubsequentAddressFamily.class)
140 .setAfiFlags(new Tables.AfiFlags(false))
141 .setLongLivedStaleTime(16777216L)
144 final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
145 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
146 final ByteBuf buffer = Unpooled.buffer();
147 this.handler.serializeCapability(cParameters, buffer);