Fix ITM UT failures
[genius.git] / itm / itm-impl / src / test / java / org / opendaylight / genius / itm / impl / ItmInternalTunnelDeleteTest.java
1 /*
2  * Copyright (c) 2016 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.genius.itm.impl;
10
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.verify;
13
14 import com.google.common.base.Optional;
15 import com.google.common.util.concurrent.Futures;
16 import java.math.BigInteger;
17 import java.util.ArrayList;
18 import java.util.List;
19 import org.junit.After;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.Mock;
24 import org.mockito.runners.MockitoJUnitRunner;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
27 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
29 import org.opendaylight.genius.itm.confighelpers.ItmInternalTunnelDeleteWorker;
30 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
31 import org.opendaylight.infrautils.caches.baseimpl.internal.CacheManagersRegistryImpl;
32 import org.opendaylight.infrautils.caches.guava.internal.GuavaCacheProvider;
33 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBfd;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnEndpoints;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnEndpointsBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfoBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfoKey;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsKey;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
59 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
60
61 @RunWith(MockitoJUnitRunner.class)
62 public class ItmInternalTunnelDeleteTest {
63
64     BigInteger dpId1 = BigInteger.valueOf(1);
65     BigInteger dpId2 = BigInteger.valueOf(2);
66     int vlanId = 100 ;
67     int interval = 1000;
68     String portName1 = "phy0";
69     String portName2 = "phy1" ;
70     String parentInterfaceName = "1:phy0:100" ;
71     String transportZone1 = "TZA" ;
72     String subnetIp = "10.1.1.24";
73     String tepIp1 = "192.168.56.101";
74     String tepIp2 = "192.168.56.102";
75     String gwyIp1 = "0.0.0.0";
76     String gwyIp2 = "0.0.0.1";
77     IpAddress ipAddress1 = null;
78     IpAddress ipAddress2 = null;
79     IpAddress gtwyIp1 = null;
80     IpAddress gtwyIp2 = null;
81     IpPrefix ipPrefixTest = null;
82     DPNTEPsInfo dpntePsInfoVxlan = null;
83     DPNTEPsInfo dpntePsInfoVxlanNew = null;
84     TunnelEndPoints tunnelEndPointsVxlan = null;
85     TunnelEndPoints tunnelEndPointsVxlanNew = null;
86     DpnEndpoints dpnEndpoints = null;
87     List<DPNTEPsInfo> meshDpnListVxlan = new ArrayList<>() ;
88     List<DPNTEPsInfo> cfgdDpnListVxlan = new ArrayList<>() ;
89     List<TunnelEndPoints> tunnelEndPointsListVxlan = new ArrayList<>();
90     List<TunnelEndPoints> tunnelEndPointsListVxlanNew = new ArrayList<>();
91     java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
92     TunnelMonitorParams tunnelMonitorParams = null;
93     TunnelMonitorInterval tunnelMonitorInterval = null;
94     InternalTunnel internalTunnel = new InternalTunnelBuilder().build();
95     InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsInstanceIdentifier =
96             InstanceIdentifier.create(TunnelMonitorParams.class);
97     InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier =
98             InstanceIdentifier.create(TunnelMonitorInterval.class);
99     Class<? extends TunnelMonitoringTypeBase> monitorProtocol = TunnelMonitoringTypeBfd.class;
100     InstanceIdentifier<InternalTunnel> internalTunnelIdentifier = InstanceIdentifier.builder(TunnelList.class)
101             .child(InternalTunnel.class, new InternalTunnelKey(new BigInteger("1"),
102                     new BigInteger("2"), tunnelType1)).build();
103
104     @Mock DataBroker dataBroker;
105     @Mock ReadOnlyTransaction mockReadTx;
106     @Mock WriteTransaction mockWriteTx;
107     @Mock IdManagerService idManagerService;
108     @Mock IMdsalApiManager mdsalApiManager;
109     @Mock JobCoordinator jobCoordinator;
110     ItmInternalTunnelDeleteWorker itmInternalTunnelDeleteWorker;
111
112     Optional<TunnelMonitorParams> tunnelMonitorParamsOptional;
113     Optional<TunnelMonitorInterval> tunnelMonitorIntervalOptional ;
114     Optional<InternalTunnel> internalTunnelOptional ;
115
116     @Before
117     public void setUp() {
118         setupMocks();
119
120         tunnelMonitorParamsOptional = Optional.of(tunnelMonitorParams);
121         tunnelMonitorIntervalOptional = Optional.of(tunnelMonitorInterval);
122         internalTunnelOptional = Optional.of(internalTunnel);
123
124         doReturn(Futures.immediateCheckedFuture(tunnelMonitorParamsOptional)).when(mockReadTx)
125                 .read(LogicalDatastoreType.CONFIGURATION,
126                         tunnelMonitorParamsInstanceIdentifier);
127         doReturn(Futures.immediateCheckedFuture(tunnelMonitorIntervalOptional)).when(mockReadTx)
128                 .read(LogicalDatastoreType.CONFIGURATION,
129                 tunnelMonitorIntervalIdentifier);
130         doReturn(Futures.immediateCheckedFuture(internalTunnelOptional)).when(mockReadTx)
131                 .read(LogicalDatastoreType.CONFIGURATION,internalTunnelIdentifier);
132
133         itmInternalTunnelDeleteWorker = new ItmInternalTunnelDeleteWorker(dataBroker, jobCoordinator,
134                 new TunnelMonitoringConfig(dataBroker, new GuavaCacheProvider(new CacheManagersRegistryImpl())));
135     }
136
137     @After
138     public void cleanUp() {
139     }
140
141     private void setupMocks() {
142
143         ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
144         ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
145         ipPrefixTest = IpPrefixBuilder.getDefaultInstance(subnetIp + "/24");
146         gtwyIp1 = IpAddressBuilder.getDefaultInstance(gwyIp1);
147         gtwyIp2 = IpAddressBuilder.getDefaultInstance(gwyIp2);
148         tunnelEndPointsVxlan = new TunnelEndPointsBuilder().setVLANID(vlanId).setPortname(portName1)
149                 .setIpAddress(ipAddress1).setGwIpAddress(gtwyIp1).setInterfaceName(parentInterfaceName)
150                 .setTzMembership(ItmUtils.createTransportZoneMembership(transportZone1))
151                 .setTunnelType(tunnelType1).setSubnetMask(ipPrefixTest)
152                 .setKey(new TunnelEndPointsKey(ipAddress1,portName1,tunnelType1,vlanId)).build();
153         tunnelEndPointsVxlanNew = new TunnelEndPointsBuilder().setVLANID(vlanId).setPortname(portName2)
154                 .setIpAddress(ipAddress2).setGwIpAddress(gtwyIp2).setInterfaceName(parentInterfaceName)
155                 .setTzMembership(ItmUtils.createTransportZoneMembership(transportZone1)).setTunnelType(tunnelType1)
156                 .setSubnetMask(ipPrefixTest).build();
157         tunnelEndPointsListVxlan.add(tunnelEndPointsVxlan);
158         tunnelEndPointsListVxlanNew.add(tunnelEndPointsVxlanNew);
159         dpntePsInfoVxlan = new DPNTEPsInfoBuilder().setDPNID(dpId1).setKey(new DPNTEPsInfoKey(dpId1)).setUp(true)
160                 .setTunnelEndPoints(tunnelEndPointsListVxlan).build();
161         dpntePsInfoVxlanNew = new DPNTEPsInfoBuilder().setDPNID(dpId2).setKey(new DPNTEPsInfoKey(dpId2)).setUp(true)
162                 .setTunnelEndPoints(tunnelEndPointsListVxlanNew).setTunnelEndPoints(tunnelEndPointsListVxlanNew)
163                 .build();
164         tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).setMonitorProtocol(monitorProtocol)
165                 .build();
166         tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
167         cfgdDpnListVxlan.add(dpntePsInfoVxlan);
168         meshDpnListVxlan.add(dpntePsInfoVxlan);
169         meshDpnListVxlan.add(dpntePsInfoVxlanNew);
170         dpnEndpoints = new DpnEndpointsBuilder().setDPNTEPsInfo(cfgdDpnListVxlan).build();
171
172         doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
173         doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
174         doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
175     }
176
177     // Since all the unit test cases will be written to the new way, this should be taken care then.
178     @Test
179     public void testDeleteTunnels() {
180
181         InstanceIdentifier<TunnelEndPoints> tunnelEndPointsIdentifier =
182                 InstanceIdentifier.builder(DpnEndpoints.class).child(DPNTEPsInfo.class, dpntePsInfoVxlan.getKey())
183                         .child(TunnelEndPoints.class,tunnelEndPointsVxlan.getKey()).build();
184         InstanceIdentifier<DpnEndpoints> dpnEndpointsIdentifier =
185                 InstanceIdentifier.builder(DpnEndpoints.class).build();
186         final InstanceIdentifier<DPNTEPsInfo> dpntePsInfoIdentifier = InstanceIdentifier.builder(DpnEndpoints.class)
187                 .child(DPNTEPsInfo.class, dpntePsInfoVxlan.getKey()).build();
188
189         Optional<DpnEndpoints> dpnEndpointsOptional = Optional.of(dpnEndpoints);
190
191         doReturn(Futures.immediateCheckedFuture(dpnEndpointsOptional)).when(mockReadTx).read(LogicalDatastoreType
192                 .CONFIGURATION,dpnEndpointsIdentifier);
193
194         itmInternalTunnelDeleteWorker.deleteTunnels(mdsalApiManager, cfgdDpnListVxlan,meshDpnListVxlan);
195         //FIXME: This verification is broken revisit this.
196         //verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,tunnelEndPointsIdentifier);
197         verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,dpntePsInfoIdentifier);
198     }
199 }