Fix ll graceful-restart-config
[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
35 public class LlGracefulCapabilityHandlerTest {
36
37     private LlGracefulCapabilityHandler handler;
38
39     @Before
40     public void setUp() {
41         final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
42         this.handler = new LlGracefulCapabilityHandler(
43                 ctx.getAddressFamilyRegistry(), ctx.getSubsequentAddressFamilyRegistry());
44     }
45
46     @Test
47     public void testLongLivedGracefulCapabilityHandler() throws BGPParsingException, BGPDocumentedException {
48
49         final byte[] capaBytes = {
50             //header
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
58         };
59
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)
66                                 .build(),
67                         new TablesBuilder()
68                                 .setAfi(Ipv6AddressFamily.class)
69                                 .setSafi(UnicastSubsequentAddressFamily.class)
70                                 .setAfiFlags(new Tables.AfiFlags(true))
71                                 .setLongLivedStaleTime(160L)
72                                 .build())
73                 ).build();
74
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);
79
80         Assert.assertArrayEquals(capaBytes, buffer.array());
81         Assert.assertEquals(cParameters, this.handler.parseCapability(Unpooled.wrappedBuffer(capaBytes)
82                 .slice(2, capaBytes.length - 2)));
83     }
84
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)
93                                 .build())).build();
94
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);
99     }
100
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)
109                         .build())).build();
110
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);
115     }
116
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)
125                                 .build())).build();
126
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);
131     }
132
133     @Test(expected = IllegalArgumentException.class)
134     public void testMaxStaleTime() {
135
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)
142                         .build())).build();
143
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);
148     }
149 }