2b2b2ae3ffd10e62fa9ce5b42aa6ba5fdc86aa32
[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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
35 import org.opendaylight.yangtools.yang.common.Uint32;
36
37 public class LlGracefulCapabilityHandlerTest {
38     private static final Uint24 TEN = new Uint24(Uint32.TEN);
39
40     private LlGracefulCapabilityHandler handler;
41
42     @Before
43     public void setUp() {
44         final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
45         this.handler = new LlGracefulCapabilityHandler(
46                 ctx.getAddressFamilyRegistry(), ctx.getSubsequentAddressFamilyRegistry());
47     }
48
49     @Test
50     public void testLongLivedGracefulCapabilityHandler() throws BGPParsingException, BGPDocumentedException {
51
52         final byte[] capaBytes = {
53             //header
54             (byte) 0x47, (byte) 0x0e,
55             // Ipv4 Unicast, afiFlags = false, timer = 10
56             (byte) 0x00, (byte) 0x01, (byte) 0x01,
57             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0a,
58             // Ipv6 Unicast, afiFlags = true, timer = 160
59             (byte) 0x00, (byte) 0x02, (byte) 0x01,
60             (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0xa0
61         };
62
63         final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
64                 .setTables(Arrays.asList(new TablesBuilder()
65                                 .setAfi(Ipv4AddressFamily.class)
66                                 .setSafi(UnicastSubsequentAddressFamily.class)
67                                 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
68                                 .setLongLivedStaleTime(TEN)
69                                 .build(),
70                         new TablesBuilder()
71                                 .setAfi(Ipv6AddressFamily.class)
72                                 .setSafi(UnicastSubsequentAddressFamily.class)
73                                 .setAfiFlags(new Tables.AfiFlags(Boolean.TRUE))
74                                 .setLongLivedStaleTime(new Uint24(Uint32.valueOf(160)))
75                                 .build())
76                 ).build();
77
78         final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
79                 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
80         final ByteBuf buffer = Unpooled.buffer(capaBytes.length);
81         this.handler.serializeCapability(cParameters, buffer);
82
83         Assert.assertArrayEquals(capaBytes, buffer.array());
84         Assert.assertEquals(cParameters, this.handler.parseCapability(Unpooled.wrappedBuffer(capaBytes)
85                 .slice(2, capaBytes.length - 2)));
86     }
87
88     @Test(expected = IllegalArgumentException.class)
89     public void testUnsupportedAfi() {
90         final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
91                 .setTables(Arrays.asList(new TablesBuilder()
92                                 .setAfi(AddressFamily.class)
93                                 .setSafi(UnicastSubsequentAddressFamily.class)
94                                 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
95                                 .setLongLivedStaleTime(TEN)
96                                 .build())).build();
97
98         final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
99                 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
100         final ByteBuf buffer = Unpooled.buffer();
101         this.handler.serializeCapability(cParameters, buffer);
102     }
103
104     @Test(expected = IllegalArgumentException.class)
105     public void testUnsupportedSafi() {
106         final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
107                 .setTables(Arrays.asList(new TablesBuilder()
108                         .setAfi(Ipv4AddressFamily.class)
109                         .setSafi(SubsequentAddressFamily.class)
110                         .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
111                         .setLongLivedStaleTime(TEN)
112                         .build())).build();
113
114         final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
115                 new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
116         final ByteBuf buffer = Unpooled.buffer();
117         this.handler.serializeCapability(cParameters, buffer);
118     }
119 }