2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.protocol.bgp.rib.impl.config;
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;
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;
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.bgp.neighbor.group.AfiSafis;
52 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder;
53 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder;
54 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.RouteReflectorBuilder;
55 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TimersBuilder;
56 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport;
57 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TransportBuilder;
58 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.Config;
59 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
60 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
61 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
62 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroupBuilder;
63 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
64 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
65 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
66 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6LABELLEDUNICAST;
67 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6UNICAST;
68 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.PeerType;
69 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.RrClusterIdType;
70 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.NetworkInstances;
71 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstance;
72 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstanceKey;
73 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.Protocols;
74 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
75 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolKey;
76 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.BGP;
77 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
78 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
79 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.BgpTableType;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.SendReceive;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.mp.capabilities.add.path.capability.AddressFamilies;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.mp.capabilities.add.path.capability.AddressFamiliesBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.GlobalAddPathsConfig;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.GlobalAddPathsConfigBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.GlobalConfigAugmentation;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.GlobalConfigAugmentationBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborAddPathsConfig;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborAddPathsConfigBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborClusterIdConfig;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborClusterIdConfigBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborPeerGroupConfig;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborPeerGroupConfigBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborTransportConfig;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NeighborTransportConfigBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.NetworkInstanceProtocol;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.PeerGroupTransportConfig;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.PeerGroupTransportConfigBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.PeerRole;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.rib.TablesKey;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.MplsLabeledVpnSubsequentAddressFamily;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
106 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
108 public class OpenConfigMappingUtilTest {
109 private static final Neighbor NEIGHBOR = createNeighborExpected(NEIGHBOR_ADDRESS);
110 private static final String KEY = "bgp";
111 private static final InstanceIdentifier<Bgp> BGP_II = InstanceIdentifier.create(NetworkInstances.class)
112 .child(NetworkInstance.class, new NetworkInstanceKey("identifier-test")).child(Protocols.class)
113 .child(Protocol.class, new ProtocolKey(BGP.class, KEY)).augmentation(NetworkInstanceProtocol.class)
115 private static final NeighborKey NEIGHBOR_KEY = new NeighborKey(NEIGHBOR_ADDRESS);
116 private static final Ipv4Address ROUTER_ID = new Ipv4Address("1.2.3.4");
117 private static final Ipv4Address CLUSTER_ID = new Ipv4Address("4.3.2.1");
119 private static final Long ALL_PATHS = 0L;
120 private static final Long N_PATHS = 2L;
121 private static final BGPPeerTracker PEER_TRACKER = new BGPPeerTrackerImpl();
122 private static final PathSelectionMode ADD_PATH_BEST_N_PATH_SELECTION = new AddPathBestNPathSelection(N_PATHS,
124 private static final PathSelectionMode ADD_PATH_BEST_ALL_PATH_SELECTION = new AllPathSelection(PEER_TRACKER);
125 private static final BgpTableType BGP_TABLE_TYPE_IPV4 = new BgpTableTypeImpl(Ipv4AddressFamily.class,
126 UnicastSubsequentAddressFamily.class);
127 private static final BgpTableType BGP_TABLE_TYPE_IPV6
128 = new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class);
129 private static final AfiSafi AFISAFI_IPV4 = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build();
130 private static final TablesKey K4 = new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class);
132 private static final AsNumber AS = new AsNumber(72L);
133 private static final BgpId BGP_ID = new BgpId(NEIGHBOR_ADDRESS.getIpv4Address());
134 private static final List<AddressFamilies> FAMILIES;
135 private static final List<BgpTableType> TABLE_TYPES;
136 private static final List<AfiSafi> AFISAFIS = new ArrayList<>();
137 private static final BigDecimal DEFAULT_TIMERS = BigDecimal.valueOf(30);
140 FAMILIES = new ArrayList<>();
141 FAMILIES.add(new AddressFamiliesBuilder()
142 .setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class)
143 .setSendReceive(SendReceive.Both).build());
144 FAMILIES.add(new AddressFamiliesBuilder()
145 .setAfi(Ipv6AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class)
146 .setSendReceive(SendReceive.Send).build());
147 FAMILIES.add(new AddressFamiliesBuilder()
148 .setAfi(Ipv6AddressFamily.class).setSafi(MplsLabeledVpnSubsequentAddressFamily.class)
149 .setSendReceive(SendReceive.Receive).build());
150 TABLE_TYPES = new ArrayList<>();
151 TABLE_TYPES.add(new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
152 TABLE_TYPES.add(new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class));
153 AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
154 .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(true)
155 .setSendMax(Shorts.checkedCast(N_PATHS)).build()).build());
156 AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
157 .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(true)
158 .setSendMax(Shorts.checkedCast(ALL_PATHS)).build()).build());
162 private BGPTableTypeRegistryConsumer tableTypeRegistry;
168 public void setUp() {
169 MockitoAnnotations.initMocks(this);
170 Mockito.doReturn(java.util.Optional.of(BGP_TABLE_TYPE_IPV4))
171 .when(this.tableTypeRegistry).getTableType(IPV4UNICAST.class);
172 Mockito.doReturn(java.util.Optional.of(BGP_TABLE_TYPE_IPV6))
173 .when(this.tableTypeRegistry).getTableType(IPV6UNICAST.class);
174 Mockito.doReturn(java.util.Optional.of(new BgpTableTypeImpl(Ipv6AddressFamily.class,
175 MplsLabeledVpnSubsequentAddressFamily.class)))
176 .when(this.tableTypeRegistry).getTableType(IPV6LABELLEDUNICAST.class);
177 Mockito.doReturn(java.util.Optional.of(IPV4UNICAST.class))
178 .when(this.tableTypeRegistry).getAfiSafiType(BGP_TABLE_TYPE_IPV4);
179 Mockito.doReturn(java.util.Optional.of(IPV6UNICAST.class))
180 .when(this.tableTypeRegistry).getAfiSafiType(BGP_TABLE_TYPE_IPV6);
181 Mockito.doReturn(AS).when(this.rib).getLocalAs();
185 public void testGetRibInstanceName() {
186 assertEquals(KEY, OpenConfigMappingUtil.getRibInstanceName(BGP_II));
190 public void testGetHoldTimer() {
191 TimersBuilder builder = new TimersBuilder().setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net
192 .yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder().setHoldTime(BigDecimal.TEN).build());
194 assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
195 OpenConfigMappingUtil.getHoldTimer(NEIGHBOR, null));
196 assertEquals(HOLDTIMER,
197 OpenConfigMappingUtil.getHoldTimer(new NeighborBuilder().build(), null));
199 assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
200 OpenConfigMappingUtil.getHoldTimer(NEIGHBOR, new PeerGroupBuilder().build()));
201 assertEquals(BigDecimal.TEN.intValue(), OpenConfigMappingUtil.getHoldTimer(NEIGHBOR, new PeerGroupBuilder()
202 .setTimers(builder.build()).build()));
206 public void testGetPeerAs() {
207 assertEquals(AS, OpenConfigMappingUtil.getPeerAs(NEIGHBOR, null, null));
208 assertEquals(AS, OpenConfigMappingUtil.getPeerAs(new NeighborBuilder().build(), null, this.rib.getLocalAs()));
210 assertEquals(AS, OpenConfigMappingUtil.getPeerAs(NEIGHBOR, new PeerGroupBuilder().build(), null));
211 assertEquals(AS, OpenConfigMappingUtil.getPeerAs(new NeighborBuilder().build(), new PeerGroupBuilder().build(),
212 this.rib.getLocalAs()));
214 assertEquals(AS, OpenConfigMappingUtil.getPeerAs(null, new PeerGroupBuilder()
215 .setConfig(new ConfigBuilder().setPeerAs(AS).build()).build(), null));
219 public void testIsActive() {
220 final TransportBuilder builder = new TransportBuilder();
221 assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().build(), null));
222 assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder()
223 .setTransport(builder.build()).build(), null));
225 final Transport activeFalse = builder.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp
226 .rev151009.bgp.neighbor.group.transport.ConfigBuilder().setPassiveMode(true).build()).build();
227 assertFalse(OpenConfigMappingUtil.isActive(new NeighborBuilder().setTransport(activeFalse).build(),
230 assertTrue(OpenConfigMappingUtil.isActive(new NeighborBuilder().build(),
231 new PeerGroupBuilder().build()));
232 assertFalse(OpenConfigMappingUtil.isActive(new NeighborBuilder().build(),
233 new PeerGroupBuilder().setTransport(activeFalse).build()));
237 public void testGetRetryTimer() {
238 assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
239 OpenConfigMappingUtil.getRetryTimer(NEIGHBOR, null));
240 assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
241 OpenConfigMappingUtil.getRetryTimer(new NeighborBuilder().build(), null));
242 TimersBuilder builder = new TimersBuilder().setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net
243 .yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder().setConnectRetry(BigDecimal.TEN).build());
244 assertEquals(BigDecimal.TEN.intValue(), OpenConfigMappingUtil.getRetryTimer(new NeighborBuilder()
245 .setTimers(builder.build()).build(), null));
247 assertEquals(DEFAULT_TIMERS.toBigInteger().intValue(),
248 OpenConfigMappingUtil.getRetryTimer(NEIGHBOR, new PeerGroupBuilder().build()));
249 assertEquals(BigDecimal.TEN.intValue(), OpenConfigMappingUtil.getRetryTimer(NEIGHBOR,
250 new PeerGroupBuilder().setTimers(builder.build()).build()));
254 public void testGetNeighborKey() {
255 assertArrayEquals(MD5_PASSWORD.getBytes(StandardCharsets.US_ASCII),
256 OpenConfigMappingUtil.getNeighborKey(NEIGHBOR).get(INSTANCE.inetAddressFor(NEIGHBOR_ADDRESS)));
257 assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().build()));
258 assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().setConfig(new ConfigBuilder()
263 public void testGetNeighborInstanceIdentifier() {
264 assertEquals(BGP_II.child(Neighbors.class).child(Neighbor.class, NEIGHBOR_KEY),
265 OpenConfigMappingUtil.getNeighborInstanceIdentifier(BGP_II, NEIGHBOR_KEY));
270 public void testGetNeighborInstanceName() {
271 assertEquals(NEIGHBOR_ADDRESS.getIpv4Address().getValue(), OpenConfigMappingUtil
272 .getNeighborInstanceName(BGP_II.child(Neighbors.class).child(Neighbor.class, NEIGHBOR_KEY)));
276 public void testGetPort() {
277 final TransportBuilder transport = new TransportBuilder();
278 assertEquals(PORT, OpenConfigMappingUtil.getPort(NEIGHBOR, null));
279 assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder()
280 .setTransport(transport.build()).build(), null));
281 assertEquals(PORT, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(
282 transport.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor
283 .group.transport.ConfigBuilder().build()).build()).build(), null));
284 final PortNumber newPort = new PortNumber(111);
285 final Config portConfig = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor
286 .group.transport.ConfigBuilder().addAugmentation(NeighborTransportConfig.class,
287 new NeighborTransportConfigBuilder().setRemotePort(newPort).build()).build();
288 assertEquals(newPort, OpenConfigMappingUtil.getPort(new NeighborBuilder().setTransport(
289 transport.setConfig(portConfig).build()).build(), null));
291 assertEquals(newPort, OpenConfigMappingUtil.getPort(new NeighborBuilder()
292 .setTransport(transport.setConfig(portConfig).build()).build(), new PeerGroupBuilder().build()));
294 final Config portConfigGroup = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp
295 .neighbor.group.transport.ConfigBuilder().addAugmentation(PeerGroupTransportConfig.class,
296 new PeerGroupTransportConfigBuilder().setRemotePort(newPort).build()).build();
297 assertEquals(newPort, OpenConfigMappingUtil.getPort(new NeighborBuilder().build(), new PeerGroupBuilder()
298 .setTransport(transport.setConfig(portConfigGroup).build()).build()));
302 public void testGetAfiSafiWithDefault() {
303 final ImmutableList<AfiSafi> defaultValue
304 = ImmutableList.of(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build());
305 assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(null, true));
306 final AfiSafis afiSafi = new AfiSafisBuilder().build();
307 assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, true));
309 final AfiSafi afiSafiIpv6 = new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
310 .addAugmentation(NeighborAddPathsConfig.class,
311 new NeighborAddPathsConfigBuilder().setReceive(true).setSendMax(SHORT).build()).build();
312 final List<AfiSafi> afiSafiIpv6List = new ArrayList<>();
313 afiSafiIpv6List.add(afiSafiIpv6);
315 final List<AfiSafi> expected = new ArrayList<>(afiSafiIpv6List);
316 expected.add(AFI_SAFI_IPV4);
317 assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder()
318 .setAfiSafi(afiSafiIpv6List).build(), true).get(0));
319 assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(),
320 OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(),
322 assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), true));
324 assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(null, false).isEmpty());
325 assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, false).isEmpty());
326 assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder()
327 .setAfiSafi(afiSafiIpv6List).build(), false).get(0));
328 assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(),
329 OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(),
331 assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), false));
335 public void testGetGlobalClusterIdentifier() {
336 final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base
337 .ConfigBuilder configBuilder = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009
338 .bgp.global.base.ConfigBuilder();
339 configBuilder.setRouterId(ROUTER_ID);
340 assertEquals(ROUTER_ID.getValue(),
341 OpenConfigMappingUtil.getGlobalClusterIdentifier(configBuilder.build()).getValue());
343 configBuilder.addAugmentation(GlobalConfigAugmentation.class, new GlobalConfigAugmentationBuilder()
344 .setRouteReflectorClusterId(new RrClusterIdType(CLUSTER_ID)).build()).build();
345 assertEquals(CLUSTER_ID.getValue(),
346 OpenConfigMappingUtil.getGlobalClusterIdentifier(configBuilder.build()).getValue());
350 public void testGetNeighborClusterIdentifier() {
351 assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(null));
353 final ConfigBuilder configBuilder = new ConfigBuilder();
354 assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build()));
356 configBuilder.addAugmentation(NeighborClusterIdConfig.class, new NeighborClusterIdConfigBuilder()
357 .setRouteReflectorClusterId(new RrClusterIdType(CLUSTER_ID)).build()).build();
358 assertEquals(CLUSTER_ID.getValue(),
359 OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build()).getValue());
363 public void isAppNeighbor() {
364 assertFalse(OpenConfigMappingUtil.isApplicationPeer(new NeighborBuilder()
365 .setConfig(new ConfigBuilder().build()).build()));
366 final Neighbor neighbor = new NeighborBuilder().setConfig(new ConfigBuilder()
367 .addAugmentation(NeighborPeerGroupConfig.class, new NeighborPeerGroupConfigBuilder()
368 .setPeerGroup(OpenConfigMappingUtil.APPLICATION_PEER_GROUP_NAME).build()).build()).build();
369 assertTrue(OpenConfigMappingUtil.isApplicationPeer(neighbor));
373 public void toPathSelectionMode() {
374 final List<AfiSafi> families = new ArrayList<>();
375 families.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
376 .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder()
377 .setSendMax(Shorts.checkedCast(N_PATHS)).build()).build());
378 families.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
379 .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder()
380 .setSendMax(Shorts.checkedCast(ALL_PATHS)).build()).build());
381 final Map<BgpTableType, PathSelectionMode> result = OpenConfigMappingUtil
382 .toPathSelectionMode(families, this.tableTypeRegistry, PEER_TRACKER);
383 final Map<BgpTableType, PathSelectionMode> expected = new HashMap<>();
384 expected.put(new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class),
385 ADD_PATH_BEST_N_PATH_SELECTION);
386 expected.put(new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class),
387 ADD_PATH_BEST_ALL_PATH_SELECTION);
388 assertEquals(expected.get(0), result.get(0));
389 assertEquals(expected.get(1), result.get(1));
393 public void toPeerRole() {
394 Neighbor neighbor = new NeighborBuilder().setConfig(new ConfigBuilder()
395 .setPeerType(PeerType.EXTERNAL).build()).build();
396 PeerRole peerRoleResult = OpenConfigMappingUtil.toPeerRole(neighbor);
397 Assert.assertEquals(PeerRole.Ebgp, peerRoleResult);
399 neighbor = new NeighborBuilder().setConfig(new ConfigBuilder().setPeerType(PeerType.INTERNAL).build()).build();
400 peerRoleResult = OpenConfigMappingUtil.toPeerRole(neighbor);
401 Assert.assertEquals(PeerRole.Ibgp, peerRoleResult);
403 neighbor = new NeighborBuilder()
404 .setRouteReflector(new RouteReflectorBuilder().setConfig(
405 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp
406 .neighbor.group.route.reflector.ConfigBuilder().setRouteReflectorClient(true).build()).build()).build();
407 peerRoleResult = OpenConfigMappingUtil.toPeerRole(neighbor);
408 Assert.assertEquals(PeerRole.RrClient, peerRoleResult);
412 public void toAddPathCapability() {
413 final List<AfiSafi> families = new ArrayList<>();
414 families.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
415 .addAugmentation(NeighborAddPathsConfig.class,
416 new NeighborAddPathsConfigBuilder()
417 .setReceive(true).setSendMax(Shorts.checkedCast(ALL_PATHS)).build()).build());
418 families.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class)
419 .addAugmentation(NeighborAddPathsConfig.class,
420 new NeighborAddPathsConfigBuilder()
421 .setReceive(false).setSendMax(Shorts.checkedCast(N_PATHS)).build()).build());
422 families.add(new AfiSafiBuilder().setAfiSafiName(IPV6LABELLEDUNICAST.class)
423 .addAugmentation(NeighborAddPathsConfig.class,
424 new NeighborAddPathsConfigBuilder()
425 .setReceive(false).build()).build());
426 final List<AddressFamilies> result = OpenConfigMappingUtil
427 .toAddPathCapability(families, this.tableTypeRegistry);
428 assertEquals(FAMILIES, result);