NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / elanmanager / impl / src / test / java / org / opendaylight / netvirt / elanmanager / tests / utils / BgpManagerTestImpl.java
1 /*
2  * Copyright © 2017 Ericsson India Global Services Pvt Ltd. 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 package org.opendaylight.netvirt.elanmanager.tests.utils;
9
10 import static org.opendaylight.yangtools.testutils.mockito.MoreAnswers.realOrException;
11
12 import java.util.Collections;
13 import java.util.List;
14 import org.mockito.Mockito;
15 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
16 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
17 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
18 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
19 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.Bgp;
20 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.BgpControlPlaneType;
21 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.EncapType;
22 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.NetworksContainer;
23 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.networkscontainer.Networks;
24 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.networkscontainer.NetworksBuilder;
25 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.networkscontainer.NetworksKey;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.opendaylight.yangtools.yang.common.Uint32;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 public abstract class BgpManagerTestImpl implements IBgpManager {
34     private static final Logger LOG = LoggerFactory.getLogger(BgpManagerTestImpl.class);
35     private SingleTransactionDataBroker singleTxdataBroker;
36
37     public static BgpManagerTestImpl newInstance(SingleTransactionDataBroker singleTxdataBroker) {
38         BgpManagerTestImpl instance = Mockito.mock(BgpManagerTestImpl.class, realOrException());
39         instance.singleTxdataBroker = singleTxdataBroker;
40         return instance;
41     }
42
43     @Override
44     public void advertisePrefix(String rd, String macAddress, String prefix, List<String> nextHopList,
45                                 VrfEntry.EncapType encapType, Uint32 vpnLabel, Uint32 l3vni, Uint32 l2vni,
46                                 String gatewayMac) throws Exception {
47         addPrefix(rd, macAddress, prefix, nextHopList,
48                 encapType, vpnLabel, l3vni, l2vni, gatewayMac);
49     }
50
51     @Override
52     public void advertisePrefix(String rd, String macAddress, String prefix, String nextHop,
53                                 VrfEntry.EncapType encapType, Uint32 vpnLabel, Uint32 l3vni, Uint32 l2vni,
54                                 String gatewayMac) throws Exception {
55         addPrefix(rd, macAddress, prefix, Collections.singletonList(nextHop), encapType,
56                 vpnLabel, l3vni, l2vni, gatewayMac);
57     }
58
59     public void addPrefix(String rd, String macAddress, String pfx, List<String> nhList,
60                             VrfEntry.EncapType encapType, Uint32 lbl, Uint32 l3vni, Uint32 l2vni, String gatewayMac)
61                             throws TransactionCommitFailedException {
62         for (String nh : nhList) {
63             Ipv4Address nexthop = nh != null ? new Ipv4Address(nh) : null;
64             Uint32 label = lbl;
65             InstanceIdentifier<Networks> iid = InstanceIdentifier.builder(Bgp.class)
66                     .child(NetworksContainer.class)
67                     .child(Networks.class, new NetworksKey(pfx, rd)).build();
68             NetworksBuilder networksBuilder = new NetworksBuilder().setRd(rd).setPrefixLen(pfx).setNexthop(nexthop)
69                     .setLabel(label).setEthtag(Uint32.ZERO);
70             buildVpnEncapSpecificInfo(networksBuilder, encapType, label, l3vni, l2vni, macAddress, gatewayMac);
71             singleTxdataBroker.syncWrite(LogicalDatastoreType.CONFIGURATION, iid, networksBuilder.build());
72         }
73     }
74
75     private static void buildVpnEncapSpecificInfo(NetworksBuilder builder, VrfEntry.EncapType encapType, Uint32 label,
76                                                   Uint32 l3vni, Uint32 l2vni, String macAddress, String gatewayMac) {
77         if (encapType.equals(VrfEntry.EncapType.Mplsgre)) {
78             builder.setLabel(label).setBgpControlPlaneType(BgpControlPlaneType.PROTOCOLL3VPN)
79                     .setEncapType(EncapType.GRE);
80         } else {
81             builder.setL3vni(l3vni).setL2vni(l2vni).setMacaddress(macAddress).setRoutermac(gatewayMac)
82                     .setBgpControlPlaneType(BgpControlPlaneType.PROTOCOLEVPN).setEncapType(EncapType.VXLAN);
83         }
84     }
85
86     public void withdrawPrefix(String rd, String pfx) {
87         InstanceIdentifier<Networks> iid = InstanceIdentifier.builder(Bgp.class)
88                 .child(NetworksContainer.class)
89                 .child(Networks.class, new NetworksKey(pfx, rd)).build();
90         try {
91             singleTxdataBroker.syncDelete(LogicalDatastoreType.CONFIGURATION, iid);
92         } catch (TransactionCommitFailedException e) {
93             LOG.info("TransactionCommitFailedException ", e);
94         }
95     }
96 }