Use new Uint* constants
[bgpcep.git] / bgp / parser-impl / src / test / java / org / opendaylight / protocol / bgp / parser / impl / LlGracefulCapabilityHandlerTest.java
1 /*
2  * Copyright (c) 2018 AT&T Intellectual Property. 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 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;
35
36 public class LlGracefulCapabilityHandlerTest {
37
38     private LlGracefulCapabilityHandler handler;
39
40     @Before
41     public void setUp() {
42         final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
43         this.handler = new LlGracefulCapabilityHandler(
44                 ctx.getAddressFamilyRegistry(), ctx.getSubsequentAddressFamilyRegistry());
45     }
46
47     @Test
48     public void testLongLivedGracefulCapabilityHandler() throws BGPParsingException, BGPDocumentedException {
49
50         final byte[] capaBytes = {
51             //header
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
59         };
60
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)
67                                 .build(),
68                         new TablesBuilder()
69                                 .setAfi(Ipv6AddressFamily.class)
70                                 .setSafi(UnicastSubsequentAddressFamily.class)
71                                 .setAfiFlags(new Tables.AfiFlags(Boolean.TRUE))
72                                 .setLongLivedStaleTime(Uint32.valueOf(160))
73                                 .build())
74                 ).build();
75
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);
80
81         Assert.assertArrayEquals(capaBytes, buffer.array());
82         Assert.assertEquals(cParameters, this.handler.parseCapability(Unpooled.wrappedBuffer(capaBytes)
83                 .slice(2, capaBytes.length - 2)));
84     }
85
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)
94                                 .build())).build();
95
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);
100     }
101
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)
110                         .build())).build();
111
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);
116     }
117
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)
127                                 .build())).build();
128
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);
133     }
134
135     @Test(expected = IllegalArgumentException.class)
136     public void testMaxStaleTime() {
137
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))
144                         .build())).build();
145
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);
150     }
151 }