18bcf6a40738f39ef9d24779c4bec830568f3500
[bgpcep.git] / bgp / rib-impl / src / test / java / org / opendaylight / protocol / bgp / rib / impl / config / OpenConfigMappingUtilTest.java
1 /*
2  * Copyright (c) 2016 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.rib.impl.config;
10
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.opendaylight.protocol.bgp.rib.impl.config.AbstractConfig.AS;
16 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.AFI_SAFI;
17 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.AFI_SAFI_IPV4;
18 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.DEFAULT_TIMERS;
19 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.MD5_PASSWORD;
20 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.NEIGHBOR_ADDRESS;
21 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.PORT;
22 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.SHORT;
23 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createAfiSafi;
24 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createNeighborExpected;
25 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createTransport;
26 import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil.INSTANCE;
27
28 import com.google.common.collect.ImmutableList;
29 import java.nio.charset.StandardCharsets;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
33 import java.util.Set;
34 import javax.annotation.Nonnull;
35 import org.junit.Test;
36 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
37 import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
38 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
39 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
40 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
41 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
42 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
43 import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
44 import org.opendaylight.protocol.bgp.rib.impl.spi.ImportPolicyPeerTracker;
45 import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
46 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContextRegistry;
47 import org.opendaylight.protocol.bgp.rib.impl.stats.rib.impl.BGPRenderStats;
48 import org.opendaylight.protocol.bgp.rib.spi.CacheDisconnectedPeers;
49 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
50 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
51 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
52 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafis;
53 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder;
54 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder;
55 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TransportBuilder;
56 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
57 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
58 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
59 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
60 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
61 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
62 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6UNICAST;
63 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.NetworkInstances;
64 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstance;
65 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstanceKey;
66 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.Protocols;
67 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
68 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolKey;
69 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.BGP;
70 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
71 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi1;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi1Builder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1Builder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Protocol1;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.Rib;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.RibKey;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
82 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
83 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
84 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
85
86 public class OpenConfigMappingUtilTest {
87     private static final Neighbor NEIGHBOR = createNeighborExpected(NEIGHBOR_ADDRESS);
88     private static final String KEY = "bgp";
89     private static final InstanceIdentifier<Bgp> BGP_II = InstanceIdentifier.create(NetworkInstances.class)
90         .child(NetworkInstance.class, new NetworkInstanceKey("identifier-test")).child(Protocols.class)
91         .child(Protocol.class, new ProtocolKey(BGP.class, KEY)).augmentation(Protocol1.class).child(Bgp.class);
92     private static final NeighborKey NEIGHBOR_KEY = new NeighborKey(NEIGHBOR_ADDRESS);
93
94     private static class RibMock implements RIB {
95
96         @Override
97         public AsNumber getLocalAs() {
98             return AS;
99         }
100
101         @Override
102         public BgpId getBgpIdentifier() {
103             return null;
104         }
105
106         @Nonnull
107         @Override
108         public Set<? extends BgpTableType> getLocalTables() {
109             return null;
110         }
111
112         @Override
113         public BGPDispatcher getDispatcher() {
114             return null;
115         }
116
117         @Override
118         public DOMTransactionChain createPeerChain(final TransactionChainListener listener) {
119             return null;
120         }
121
122         @Override
123         public RIBExtensionConsumerContext getRibExtensions() {
124             return null;
125         }
126
127         @Override
128         public RIBSupportContextRegistry getRibSupportContext() {
129             return null;
130         }
131
132         @Override
133         public YangInstanceIdentifier getYangRibId() {
134             return null;
135         }
136
137         @Override
138         public CodecsRegistry getCodecsRegistry() {
139             return null;
140         }
141
142         @Override
143         public CacheDisconnectedPeers getCacheDisconnectedPeers() {
144             return null;
145         }
146
147         @Override
148         public DOMDataTreeChangeService getService() {
149             return null;
150         }
151
152         @Override
153         public BGPRenderStats getRenderStats() {
154             return null;
155         }
156
157         @Override
158         public ImportPolicyPeerTracker getImportPolicyPeerTracker() {
159             return null;
160         }
161
162         @Override
163         public Set<TablesKey> getLocalTablesKeys() {
164             return null;
165         }
166
167         @Override
168         public ServiceGroupIdentifier getRibIServiceGroupIdentifier() {
169             return null;
170         }
171
172         @Override
173         public ClusterSingletonServiceRegistration registerClusterSingletonService(final ClusterSingletonService clusterSingletonService) {
174             return null;
175         }
176
177         @Override
178         public void close() throws Exception {
179
180         }
181
182         @Override
183         public KeyedInstanceIdentifier<Rib, RibKey> getInstanceIdentifier() {
184             return null;
185         }
186     }
187
188     @Test
189     public void testGetRibInstanceName() throws Exception {
190         assertEquals(KEY, OpenConfigMappingUtil.getRibInstanceName(BGP_II));
191     }
192
193     @Test
194     public void testGetHoldTimer() throws Exception {
195         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(), OpenConfigMappingUtil.getHoldTimer(NEIGHBOR));
196     }
197
198     @Test
199     public void testGetPeerAs() throws Exception {
200         assertEquals(AS, OpenConfigMappingUtil.getPeerAs(NEIGHBOR, null));
201         assertEquals(AS, OpenConfigMappingUtil.getPeerAs(new NeighborBuilder().build(), new RibMock()));
202     }
203
204     @Test
205     public void testIsActive() throws Exception {
206         assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().build()));
207         assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().setTransport(new TransportBuilder().build()).build()));
208         assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().setTransport(createTransport()).build()));
209     }
210
211     @Test
212     public void testGetRetryTimer() throws Exception {
213         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(), OpenConfigMappingUtil.getRetryTimer(NEIGHBOR));
214         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(), OpenConfigMappingUtil.getRetryTimer(new NeighborBuilder().build()));
215     }
216
217     @Test
218     public void testGetNeighborKey() throws Exception {
219         assertArrayEquals(MD5_PASSWORD.getBytes(StandardCharsets.US_ASCII),
220             OpenConfigMappingUtil.getNeighborKey(NEIGHBOR).get(INSTANCE.inetAddressFor(NEIGHBOR_ADDRESS)));
221         assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().build()));
222         assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().setConfig(new ConfigBuilder().build()).build()));
223     }
224
225     @Test
226     public void testGetNeighborInstanceIdentifier() throws Exception {
227         assertEquals(BGP_II.child(Neighbors.class).child(Neighbor.class, NEIGHBOR_KEY),
228             OpenConfigMappingUtil.getNeighborInstanceIdentifier(BGP_II, NEIGHBOR_KEY));
229
230     }
231
232     @Test
233     public void testGetNeighborInstanceName() throws Exception {
234         assertEquals(NEIGHBOR_ADDRESS.getIpv4Address().getValue(),
235             OpenConfigMappingUtil.getNeighborInstanceName(BGP_II.child(Neighbors.class).child(Neighbor.class, NEIGHBOR_KEY)));
236     }
237
238     @Test
239     public void testGetPort() throws Exception {
240         assertEquals(PORT, OpenConfigMappingUtil.getPort(NEIGHBOR));
241         assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(new TransportBuilder().build()).build()));
242         assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(
243             new TransportBuilder().setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.
244                 ConfigBuilder().build()).build()).build()));
245         assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(
246             new TransportBuilder().setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.
247                 ConfigBuilder().addAugmentation(Config1.class, new Config1Builder().build()).build()).build()).build()));
248     }
249
250     @Test
251     public void testGetAfiSafiWithDefault() throws Exception {
252         final ImmutableList<AfiSafi> defaultValue = ImmutableList.of(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build());
253         assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(null, true));
254         final AfiSafis afiSafi = new AfiSafisBuilder().build();
255         assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, true));
256
257         final AfiSafi afiSafiIpv6 = new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class).addAugmentation(AfiSafi1.class,
258             new AfiSafi1Builder().setReceive(true).setSendMax(SHORT).build()).build();
259         final List<AfiSafi> afiSafiIpv6List = new ArrayList<>();
260         afiSafiIpv6List.add(afiSafiIpv6);
261
262         final List<AfiSafi> expected = new ArrayList<>(afiSafiIpv6List);
263         expected.add(AFI_SAFI_IPV4);
264         assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(), true).get(0));
265         assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(),
266             OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(), true).get(1));
267         assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), true));
268
269         assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(null, false).isEmpty());
270         assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, false).isEmpty());
271         assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(), false).get(0));
272         assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(),
273             OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(), false).get(1));
274         assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), false));
275     }
276 }