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;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.opendaylight.controller.md.sal.binding.impl.BindingDOMMountPointServiceAdapter.LOG;
16 import static org.opendaylight.protocol.bgp.rib.impl.AdjRibInWriter.PEER_ID_QNAME;
18 import java.util.ArrayList;
19 import java.util.HashSet;
20 import java.util.List;
21 import java.util.Optional;
23 import org.junit.Test;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.SendReceive;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.BgpRib;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.SimpleRoutingPolicy;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.Peer;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
35 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
37 public class ExportPolicyPeerTrackerImplTest {
38 private static final TablesKey TABLE_KEY = new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class);
39 private static final Ipv4Address BGP_ID = new Ipv4Address("127.0.0.1");
40 private static final PolicyDatabase PD = new PolicyDatabase(72L, BGP_ID, new ClusterIdentifier(BGP_ID));
41 private static final PeerId PEER_ID1 = new PeerId("bgp://42.42.42.42");
42 private static final YangInstanceIdentifier YII_PEER1 = YangInstanceIdentifier.builder().node(BgpRib.QNAME).node(Peer.QNAME)
43 .nodeWithKey(Peer.QNAME, PEER_ID_QNAME, PEER_ID1.getValue()).build();
44 private static final PeerId PEER_ID2 = new PeerId("bgp://42.42.42.43");
45 private static final YangInstanceIdentifier YII_PEER2 = YangInstanceIdentifier.builder().node(BgpRib.QNAME).node(Peer.QNAME)
46 .nodeWithKey(Peer.QNAME, PEER_ID_QNAME, PEER_ID2.getValue()).build();
47 private static final PeerId PEER_ID3 = new PeerId("bgp://42.42.42.44");
48 private static final YangInstanceIdentifier YII_PEER3 = YangInstanceIdentifier.builder().node(BgpRib.QNAME).node(Peer.QNAME)
49 .nodeWithKey(Peer.QNAME, PEER_ID_QNAME, PEER_ID3.getValue()).build();
50 private static final PeerId PEER_ID4 = new PeerId("bgp://42.42.42.45");
51 private static final YangInstanceIdentifier YII_PEER4 = YangInstanceIdentifier.builder().node(BgpRib.QNAME).node(Peer.QNAME)
52 .nodeWithKey(Peer.QNAME, PEER_ID_QNAME, PEER_ID4.getValue()).build();
53 private static final PeerId PEER_ID5 = new PeerId("bgp://42.42.42.46");
54 private final static List<AutoCloseable> TABLE_REGISTRATION = new ArrayList<>();
57 public void testExportPolicyPeerTrackerImpl() throws Exception {
58 final ExportPolicyPeerTrackerImpl exportPpt = new ExportPolicyPeerTrackerImpl(PD, TABLE_KEY);
60 TABLE_REGISTRATION.add(exportPpt.registerPeer(PEER_ID1, SendReceive.Both, YII_PEER1, PeerRole.RrClient, Optional.empty()));
61 TABLE_REGISTRATION.add(exportPpt.registerPeer(PEER_ID2, SendReceive.Receive, YII_PEER2, PeerRole.Ibgp, Optional.of(SimpleRoutingPolicy.AnnounceNone)));
62 TABLE_REGISTRATION.add(exportPpt.registerPeer(PEER_ID3, SendReceive.Send, YII_PEER3, PeerRole.Ebgp, Optional.of(SimpleRoutingPolicy.LearnNone)));
63 TABLE_REGISTRATION.add(exportPpt.registerPeer(PEER_ID4, null, YII_PEER4, PeerRole.Ibgp, Optional.empty()));
65 assertEquals(PeerRole.RrClient, exportPpt.getRole(YII_PEER1));
66 assertEquals(PeerRole.Ibgp, exportPpt.getRole(YII_PEER2));
67 assertEquals(PeerRole.Ebgp, exportPpt.getRole(YII_PEER3));
68 assertEquals(PeerRole.Ibgp, exportPpt.getRole(YII_PEER4));
70 assertTrue(exportPpt.getPeerGroup(PeerRole.RrClient).containsPeer(PEER_ID1));
71 assertTrue(exportPpt.getPeerGroup(PeerRole.Ibgp).containsPeer(PEER_ID2));
72 assertTrue(exportPpt.getPeerGroup(PeerRole.Ebgp).containsPeer(PEER_ID3));
73 assertTrue(exportPpt.getPeerGroup(PeerRole.Ibgp).containsPeer(PEER_ID4));
75 assertTrue(exportPpt.isTableSupported(PEER_ID1));
76 assertFalse(exportPpt.isTableSupported(PEER_ID2));
77 assertTrue(exportPpt.isTableSupported(PEER_ID3));
78 assertTrue(exportPpt.isTableSupported(PEER_ID4));
79 assertFalse(exportPpt.isTableSupported(PEER_ID5));
81 assertTrue(exportPpt.isAddPathSupportedByPeer(PEER_ID1));
82 assertTrue(exportPpt.isAddPathSupportedByPeer(PEER_ID2));
83 assertFalse(exportPpt.isAddPathSupportedByPeer(PEER_ID3));
84 assertFalse(exportPpt.isAddPathSupportedByPeer(PEER_ID4));
85 assertFalse(exportPpt.isAddPathSupportedByPeer(PEER_ID5));
87 TABLE_REGISTRATION.remove(0).close();
88 assertNull(exportPpt.getRole(YII_PEER1));
89 assertNull(exportPpt.getPeerGroup(PeerRole.RrClient));
90 assertFalse(exportPpt.isTableSupported(PEER_ID1));
91 assertFalse(exportPpt.isAddPathSupportedByPeer(PEER_ID1));
94 TABLE_REGISTRATION.get(0).close();
95 assertNull(exportPpt.getRole(YII_PEER2));
96 assertFalse(exportPpt.getPeerGroup(PeerRole.Ibgp).containsPeer(PEER_ID2));
97 assertFalse(exportPpt.isTableSupported(PEER_ID2));
98 assertFalse(exportPpt.isAddPathSupportedByPeer(PEER_ID2));
100 for (final AutoCloseable tableCloseable : TABLE_REGISTRATION) {
102 tableCloseable.close();
103 } catch (final Exception e) {
104 LOG.warn("Failed to close registration", e);
107 TABLE_REGISTRATION.clear();