Migrate deprecated submit() to commit() for BGP/BMP
[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 junit.framework.TestCase.assertFalse;
12 import static org.junit.Assert.assertArrayEquals;
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertNull;
15 import static org.junit.Assert.assertTrue;
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.MD5_PASSWORD;
19 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.NEIGHBOR_ADDRESS;
20 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.PORT;
21 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.SHORT;
22 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createAfiSafi;
23 import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createNeighborExpected;
24 import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.HOLDTIMER;
25 import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil.INSTANCE;
26
27 import com.google.common.collect.ImmutableList;
28 import com.google.common.primitives.Shorts;
29 import java.math.BigDecimal;
30 import java.nio.charset.StandardCharsets;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.List;
34 import java.util.Map;
35 import org.junit.Assert;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.mockito.Mock;
39 import org.mockito.Mockito;
40 import org.mockito.MockitoAnnotations;
41 import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode;
42 import org.opendaylight.protocol.bgp.mode.impl.add.all.paths.AllPathSelection;
43 import org.opendaylight.protocol.bgp.mode.impl.add.n.paths.AddPathBestNPathSelection;
44 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
45 import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
46 import org.opendaylight.protocol.bgp.rib.impl.BGPPeerTrackerImpl;
47 import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
48 import org.opendaylight.protocol.bgp.rib.spi.BGPPeerTracker;
49 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
50 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
51 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborTransportConfig;
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.RouteReflectorBuilder;
56 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TimersBuilder;
57 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport;
58 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TransportBuilder;
59 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.Config;
60 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
61 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
62 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
63 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroupBuilder;
64 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
65 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
66 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
67 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6LABELLEDUNICAST;
68 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6UNICAST;
69 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.PeerType;
70 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.RrClusterIdType;
71 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.NetworkInstances;
72 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstance;
73 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstanceKey;
74 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.Protocols;
75 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
76 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolKey;
77 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.BGP;
78 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
79 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
80 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
81 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.SendReceive;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamilies;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamiliesBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfig;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfigBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalConfigAugmentation;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalConfigAugmentationBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAddPathsConfig;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAddPathsConfigBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfig;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfigBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportConfig;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportConfigBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NetworkInstanceProtocol;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.PeerGroupTransportConfig;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.PeerGroupTransportConfigBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerRole;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.MplsLabeledVpnSubsequentAddressFamily;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
104 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
105
106 public class OpenConfigMappingUtilTest {
107     private static final Neighbor NEIGHBOR = createNeighborExpected(NEIGHBOR_ADDRESS);
108     private static final String KEY = "bgp";
109     private static final InstanceIdentifier<Bgp> BGP_II = InstanceIdentifier.create(NetworkInstances.class)
110         .child(NetworkInstance.class, new NetworkInstanceKey("identifier-test")).child(Protocols.class)
111         .child(Protocol.class, new ProtocolKey(BGP.class, KEY)).augmentation(NetworkInstanceProtocol.class)
112             .child(Bgp.class);
113     private static final NeighborKey NEIGHBOR_KEY = new NeighborKey(NEIGHBOR_ADDRESS);
114     private static final Ipv4Address ROUTER_ID = new Ipv4Address("1.2.3.4");
115     private static final Ipv4Address CLUSTER_ID = new Ipv4Address("4.3.2.1");
116     private static final Ipv4Address LOCAL_HOST = new Ipv4Address("127.0.0.1");
117
118     private static final Long ALL_PATHS = 0L;
119     private static final Long N_PATHS = 2L;
120     private static final BGPPeerTracker PEER_TRACKER = new BGPPeerTrackerImpl();
121     private static final PathSelectionMode ADD_PATH_BEST_N_PATH_SELECTION = new AddPathBestNPathSelection(N_PATHS,
122             PEER_TRACKER);
123     private static final PathSelectionMode ADD_PATH_BEST_ALL_PATH_SELECTION = new AllPathSelection(PEER_TRACKER);
124     private static final BgpTableType BGP_TABLE_TYPE_IPV4 = new BgpTableTypeImpl(Ipv4AddressFamily.class,
125             UnicastSubsequentAddressFamily.class);
126     private static final BgpTableType BGP_TABLE_TYPE_IPV6
127             = new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class);
128
129     private static final AsNumber AS = new AsNumber(72L);
130     private static final AsNumber GLOBAL_AS = new AsNumber(73L);
131     private static final List<AddressFamilies> FAMILIES;
132     private static final List<BgpTableType> TABLE_TYPES;
133     private static final List<AfiSafi> AFISAFIS = new ArrayList<>();
134     private static final BigDecimal DEFAULT_TIMERS = BigDecimal.valueOf(30);
135
136     static {
137         FAMILIES = new ArrayList<>();
138         FAMILIES.add(new AddressFamiliesBuilder()
139                 .setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class)
140                 .setSendReceive(SendReceive.Both).build());
141         FAMILIES.add(new AddressFamiliesBuilder()
142                 .setAfi(Ipv6AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class)
143                 .setSendReceive(SendReceive.Send).build());
144         FAMILIES.add(new AddressFamiliesBuilder()
145                 .setAfi(Ipv6AddressFamily.class).setSafi(MplsLabeledVpnSubsequentAddressFamily.class)
146                 .setSendReceive(SendReceive.Receive).build());
147         TABLE_TYPES = new ArrayList<>();
148         TABLE_TYPES.add(new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
149         TABLE_TYPES.add(new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class));
150         AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
151                 .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(true)
152                         .setSendMax(Shorts.checkedCast(N_PATHS)).build()).build());
153         AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
154                 .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(true)
155                         .setSendMax(Shorts.checkedCast(ALL_PATHS)).build()).build());
156     }
157
158     @Mock
159     private BGPTableTypeRegistryConsumer tableTypeRegistry;
160
161     @Mock
162     private RIB rib;
163
164     @Before
165     public void setUp() {
166         MockitoAnnotations.initMocks(this);
167         Mockito.doReturn(java.util.Optional.of(BGP_TABLE_TYPE_IPV4))
168             .when(this.tableTypeRegistry).getTableType(IPV4UNICAST.class);
169         Mockito.doReturn(java.util.Optional.of(BGP_TABLE_TYPE_IPV6))
170             .when(this.tableTypeRegistry).getTableType(IPV6UNICAST.class);
171         Mockito.doReturn(java.util.Optional.of(new BgpTableTypeImpl(Ipv6AddressFamily.class,
172                 MplsLabeledVpnSubsequentAddressFamily.class)))
173             .when(this.tableTypeRegistry).getTableType(IPV6LABELLEDUNICAST.class);
174         Mockito.doReturn(java.util.Optional.of(IPV4UNICAST.class))
175             .when(this.tableTypeRegistry).getAfiSafiType(BGP_TABLE_TYPE_IPV4);
176         Mockito.doReturn(java.util.Optional.of(IPV6UNICAST.class))
177             .when(this.tableTypeRegistry).getAfiSafiType(BGP_TABLE_TYPE_IPV6);
178         Mockito.doReturn(AS).when(this.rib).getLocalAs();
179     }
180
181     @Test
182     public void testGetRibInstanceName() {
183         assertEquals(KEY, OpenConfigMappingUtil.getRibInstanceName(BGP_II));
184     }
185
186     @Test
187     public void testGetHoldTimer() {
188         TimersBuilder builder = new TimersBuilder().setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net
189                 .yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder().setHoldTime(BigDecimal.TEN).build());
190
191         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
192                 OpenConfigMappingUtil.getHoldTimer(NEIGHBOR, null));
193         assertEquals(HOLDTIMER,
194                 OpenConfigMappingUtil.getHoldTimer(new NeighborBuilder().build(), null));
195
196         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
197                 OpenConfigMappingUtil.getHoldTimer(NEIGHBOR, new PeerGroupBuilder().build()));
198         assertEquals(BigDecimal.TEN.intValue(), OpenConfigMappingUtil.getHoldTimer(NEIGHBOR, new PeerGroupBuilder()
199                 .setTimers(builder.build()).build()));
200     }
201
202     @Test
203     public void testGetRemotePeerAs() {
204         final ConfigBuilder configBuilder = new ConfigBuilder();
205         assertEquals(AS, OpenConfigMappingUtil.getRemotePeerAs(NEIGHBOR.getConfig(), null, null));
206         assertEquals(AS, OpenConfigMappingUtil.getRemotePeerAs(configBuilder.build(), null,
207                 this.rib.getLocalAs()));
208
209         assertEquals(AS, OpenConfigMappingUtil.getRemotePeerAs(NEIGHBOR.getConfig(),
210                 new PeerGroupBuilder().build(), null));
211         assertEquals(AS, OpenConfigMappingUtil.getRemotePeerAs(configBuilder.build(), new PeerGroupBuilder().build(),
212                 this.rib.getLocalAs()));
213
214         assertEquals(AS, OpenConfigMappingUtil.getRemotePeerAs(null, new PeerGroupBuilder()
215                         .setConfig(new ConfigBuilder().setPeerAs(AS).build()).build(), null));
216     }
217
218     @Test
219     public void testGetLocalPeerAs() {
220         final ConfigBuilder configBuilder = new ConfigBuilder();
221         assertEquals(GLOBAL_AS,OpenConfigMappingUtil.getLocalPeerAs(null, GLOBAL_AS));
222         assertEquals(AS, OpenConfigMappingUtil.getLocalPeerAs(configBuilder.setLocalAs(AS).build(), GLOBAL_AS));
223     }
224
225     @Test
226     public void testIsActive() {
227         final TransportBuilder builder = new TransportBuilder();
228         assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().build(), null));
229         assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder()
230                 .setTransport(builder.build()).build(), null));
231
232         final Transport activeFalse = builder.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp
233                 .rev151009.bgp.neighbor.group.transport.ConfigBuilder().setPassiveMode(true).build()).build();
234         assertFalse(OpenConfigMappingUtil.isActive(new NeighborBuilder().setTransport(activeFalse).build(),
235                 null));
236
237         assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().build(),
238                 new PeerGroupBuilder().build()));
239         assertFalse(OpenConfigMappingUtil.isActive(new NeighborBuilder().build(),
240                 new PeerGroupBuilder().setTransport(activeFalse).build()));
241     }
242
243     @Test
244     public void testGetRetryTimer() {
245         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
246                 OpenConfigMappingUtil.getRetryTimer(NEIGHBOR, null));
247         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
248                 OpenConfigMappingUtil.getRetryTimer(new NeighborBuilder().build(), null));
249         TimersBuilder builder = new TimersBuilder().setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net
250                 .yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder().setConnectRetry(BigDecimal.TEN).build());
251         assertEquals(BigDecimal.TEN.intValue(), OpenConfigMappingUtil.getRetryTimer(new NeighborBuilder()
252                 .setTimers(builder.build()).build(), null));
253
254         assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
255                 OpenConfigMappingUtil.getRetryTimer(NEIGHBOR, new PeerGroupBuilder().build()));
256         assertEquals(BigDecimal.TEN.intValue(), OpenConfigMappingUtil.getRetryTimer(NEIGHBOR,
257                 new PeerGroupBuilder().setTimers(builder.build()).build()));
258     }
259
260     @Test
261     public void testGetNeighborKey() {
262         assertArrayEquals(MD5_PASSWORD.getBytes(StandardCharsets.US_ASCII),
263             OpenConfigMappingUtil.getNeighborKey(NEIGHBOR).get(INSTANCE.inetAddressFor(NEIGHBOR_ADDRESS)));
264         assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().build()));
265         assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().setConfig(new ConfigBuilder()
266                 .build()).build()));
267     }
268
269     @Test
270     public void testGetNeighborInstanceIdentifier() {
271         assertEquals(BGP_II.child(Neighbors.class).child(Neighbor.class, NEIGHBOR_KEY),
272             OpenConfigMappingUtil.getNeighborInstanceIdentifier(BGP_II, NEIGHBOR_KEY));
273
274     }
275
276     @Test
277     public void testGetNeighborInstanceName() {
278         assertEquals(NEIGHBOR_ADDRESS.getIpv4Address().getValue(), OpenConfigMappingUtil
279                 .getNeighborInstanceName(BGP_II.child(Neighbors.class).child(Neighbor.class, NEIGHBOR_KEY)));
280     }
281
282     @Test
283     public void testGetPort() {
284         final TransportBuilder transport = new TransportBuilder();
285         assertEquals(PORT, OpenConfigMappingUtil.getPort(NEIGHBOR, null));
286         assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder()
287                 .setTransport(transport.build()).build(), null));
288         assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(
289                 transport.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor
290                         .group.transport.ConfigBuilder().build()).build()).build(), null));
291         final PortNumber newPort = new PortNumber(111);
292         final Config portConfig = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor
293                 .group.transport.ConfigBuilder().addAugmentation(NeighborTransportConfig.class,
294                 new NeighborTransportConfigBuilder().setRemotePort(newPort).build()).build();
295         assertEquals(newPort, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(
296                 transport.setConfig(portConfig).build()).build(), null));
297
298         assertEquals(newPort, OpenConfigMappingUtil.getPort(new NeighborBuilder()
299                 .setTransport(transport.setConfig(portConfig).build()).build(), new PeerGroupBuilder().build()));
300
301         final Config portConfigGroup = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp
302                 .neighbor.group.transport.ConfigBuilder().addAugmentation(PeerGroupTransportConfig.class,
303                 new PeerGroupTransportConfigBuilder().setRemotePort(newPort).build()).build();
304         assertEquals(newPort, OpenConfigMappingUtil.getPort(new NeighborBuilder().build(), new PeerGroupBuilder()
305                 .setTransport(transport.setConfig(portConfigGroup).build()).build()));
306     }
307
308     @Test
309     public void testGetLocalAddress() {
310         assertNull(OpenConfigMappingUtil.getLocalAddress(null));
311         final TransportBuilder transport = new TransportBuilder();
312         assertNull(OpenConfigMappingUtil.getLocalAddress(transport.build()));
313         assertNull(OpenConfigMappingUtil.getLocalAddress(transport.setConfig(
314                 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport
315                         .ConfigBuilder().build()).build()));
316         assertEquals(new IpAddress(LOCAL_HOST), OpenConfigMappingUtil.getLocalAddress(transport.setConfig(
317                 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport
318                         .ConfigBuilder().setLocalAddress(new BgpNeighborTransportConfig
319                         .LocalAddress(new IpAddress(new Ipv4Address(LOCAL_HOST.getValue())))).build()).build()));
320     }
321
322     @Test
323     public void testGetAfiSafiWithDefault() {
324         final ImmutableList<AfiSafi> defaultValue
325                 = ImmutableList.of(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build());
326         assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(null, true));
327         final AfiSafis afiSafi = new AfiSafisBuilder().build();
328         assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, true));
329
330         final AfiSafi afiSafiIpv6 = new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
331                 .addAugmentation(NeighborAddPathsConfig.class,
332             new NeighborAddPathsConfigBuilder().setReceive(true).setSendMax(SHORT).build()).build();
333         final List<AfiSafi> afiSafiIpv6List = new ArrayList<>();
334         afiSafiIpv6List.add(afiSafiIpv6);
335
336         final List<AfiSafi> expected = new ArrayList<>(afiSafiIpv6List);
337         expected.add(AFI_SAFI_IPV4);
338         assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder()
339                 .setAfiSafi(afiSafiIpv6List).build(), true).get(0));
340         assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(),
341                 OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(),
342                         true).get(1));
343         assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), true));
344
345         assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(null, false).isEmpty());
346         assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, false).isEmpty());
347         assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder()
348                 .setAfiSafi(afiSafiIpv6List).build(), false).get(0));
349         assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(),
350             OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(),
351                     false).get(1));
352         assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), false));
353     }
354
355     @Test
356     public void testGetGlobalClusterIdentifier() {
357         final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base
358                 .ConfigBuilder configBuilder = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009
359                 .bgp.global.base.ConfigBuilder();
360         configBuilder.setRouterId(ROUTER_ID);
361         assertEquals(ROUTER_ID.getValue(),
362                 OpenConfigMappingUtil.getGlobalClusterIdentifier(configBuilder.build()).getValue());
363
364         configBuilder.addAugmentation(GlobalConfigAugmentation.class, new GlobalConfigAugmentationBuilder()
365                 .setRouteReflectorClusterId(new RrClusterIdType(CLUSTER_ID)).build()).build();
366         assertEquals(CLUSTER_ID.getValue(),
367                 OpenConfigMappingUtil.getGlobalClusterIdentifier(configBuilder.build()).getValue());
368     }
369
370     @Test
371     public void testGetNeighborClusterIdentifier() {
372
373         assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(null, null));
374
375         final PeerGroupBuilder peerGroup = new PeerGroupBuilder();
376         assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(null, peerGroup.build()));
377
378         final RouteReflectorBuilder configBuilder = new RouteReflectorBuilder();
379         assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build(), peerGroup.build()));
380
381         configBuilder.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor
382                 .group.route.reflector.ConfigBuilder()
383                 .setRouteReflectorClusterId(new RrClusterIdType(CLUSTER_ID)).build()).build();
384         assertEquals(CLUSTER_ID.getValue(), OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build(),
385                 peerGroup.build()).getValue());
386
387         assertEquals(CLUSTER_ID.getValue(), OpenConfigMappingUtil.getNeighborClusterIdentifier(null,
388                 peerGroup.setRouteReflector(configBuilder.build()).build()).getValue());
389     }
390
391     @Test
392     public void isAppNeighbor() {
393         assertFalse(OpenConfigMappingUtil.isApplicationPeer(new NeighborBuilder()
394                 .setConfig(new ConfigBuilder().build()).build()));
395         final Neighbor neighbor = new NeighborBuilder().setConfig(new ConfigBuilder()
396                 .addAugmentation(NeighborPeerGroupConfig.class, new NeighborPeerGroupConfigBuilder()
397                         .setPeerGroup(OpenConfigMappingUtil.APPLICATION_PEER_GROUP_NAME).build()).build()).build();
398         assertTrue(OpenConfigMappingUtil.isApplicationPeer(neighbor));
399     }
400
401     @Test
402     public void toPathSelectionMode() {
403         final List<AfiSafi> families = new ArrayList<>();
404         families.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
405             .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder()
406                     .setSendMax(Shorts.checkedCast(N_PATHS)).build()).build());
407         families.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
408             .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder()
409                     .setSendMax(Shorts.checkedCast(ALL_PATHS)).build()).build());
410         final Map<BgpTableType, PathSelectionMode> result = OpenConfigMappingUtil
411                 .toPathSelectionMode(families, this.tableTypeRegistry, PEER_TRACKER);
412         final Map<BgpTableType, PathSelectionMode> expected = new HashMap<>();
413         expected.put(new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class),
414                 ADD_PATH_BEST_N_PATH_SELECTION);
415         expected.put(new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class),
416                 ADD_PATH_BEST_ALL_PATH_SELECTION);
417         assertEquals(expected.get(0), result.get(0));
418         assertEquals(expected.get(1), result.get(1));
419     }
420
421     @Test
422     public void toPeerRole() {
423         Neighbor neighbor = new NeighborBuilder().setConfig(new ConfigBuilder()
424                 .setPeerType(PeerType.EXTERNAL).build()).build();
425         PeerRole peerRoleResult = OpenConfigMappingUtil.toPeerRole(neighbor);
426         Assert.assertEquals(PeerRole.Ebgp, peerRoleResult);
427
428         neighbor = new NeighborBuilder().setConfig(new ConfigBuilder().setPeerType(PeerType.INTERNAL).build()).build();
429         peerRoleResult = OpenConfigMappingUtil.toPeerRole(neighbor);
430         Assert.assertEquals(PeerRole.Ibgp, peerRoleResult);
431
432         neighbor = new NeighborBuilder()
433             .setRouteReflector(new RouteReflectorBuilder().setConfig(
434                     new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp
435                 .neighbor.group.route.reflector.ConfigBuilder().setRouteReflectorClient(true).build()).build()).build();
436         peerRoleResult = OpenConfigMappingUtil.toPeerRole(neighbor);
437         Assert.assertEquals(PeerRole.RrClient, peerRoleResult);
438     }
439
440     @Test
441     public void toAddPathCapability() {
442         final List<AfiSafi> families = new ArrayList<>();
443         families.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
444             .addAugmentation(NeighborAddPathsConfig.class,
445                 new NeighborAddPathsConfigBuilder()
446                     .setReceive(true).setSendMax(Shorts.checkedCast(ALL_PATHS)).build()).build());
447         families.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
448             .addAugmentation(NeighborAddPathsConfig.class,
449                 new NeighborAddPathsConfigBuilder()
450                     .setReceive(false).setSendMax(Shorts.checkedCast(N_PATHS)).build()).build());
451         families.add(new AfiSafiBuilder().setAfiSafiName(IPV6LABELLEDUNICAST.class)
452             .addAugmentation(NeighborAddPathsConfig.class,
453                 new NeighborAddPathsConfigBuilder()
454                     .setReceive(false).build()).build());
455         final List<AddressFamilies> result = OpenConfigMappingUtil
456                 .toAddPathCapability(families, this.tableTypeRegistry);
457         assertEquals(FAMILIES, result);
458     }
459 }