96797db9ee5432d592b020789cb16f43908bfc8a
[netvirt.git] /
1 /*
2  * Copyright © 2016, 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
9 package org.opendaylight.netvirt.vpnmanager.test;
10
11 import static org.mockito.Matchers.anyString;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.verify;
14 import static org.mockito.Mockito.when;
15
16 import com.google.common.base.Optional;
17 import com.google.common.util.concurrent.Futures;
18 import java.math.BigInteger;
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.List;
22 import java.util.concurrent.Future;
23 import org.junit.Before;
24 import org.junit.Ignore;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.mockito.Mock;
28 import org.mockito.runners.MockitoJUnitRunner;
29 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
30 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
31 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
32 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
33 import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
34 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
35 import org.opendaylight.netvirt.vpnmanager.SubnetOpDpnManager;
36 import org.opendaylight.netvirt.vpnmanager.VpnInterfaceManager;
37 import org.opendaylight.netvirt.vpnmanager.VpnNodeListener;
38 import org.opendaylight.netvirt.vpnmanager.VpnOpDataSyncer;
39 import org.opendaylight.netvirt.vpnmanager.VpnSubnetRouteHandler;
40 import org.opendaylight.netvirt.vpnmanager.utilities.InterfaceUtils;
41 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances;
42 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4Family;
43 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4FamilyBuilder;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInputBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutputBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnEndpoints;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfoBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfoKey;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.LockManagerService;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.PortOpData;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.PortOpDataBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.TaskState;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceToVpnId;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntry;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntryBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntryKey;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntry;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryKey;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpn;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpnBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpnKey;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfaces;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfacesBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfacesKey;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstanceBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstanceKey;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.ExternalNetworks;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.networks.Networks;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.networks.NetworksBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.networks.NetworksKey;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
91 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
92 import org.opendaylight.yangtools.yang.common.RpcResult;
93 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
94
95 @RunWith(MockitoJUnitRunner.class)
96 public class VpnSubnetRouteHandlerTest {
97
98     BigInteger dpId = BigInteger.valueOf(1);
99     SubnetToDpn subnetToDpn = null;
100     String subnetIp = "10.1.1.24";
101     List<String> routeDistinguishers = Arrays.asList("100:1","100:2");
102     String primaryRd = "100:1";
103     String nexthopIp = null;
104     String poolName = null;
105     String interfaceName = "VPN";
106     Uuid subnetId = Uuid.getDefaultInstance("067e6162-3b6f-4ae2-a171-2470b63dff00");
107     Uuid portId = Uuid.getDefaultInstance("54947df8-0e9e-4471-a2f9-9af509fb5889");
108     Uuid tenantId = Uuid.getDefaultInstance("54947df8-0e9e-4571-a2f9-9af509fb5889");
109     String portKey = portId.getValue();
110     Long elanTag = null;
111     Long longId = null;
112     PortOpDataEntry portOp = null;
113     PortOpData portOpData = null;
114     SubnetOpDataEntry subnetOp = null;
115     org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface
116         stateInterface;
117     List<String> lowerLayerIfList = new ArrayList<>();
118     NodeConnectorId nodeConnectorId = null;
119     VpnInterfaces vpnIntfaces = null;
120     VpnInstance vpnInstance = null;
121     Subnetmap subnetmap = null;
122     DPNTEPsInfo dpntePsInfo = null;
123     TunnelEndPoints tunlEndPts = null;
124     IpAddress ipAddress = null;
125     Ipv4Family ipv4Family = null;
126     String idKey = null;
127     AllocateIdOutput allocateIdOutput = null;
128     AllocateIdInput allocateIdInput = null;
129     Networks networks = null;
130     org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance vpnInstnce;
131
132     InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
133         .state.Interface> ifStateId = InterfaceUtils.buildStateInterfaceId(portKey);
134     InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier =
135         InstanceIdentifier.builder(SubnetOpData.class).child(SubnetOpDataEntry.class,
136             new SubnetOpDataEntryKey(subnetId)).build();
137     InstanceIdentifier<SubnetToDpn> dpnOpId = subOpIdentifier.child(SubnetToDpn.class, new SubnetToDpnKey(dpId));
138     InstanceIdentifier<DPNTEPsInfo> tunnelInfoId =
139         InstanceIdentifier.builder(DpnEndpoints.class).child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpId)).build();
140     InstanceIdentifier<PortOpDataEntry> portOpIdentifier =
141         InstanceIdentifier.builder(PortOpData.class).child(PortOpDataEntry.class,
142             new PortOpDataEntryKey(portKey)).build();
143     InstanceIdentifier<PortOpDataEntry> instPortOp =
144         InstanceIdentifier.builder(PortOpData.class).child(PortOpDataEntry.class,
145             new PortOpDataEntryKey(interfaceName)).build();
146     InstanceIdentifier<Subnetmap> subMapid = InstanceIdentifier.builder(Subnetmaps.class).child(Subnetmap.class, new
147         SubnetmapKey(subnetId)).build();
148     InstanceIdentifier<PortOpData> portOpIdentifr = InstanceIdentifier.builder(PortOpData.class).build();
149     InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id
150         .VpnInstance> instVpnInstance = getVpnInstanceToVpnIdIdentifier(interfaceName);
151     InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances
152         .VpnInstance>
153         vpnInstanceIdentifier = InstanceIdentifier.builder(VpnInstances.class).child(
154         org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance.class,
155         new org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances
156             .VpnInstanceKey(interfaceName)).build();
157     InstanceIdentifier<Networks> netsIdentifier =
158         InstanceIdentifier.builder(ExternalNetworks.class).child(Networks.class, new NetworksKey(portId)).build();
159
160     @Mock
161     DataBroker dataBroker;
162     @Mock
163     ReadOnlyTransaction mockReadTx;
164     @Mock
165     WriteTransaction mockWriteTx;
166     @Mock
167     IBgpManager bgpManager;
168     @Mock
169     VpnInterfaceManager vpnInterfaceManager;
170     @Mock
171     IdManagerService idManager;
172     @Mock
173     LockManagerService lockManager;
174     @Mock
175     SubnetOpDpnManager subnetOpDpnManager;
176     @Mock
177     LockManagerService lockManagerService;
178     @Mock
179     VpnOpDataSyncer vpnOpDataSyncer;
180     @Mock
181     VpnNodeListener vpnNodeListener;
182
183     VpnSubnetRouteHandler vpnSubnetRouteHandler;
184
185     Optional<Interface> optionalIfState;
186     Optional<SubnetOpDataEntry> optionalSubs;
187     Optional<SubnetToDpn> optionalSubDpn;
188     Optional<DPNTEPsInfo> optionalTunnelInfo;
189     Optional<PortOpDataEntry> optionalPortOp;
190     Optional<PortOpData> optionalPtOp;
191     Optional<Subnetmap> optionalSubnetMap;
192     Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance>
193         optionalVpnInstnce;
194     Optional<org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance>
195         vpnInstanceOptional;
196     Optional<Networks> optionalNetworks;
197
198     @Before
199     public void setUp() throws Exception {
200         setupMocks();
201
202         vpnSubnetRouteHandler = new VpnSubnetRouteHandler(dataBroker, subnetOpDpnManager, bgpManager,
203             vpnInterfaceManager, idManager, lockManagerService, vpnOpDataSyncer, vpnNodeListener);
204         final Future<RpcResult<AllocateIdOutput>> idOutputOptional =
205             RpcResultBuilder.success(allocateIdOutput).buildFuture();
206
207         optionalIfState = Optional.of(stateInterface);
208         optionalSubs = Optional.of(subnetOp);
209         optionalSubDpn = Optional.of(subnetToDpn);
210         optionalTunnelInfo = Optional.of(dpntePsInfo);
211         optionalPortOp = Optional.of(portOp);
212         optionalPtOp = Optional.of(portOpData);
213         optionalSubnetMap = Optional.of(subnetmap);
214         optionalVpnInstnce = Optional.of(vpnInstance);
215         vpnInstanceOptional = Optional.of(vpnInstnce);
216         optionalNetworks = Optional.of(networks);
217
218         doReturn(Futures.immediateCheckedFuture(optionalIfState)).when(mockReadTx).read(LogicalDatastoreType
219             .OPERATIONAL, ifStateId);
220         doReturn(Futures.immediateCheckedFuture(optionalSubs)).when(mockReadTx).read(LogicalDatastoreType
221             .OPERATIONAL, subOpIdentifier);
222         doReturn(Futures.immediateCheckedFuture(optionalSubDpn)).when(mockReadTx).read(LogicalDatastoreType
223             .OPERATIONAL, dpnOpId);
224         doReturn(Futures.immediateCheckedFuture(optionalTunnelInfo)).when(mockReadTx).read(LogicalDatastoreType
225             .CONFIGURATION, tunnelInfoId);
226         doReturn(Futures.immediateCheckedFuture(optionalPortOp)).when(mockReadTx).read(LogicalDatastoreType
227             .OPERATIONAL, portOpIdentifier);
228         doReturn(Futures.immediateCheckedFuture(optionalPtOp)).when(mockReadTx).read(LogicalDatastoreType
229             .OPERATIONAL, portOpIdentifr);
230         doReturn(Futures.immediateCheckedFuture(optionalPortOp)).when(mockReadTx).read(LogicalDatastoreType
231             .OPERATIONAL, instPortOp);
232         doReturn(Futures.immediateCheckedFuture(optionalSubnetMap)).when(mockReadTx).read(LogicalDatastoreType
233             .CONFIGURATION, subMapid);
234         doReturn(Futures.immediateCheckedFuture(optionalVpnInstnce)).when(mockReadTx).read(LogicalDatastoreType
235             .CONFIGURATION, instVpnInstance);
236         doReturn(Futures.immediateCheckedFuture(vpnInstanceOptional)).when(mockReadTx).read(LogicalDatastoreType
237             .CONFIGURATION, vpnInstanceIdentifier);
238         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
239             .CONFIGURATION, netsIdentifier);
240         doReturn(idOutputOptional).when(idManager).allocateId(allocateIdInput);
241
242         when(subnetOpDpnManager.getPortOpDataEntry(anyString())).thenReturn(portOp);
243     }
244
245     private void setupMocks() {
246
247         nexthopIp = "10.1.1.25";
248         idKey = "100:1.10.1.1.24";
249         poolName = "vpnservices";
250         elanTag = 2L;
251         longId = Long.valueOf("100");
252         nodeConnectorId = buildNodeConnectorId(dpId, 2L);
253         ipAddress = IpAddressBuilder.getDefaultInstance(nexthopIp);
254         vpnIntfaces = new VpnInterfacesBuilder().setInterfaceName(interfaceName).setKey(
255             new VpnInterfacesKey(interfaceName)).build();
256         List<VpnInterfaces> vpnInterfaces = new ArrayList<>();
257         final List<SubnetToDpn> subToDpn = new ArrayList<>();
258         final List<Uuid> portList = new ArrayList<>();
259         final List<PortOpDataEntry> listPortOpDataEntry = new ArrayList<>();
260         final List<TunnelEndPoints> tunnelEndPoints = new ArrayList<>();
261         vpnInterfaces.add(vpnIntfaces);
262         lowerLayerIfList.add(nodeConnectorId.getValue());
263         portOp = new PortOpDataEntryBuilder().setDpnId(dpId).setKey(new PortOpDataEntryKey(tenantId.getValue()))
264             .setSubnetId(subnetId).setPortId(tenantId.getValue()).build();
265         subnetToDpn = new SubnetToDpnBuilder().setDpnId(dpId).setKey(new SubnetToDpnKey(dpId)).setVpnInterfaces(
266             vpnInterfaces).build();
267         allocateIdOutput = new AllocateIdOutputBuilder().setIdValue(longId).build();
268         allocateIdInput = new AllocateIdInputBuilder().setPoolName(poolName).setIdKey(idKey).build();
269         subToDpn.add(subnetToDpn);
270         portList.add(portId);
271         listPortOpDataEntry.add(portOp);
272         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
273             .InterfaceBuilder ifaceBuilder = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
274             .interfaces.rev140508.interfaces.state.InterfaceBuilder();
275         ifaceBuilder.setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class)
276             .setAdminStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508
277                 .interfaces.state.Interface.AdminStatus.Up).setOperStatus(Interface.OperStatus.Up)
278             .setIfIndex(100).setKey(new InterfaceKey(interfaceName)).setName(interfaceName)
279             .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715
280                 .PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"));
281         stateInterface = ifaceBuilder.build();
282         subnetOp = new SubnetOpDataEntryBuilder().setElanTag(elanTag).setNhDpnId(dpId).setSubnetCidr(subnetIp)
283             .setSubnetId(subnetId).setKey(new SubnetOpDataEntryKey(subnetId)).setVpnName(interfaceName)
284             .setVrfId(primaryRd).setSubnetToDpn(subToDpn).setRouteAdvState(TaskState.Advertised).build();
285         vpnInstance = new VpnInstanceBuilder().setVpnId(elanTag).setVpnInstanceName(interfaceName)
286             .setVrfId(interfaceName).setKey(new VpnInstanceKey(interfaceName)).build();
287         subnetmap = new SubnetmapBuilder().setSubnetIp(subnetIp).setId(subnetId).setNetworkId(portId).setKey(new
288             SubnetmapKey(subnetId)).setRouterId(portId).setVpnId(subnetId)
289             .setTenantId(tenantId).setPortList(portList).build();
290         portOpData = new PortOpDataBuilder().setPortOpDataEntry(listPortOpDataEntry).build();
291         dpntePsInfo = new DPNTEPsInfoBuilder().setDPNID(dpId).setUp(true).setKey(new DPNTEPsInfoKey(dpId))
292             .setTunnelEndPoints(tunnelEndPoints).build();
293         tunlEndPts =
294             new TunnelEndPointsBuilder().setInterfaceName(interfaceName).setVLANID(10).setIpAddress(ipAddress).build();
295         tunnelEndPoints.add(tunlEndPts);
296         ipv4Family = new Ipv4FamilyBuilder().setRouteDistinguisher(routeDistinguishers).build();
297         vpnInstnce = new org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances
298             .VpnInstanceBuilder().setKey(new org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn
299             .rev140815.vpn.instances.VpnInstanceKey(interfaceName)).setVpnInstanceName(interfaceName)
300             .setIpv4Family(ipv4Family).build();
301         networks = new NetworksBuilder().setId(portId).setKey(new NetworksKey(portId)).build();
302         doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
303         doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
304         doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
305     }
306
307     @Ignore
308     @Test
309     public void testOnPortAddedToSubnet() {
310
311         vpnSubnetRouteHandler.onPortAddedToSubnet(subnetmap, portId);
312
313         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp,
314                 WriteTransaction.CREATE_MISSING_PARENTS);
315         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpn,
316                 WriteTransaction.CREATE_MISSING_PARENTS);
317         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, subOpIdentifier, subnetOp,
318                 WriteTransaction.CREATE_MISSING_PARENTS);
319     }
320
321     @Ignore
322     @Test
323     public void testOnPortRemovedFromSubnet() {
324
325         vpnSubnetRouteHandler.onPortRemovedFromSubnet(subnetmap, portId);
326
327         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
328         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpn,
329                 WriteTransaction.CREATE_MISSING_PARENTS);
330         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, subOpIdentifier, subnetOp,
331                 WriteTransaction.CREATE_MISSING_PARENTS);
332
333     }
334
335     @Ignore
336     @Test
337     public void testOnInterfaceUp() {
338
339         vpnSubnetRouteHandler.onInterfaceUp(dpId, interfaceName, subnetId);
340
341         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, instPortOp, portOp,
342                 WriteTransaction.CREATE_MISSING_PARENTS);
343         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpn,
344                 WriteTransaction.CREATE_MISSING_PARENTS);
345         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, subOpIdentifier, subnetOp,
346                 WriteTransaction.CREATE_MISSING_PARENTS);
347     }
348
349     @Ignore
350     @Test
351     public void testOnInterfaceDown() {
352
353         vpnSubnetRouteHandler.onInterfaceDown(dpId, interfaceName, subnetId);
354
355         // TODO: subnetOpDpnManager is mocked so not sure how this delete ever worked.
356         //verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, dpnOpId);
357         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, subOpIdentifier, subnetOp,
358                 WriteTransaction.CREATE_MISSING_PARENTS);
359
360     }
361
362     @Ignore
363     @Test
364     public void testOnSubnetAddedToVpn() {
365
366         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
367             .OPERATIONAL, subOpIdentifier);
368
369         vpnSubnetRouteHandler.onSubnetAddedToVpn(subnetmap, true, elanTag);
370
371         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpn,
372                 WriteTransaction.CREATE_MISSING_PARENTS);
373         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp,
374                 WriteTransaction.CREATE_MISSING_PARENTS);
375
376
377     }
378
379     @Ignore
380     @Test
381     public void testOnSubnetUpdatedInVpn() {
382
383         vpnSubnetRouteHandler.onSubnetUpdatedInVpn(subnetmap, elanTag);
384
385         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
386         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, subOpIdentifier);
387
388     }
389
390     @Ignore
391     @Test
392     public void testOnSubnetDeletedFromVpn() {
393
394         vpnSubnetRouteHandler.onSubnetDeletedFromVpn(subnetmap, true);
395
396         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
397         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, subOpIdentifier);
398
399     }
400
401     public static NodeConnectorId buildNodeConnectorId(BigInteger dpn, long portNo) {
402         return new NodeConnectorId(buildNodeConnectorString(dpn, portNo));
403     }
404
405     public static String buildNodeConnectorString(BigInteger dpn, long portNo) {
406         return new StringBuffer().append(IfmConstants.OF_URI_PREFIX).append(dpn)
407             .append(IfmConstants.OF_URI_SEPARATOR).append(portNo).toString();
408     }
409
410     public static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn
411         .instance.to
412         .vpn.id.VpnInstance> getVpnInstanceToVpnIdIdentifier(String vpnName) {
413         return InstanceIdentifier.builder(VpnInstanceToVpnId.class).child(org.opendaylight.yang.gen.v1.urn
414                 .opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance.class,
415             new org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id
416                 .VpnInstanceKey(vpnName)).build();
417     }
418
419 }