Fix most bgp-parser-impl checkstyle
[bgpcep.git] / bgp / parser-impl / src / test / java / org / opendaylight / protocol / bgp / parser / impl / GracefulCapabilityHandlerTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.protocol.bgp.parser.impl;
10
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.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability.RestartFlags;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapabilityBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables.AfiFlags;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
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
35 public class GracefulCapabilityHandlerTest {
36
37     private BGPExtensionProviderContext ctx;
38
39     @Before
40     public void setUp() {
41         this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
42     }
43
44     @Test
45     public void testGracefulCapabilityHandler() throws BGPDocumentedException, BGPParsingException {
46         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(
47             this.ctx.getAddressFamilyRegistry(),this.ctx.getSubsequentAddressFamilyRegistry());
48
49         final byte[] capaBytes = {
50             (byte) 0x40, (byte) 0x06, (byte) 0x81, (byte) 0xf4,
51             (byte) 0x00, (byte) 0x01, (byte) 0x01, (byte) 0x80
52         };
53
54         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
55         capaBuilder.setRestartFlags(new RestartFlags(true));
56         capaBuilder.setRestartTime(500);
57         final TablesBuilder tablesBuilder = new TablesBuilder();
58         tablesBuilder.setAfiFlags(new AfiFlags(true));
59         tablesBuilder.setAfi(Ipv4AddressFamily.class);
60         tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
61         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
62
63         final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
64         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
65             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
66         Assert.assertArrayEquals(capaBytes, buffer.array());
67
68         Assert.assertEquals(new CParametersBuilder().addAugmentation(CParameters1.class,
69             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(),
70             handler.parseCapability(Unpooled.wrappedBuffer(capaBytes).slice(2, capaBytes.length - 2)));
71
72         final byte[] capaBytes2 = {
73             (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
74             (byte) 0x00, (byte) 0x01, (byte) 0x01, (byte) 0x00
75         };
76         capaBuilder.setRestartFlags(new RestartFlags(false));
77         capaBuilder.setRestartTime(0);
78         tablesBuilder.setAfiFlags(new AfiFlags(false));
79         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
80         buffer.clear();
81         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
82             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
83         Assert.assertArrayEquals(capaBytes2, buffer.array());
84         Assert.assertEquals(new CParametersBuilder().addAugmentation(CParameters1.class,
85             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(),
86             handler.parseCapability(Unpooled.wrappedBuffer(capaBytes2).slice(2, capaBytes2.length - 2)));
87
88         capaBuilder.setRestartFlags(null);
89         tablesBuilder.setAfiFlags(null);
90         capaBuilder.setRestartTime(null);
91         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
92         buffer.clear();
93         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
94             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
95         Assert.assertArrayEquals(capaBytes2, buffer.array());
96
97         final byte[] capaBytes3 = {
98             (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
99             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
100         };
101         capaBuilder.setRestartFlags(new RestartFlags(false));
102         capaBuilder.setRestartTime(0);
103         capaBuilder.setTables(Collections.emptyList());
104         Assert.assertEquals(new CParametersBuilder().addAugmentation(CParameters1.class,
105             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(),
106             handler.parseCapability(Unpooled.wrappedBuffer(capaBytes3).slice(2, capaBytes3.length - 2)));
107
108         final byte[] capaBytes4 = {
109             (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
110             (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00
111         };
112         Assert.assertEquals(new CParametersBuilder().addAugmentation(CParameters1.class,
113             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(),
114             handler.parseCapability(Unpooled.wrappedBuffer(capaBytes4).slice(2, capaBytes4.length - 2)));
115         final byte[] capaBytes5 = {
116             (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0x00
117         };
118         final ByteBuf b = Unpooled.buffer(capaBytes5.length);
119
120         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
121             new CParameters1Builder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build())
122             .build()).build(), b);
123         Assert.assertArrayEquals(capaBytes5, b.array());
124         Assert.assertEquals(new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder()
125             .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder()
126                 .setRestartFlags(new RestartFlags(Boolean.FALSE))
127                 .setRestartTime(0).setTables(Collections.emptyList()).build()).build()).build(),
128             handler.parseCapability(Unpooled.wrappedBuffer(capaBytes5).slice(2, capaBytes5.length - 2)));
129     }
130
131     @Test(expected = IllegalArgumentException.class)
132     public void testUnhandledAfi() {
133         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
134             this.ctx.getSubsequentAddressFamilyRegistry());
135
136         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
137         capaBuilder.setRestartFlags(new RestartFlags(true));
138         capaBuilder.setRestartTime(50);
139         final TablesBuilder tablesBuilder = new TablesBuilder();
140         tablesBuilder.setAfiFlags(new AfiFlags(true));
141
142         tablesBuilder.setAfi(AddressFamily.class);
143         tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
144         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
145
146         final ByteBuf buffer = Unpooled.buffer();
147         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
148             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
149     }
150
151     @Test(expected = IllegalArgumentException.class)
152     public void testUnhandledSafi() {
153         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
154             this.ctx.getSubsequentAddressFamilyRegistry());
155
156         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
157         capaBuilder.setRestartFlags(new RestartFlags(true));
158         capaBuilder.setRestartTime(50);
159         final TablesBuilder tablesBuilder = new TablesBuilder();
160         tablesBuilder.setAfiFlags(new AfiFlags(true));
161         tablesBuilder.setAfi(Ipv4AddressFamily.class);
162         tablesBuilder.setSafi(SubsequentAddressFamily.class);
163         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
164
165         final ByteBuf buffer = Unpooled.buffer();
166         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
167             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
168     }
169
170     @Test(expected = IllegalArgumentException.class)
171     public void testRestartTimeMinValue() {
172         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
173             this.ctx.getSubsequentAddressFamilyRegistry());
174
175         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
176         capaBuilder.setRestartFlags(new RestartFlags(true));
177         capaBuilder.setRestartTime(-1);
178         final TablesBuilder tablesBuilder = new TablesBuilder();
179         tablesBuilder.setAfiFlags(new AfiFlags(true));
180         tablesBuilder.setAfi(Ipv4AddressFamily.class);
181         tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
182         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
183
184         final ByteBuf buffer = Unpooled.buffer();
185         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
186             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
187     }
188
189     @Test(expected = IllegalArgumentException.class)
190     public void testRestartTimeMaxValue() {
191         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
192             this.ctx.getSubsequentAddressFamilyRegistry());
193
194         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
195         capaBuilder.setRestartFlags(new RestartFlags(true));
196         capaBuilder.setRestartTime(50 * 1000);
197         final TablesBuilder tablesBuilder = new TablesBuilder();
198         tablesBuilder.setAfiFlags(new AfiFlags(true));
199         tablesBuilder.setAfi(Ipv4AddressFamily.class);
200         tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
201         capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build()));
202
203         final ByteBuf buffer = Unpooled.buffer();
204         handler.serializeCapability(new CParametersBuilder().addAugmentation(CParameters1.class,
205             new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer);
206     }
207 }