Clean up List-related warnings in bgp-parser-impl tests
[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 package org.opendaylight.protocol.bgp.parser.impl;
9
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.Unpooled;
15 import java.util.Collections;
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.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
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.GracefulRestartCapability.RestartFlags;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapabilityBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables.AfiFlags;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
33 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
34 import org.opendaylight.yangtools.yang.common.Uint16;
35
36 public class GracefulCapabilityHandlerTest {
37
38     private BGPExtensionProviderContext ctx;
39
40     @Before
41     public void setUp() {
42         this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
43     }
44
45     @Test
46     public void testGracefulCapabilityHandler() throws BGPDocumentedException, BGPParsingException {
47         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(
48             this.ctx.getAddressFamilyRegistry(),this.ctx.getSubsequentAddressFamilyRegistry());
49
50         final byte[] capaBytes = {
51             (byte) 0x40, (byte) 0x06, (byte) 0x81, (byte) 0xf4,
52             (byte) 0x00, (byte) 0x01, (byte) 0x01, (byte) 0x80
53         };
54
55         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder()
56                 .setRestartFlags(new RestartFlags(true))
57                 .setRestartTime(Uint16.valueOf(500));
58         final TablesBuilder tablesBuilder = new TablesBuilder()
59                 .setAfiFlags(new AfiFlags(true))
60                 .setAfi(Ipv4AddressFamily.class)
61                 .setSafi(UnicastSubsequentAddressFamily.class);
62         capaBuilder.setTables(BindingMap.of(tablesBuilder.build()));
63
64         final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
65         handler.serializeCapability(new CParametersBuilder()
66             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
67             .build(), buffer);
68         assertArrayEquals(capaBytes, buffer.array());
69
70         assertEquals(new CParametersBuilder()
71             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
72             .build(), handler.parseCapability(Unpooled.wrappedBuffer(capaBytes).slice(2, capaBytes.length - 2)));
73
74         final byte[] capaBytes2 = {
75             (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
76             (byte) 0x00, (byte) 0x01, (byte) 0x01, (byte) 0x00
77         };
78         capaBuilder.setRestartFlags(new RestartFlags(false));
79         capaBuilder.setRestartTime(Uint16.ZERO);
80         tablesBuilder.setAfiFlags(new AfiFlags(false));
81         capaBuilder.setTables(BindingMap.of(tablesBuilder.build()));
82         buffer.clear();
83         handler.serializeCapability(new CParametersBuilder()
84             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
85             .build(), buffer);
86         assertArrayEquals(capaBytes2, buffer.array());
87         assertEquals(new CParametersBuilder()
88             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
89             .build(), handler.parseCapability(Unpooled.wrappedBuffer(capaBytes2).slice(2, capaBytes2.length - 2)));
90
91         capaBuilder.setRestartFlags(null);
92         tablesBuilder.setAfiFlags(null);
93         capaBuilder.setRestartTime((Uint16) null);
94         capaBuilder.setTables(BindingMap.of(tablesBuilder.build()));
95         buffer.clear();
96         handler.serializeCapability(new CParametersBuilder()
97             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
98             .build(), buffer);
99         assertArrayEquals(capaBytes2, buffer.array());
100
101         final byte[] capaBytes3 = {
102             (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
103             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
104         };
105         capaBuilder.setRestartFlags(new RestartFlags(false));
106         capaBuilder.setRestartTime(Uint16.ZERO);
107         capaBuilder.setTables(Collections.emptyMap());
108         assertEquals(new CParametersBuilder()
109             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
110             .build(), handler.parseCapability(Unpooled.wrappedBuffer(capaBytes3).slice(2, capaBytes3.length - 2)));
111
112         final byte[] capaBytes4 = {
113             (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
114             (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00
115         };
116         assertEquals(new CParametersBuilder()
117             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
118             .build(), handler.parseCapability(Unpooled.wrappedBuffer(capaBytes4).slice(2, capaBytes4.length - 2)));
119         final byte[] capaBytes5 = {
120             (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0x00
121         };
122         final ByteBuf b = Unpooled.buffer(capaBytes5.length);
123
124         handler.serializeCapability(new CParametersBuilder()
125             .addAugmentation(new CParameters1Builder()
126                 .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build())
127                 .build())
128             .build(), b);
129         assertArrayEquals(capaBytes5, b.array());
130         assertEquals(new CParametersBuilder()
131             .addAugmentation(new CParameters1Builder()
132                 .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder()
133                     .setRestartFlags(new RestartFlags(Boolean.FALSE))
134                     .setRestartTime(Uint16.ZERO)
135                     .build())
136                 .build())
137             .build(), handler.parseCapability(Unpooled.wrappedBuffer(capaBytes5).slice(2, capaBytes5.length - 2)));
138     }
139
140     @Test(expected = IllegalArgumentException.class)
141     public void testUnhandledAfi() {
142         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
143             this.ctx.getSubsequentAddressFamilyRegistry());
144
145         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
146         capaBuilder.setRestartFlags(new RestartFlags(true));
147         capaBuilder.setRestartTime(Uint16.valueOf(50));
148         final TablesBuilder tablesBuilder = new TablesBuilder();
149         tablesBuilder.setAfiFlags(new AfiFlags(true));
150
151         tablesBuilder.setAfi(AddressFamily.class);
152         tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class);
153         capaBuilder.setTables(BindingMap.of(tablesBuilder.build()));
154
155         final ByteBuf buffer = Unpooled.buffer();
156         handler.serializeCapability(new CParametersBuilder()
157             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
158             .build(), buffer);
159     }
160
161     @Test(expected = IllegalArgumentException.class)
162     public void testUnhandledSafi() {
163         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
164             this.ctx.getSubsequentAddressFamilyRegistry());
165
166         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder();
167         capaBuilder.setRestartFlags(new RestartFlags(true));
168         capaBuilder.setRestartTime(Uint16.valueOf(50));
169         final TablesBuilder tablesBuilder = new TablesBuilder();
170         tablesBuilder.setAfiFlags(new AfiFlags(true));
171         tablesBuilder.setAfi(Ipv4AddressFamily.class);
172         tablesBuilder.setSafi(SubsequentAddressFamily.class);
173         capaBuilder.setTables(BindingMap.of(tablesBuilder.build()));
174
175         final ByteBuf buffer = Unpooled.buffer();
176         handler.serializeCapability(new CParametersBuilder()
177             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
178             .build(), buffer);
179     }
180
181     @Test(expected = IllegalArgumentException.class)
182     public void testRestartTimeMinValue() {
183         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
184             this.ctx.getSubsequentAddressFamilyRegistry());
185
186         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder()
187                 .setRestartFlags(new RestartFlags(true))
188                 // FIXME: this is throwing IAE, why is the rest of the test even here?
189                 .setRestartTime(Uint16.MAX_VALUE)
190                 .setTables(BindingMap.of(new TablesBuilder()
191                     .setAfiFlags(new AfiFlags(true))
192                     .setAfi(Ipv4AddressFamily.class)
193                     .setSafi(UnicastSubsequentAddressFamily.class)
194                     .build()));
195
196         final ByteBuf buffer = Unpooled.buffer();
197         handler.serializeCapability(new CParametersBuilder()
198             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
199             .build(), buffer);
200     }
201
202     @Test(expected = IllegalArgumentException.class)
203     public void testRestartTimeMaxValue() {
204         final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(),
205             this.ctx.getSubsequentAddressFamilyRegistry());
206
207         final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder()
208                 .setRestartFlags(new RestartFlags(true))
209                 .setRestartTime(Uint16.valueOf(50000));
210
211         capaBuilder.setTables(BindingMap.of(new TablesBuilder()
212             .setAfiFlags(new AfiFlags(true))
213             .setAfi(Ipv4AddressFamily.class)
214             .setSafi(UnicastSubsequentAddressFamily.class)
215             .build()));
216
217         final ByteBuf buffer = Unpooled.buffer();
218         handler.serializeCapability(new CParametersBuilder()
219             .addAugmentation(new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build())
220             .build(), buffer);
221     }
222 }