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.impl;
11 import com.google.common.collect.Lists;
12 import io.netty.buffer.ByteBuf;
13 import io.netty.buffer.Unpooled;
14 import java.util.Collections;
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
19 import org.opendaylight.protocol.bgp.parser.BGPParsingException;
20 import org.opendaylight.protocol.bgp.parser.impl.message.open.GracefulCapabilityHandler;
21 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
22 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability.RestartFlags;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables.AfiFlags;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.TablesBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
34 public class GracefulCapabilityHandlerTest {
36 private BGPExtensionProviderContext ctx;
40 this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
44 public void testGracefulCapabilityHandler() throws BGPDocumentedException, BGPParsingException {
45 final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
46 this.ctx.getSubsequentAddressFamilyRegistry());
48 final byte[] capaBytes = {
49 (byte) 0x40, (byte) 0x06, (byte) 0x80, (byte) 0x32,
50 (byte) 0x00, (byte) 0x01, (byte) 0x01, (byte) 0x80
53 final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
54 capaBuilder.setRestartFlags(new RestartFlags(true));
55 capaBuilder.setRestartTime(50);
56 final TablesBuilder tablesBuilder = new TablesBuilder();
57 tablesBuilder.setAfiFlags(new AfiFlags(true));
58 tablesBuilder.setAfi(Ipv4AddressFamily.class);
59 tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
60 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
62 final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
63 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);
64 Assert.assertArrayEquals(capaBytes, buffer.array());
66 Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(),
67 handler.parseCapability(Unpooled.wrappedBuffer(capaBytes).slice(2, capaBytes.length - 2)));
69 final byte[] capaBytes2 = {
70 (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
71 (byte) 0x00, (byte) 0x01, (byte) 0x01, (byte) 0x00
73 capaBuilder.setRestartFlags(new RestartFlags(false));
74 capaBuilder.setRestartTime(0);
75 tablesBuilder.setAfiFlags(new AfiFlags(false));
76 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
78 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);
79 Assert.assertArrayEquals(capaBytes2, buffer.array());
80 Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(),
81 handler.parseCapability(Unpooled.wrappedBuffer(capaBytes2).slice(2, capaBytes2.length - 2)));
83 capaBuilder.setRestartFlags(null);
84 tablesBuilder.setAfiFlags(null);
85 capaBuilder.setRestartTime(null);
86 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
88 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);
89 Assert.assertArrayEquals(capaBytes2, buffer.array());
91 final byte[] capaBytes3 = {
92 (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
93 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
95 capaBuilder.setRestartFlags(new RestartFlags(false));
96 capaBuilder.setRestartTime(0);
97 capaBuilder.setTables(Collections.<Tables>emptyList());
98 Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(),
99 handler.parseCapability(Unpooled.wrappedBuffer(capaBytes3).slice(2, capaBytes3.length - 2)));
101 final byte[] capaBytes4 = {
102 (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
103 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00
105 Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(),
106 handler.parseCapability(Unpooled.wrappedBuffer(capaBytes4).slice(2, capaBytes4.length - 2)));
107 final byte[] capaBytes5 = {
108 (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0x00
110 final ByteBuf b = Unpooled.buffer(capaBytes5.length);
111 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build(), b);
112 Assert.assertArrayEquals(capaBytes5, b.array());
113 Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(
114 new GracefulRestartCapabilityBuilder().setRestartFlags(new RestartFlags(Boolean.FALSE)).setRestartTime(0).setTables(Collections.<Tables> emptyList()).build()).build(),
115 handler.parseCapability(Unpooled.wrappedBuffer(capaBytes5).slice(2, capaBytes5.length - 2)));
118 @Test(expected=IllegalArgumentException.class)
119 public void testUnhandledAfi() {
120 final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
121 this.ctx.getSubsequentAddressFamilyRegistry());
123 final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
124 capaBuilder.setRestartFlags(new RestartFlags(true));
125 capaBuilder.setRestartTime(50);
126 final TablesBuilder tablesBuilder = new TablesBuilder();
127 tablesBuilder.setAfiFlags(new AfiFlags(true));
128 tablesBuilder.setAfi(AddressFamily.class);
129 tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
130 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
132 final ByteBuf buffer = Unpooled.buffer();
133 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);
136 @Test(expected=IllegalArgumentException.class)
137 public void testUnhandledSafi() {
138 final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
139 this.ctx.getSubsequentAddressFamilyRegistry());
141 final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
142 capaBuilder.setRestartFlags(new RestartFlags(true));
143 capaBuilder.setRestartTime(50);
144 final TablesBuilder tablesBuilder = new TablesBuilder();
145 tablesBuilder.setAfiFlags(new AfiFlags(true));
146 tablesBuilder.setAfi(Ipv4AddressFamily.class);
147 tablesBuilder.setSafi(SubsequentAddressFamily.class);
148 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
150 final ByteBuf buffer = Unpooled.buffer();
151 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);
154 @Test(expected=IllegalArgumentException.class)
155 public void testRestartTimeMinValue() {
156 final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
157 this.ctx.getSubsequentAddressFamilyRegistry());
159 final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
160 capaBuilder.setRestartFlags(new RestartFlags(true));
161 capaBuilder.setRestartTime(-1);
162 final TablesBuilder tablesBuilder = new TablesBuilder();
163 tablesBuilder.setAfiFlags(new AfiFlags(true));
164 tablesBuilder.setAfi(Ipv4AddressFamily.class);
165 tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
166 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
168 final ByteBuf buffer = Unpooled.buffer();
169 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);
172 @Test(expected=IllegalArgumentException.class)
173 public void testRestartTimeMaxValue() {
174 final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
175 this.ctx.getSubsequentAddressFamilyRegistry());
177 final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
178 capaBuilder.setRestartFlags(new RestartFlags(true));
179 capaBuilder.setRestartTime(50 * 1000);
180 final TablesBuilder tablesBuilder = new TablesBuilder();
181 tablesBuilder.setAfiFlags(new AfiFlags(true));
182 tablesBuilder.setAfi(Ipv4AddressFamily.class);
183 tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
184 capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
186 final ByteBuf buffer = Unpooled.buffer();
187 handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer);