Drop unnecessary "throws Exception" declarations
[genius.git] / itm / itm-impl / src / test / java / org / opendaylight / genius / itm / cli / TepCommandHelperTest.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.cli;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.times;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17
18 import com.google.common.base.Optional;
19 import com.google.common.util.concurrent.Futures;
20 import java.io.ByteArrayOutputStream;
21 import java.io.PrintStream;
22 import java.math.BigInteger;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27 import org.junit.After;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.mockito.Mock;
32 import org.mockito.runners.MockitoJUnitRunner;
33 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
34 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
35 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
36 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
37 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
38 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
39 import org.opendaylight.genius.itm.globals.ITMConstants;
40 import org.opendaylight.genius.itm.impl.ItmUtils;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelListBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelOperStatus;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVtepsBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVtepsKey;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsKey;
78 import org.opendaylight.yangtools.concepts.ListenerRegistration;
79 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
80 import org.slf4j.Logger;
81 import org.slf4j.LoggerFactory;
82
83 @RunWith(MockitoJUnitRunner.class)
84 public class TepCommandHelperTest {
85
86     private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
87
88     int vlanId = 100 ;
89     int interval = 1000;
90     Boolean enabled = false ;
91     Class<? extends TunnelMonitoringTypeBase> monitorProtocol = ITMConstants.DEFAULT_MONITOR_PROTOCOL;
92     String tepIp1 = "192.168.56.30";
93     String tepIp2 = "192.168.56.102";
94     String tepIp3 = "168.56.102";
95     String tepIp4 = "150.168.56.102";
96     String gwyIp1 = "192.168.56.105";
97     String gwyIp2 = "192.168.56.106";
98     String subnetMask = "192.168.56.100/24";
99     String tunnelInterfaceName =  "1:phy0:100" ;
100     String sourceDevice = "hwvtep://192.168.101.30:6640/physicalswitch/s3";
101     String newline = System.getProperty("line.separator");
102     String destinationDevice = "hwvtep:1";
103     String portName1 = "phy0";
104     String transportZone1 = "TZA" ;
105     BigInteger dpId1 = BigInteger.valueOf(1);
106     BigInteger dpId2 = BigInteger.valueOf(2);
107     IpAddress gtwyIp1 = IpAddressBuilder.getDefaultInstance(gwyIp1);
108     IpAddress ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
109     IpAddress ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
110     IpPrefix ipPrefixTest = IpPrefixBuilder.getDefaultInstance(subnetMask);
111     ByteArrayOutputStream outContent = new ByteArrayOutputStream();
112     TransportZone transportZone = null;
113     TransportZone transportZoneNew = null;
114     TransportZones transportZones = null;
115     TransportZones transportZonesNew = null;
116     TunnelMonitorInterval tunnelMonitorInterval = null;
117     TunnelMonitorParams tunnelMonitorParams = null;
118     Subnets subnetsTest = null;
119     DeviceVteps deviceVteps = null;
120     Vteps vteps = null;
121     Vteps vtepsNew = null;
122     Vteps vtepsTest = null;
123     InternalTunnel internalTunnelTest = null;
124     TunnelList tunnelList = null;
125     TunnelList tunnelListTest = null;
126     StateTunnelList stateTunnelListTest = null ;
127     StateTunnelList stateTunnelTest = null ;
128     org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface
129             interfaceTest = null;
130     org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
131             interfaceTestNew = null;
132     org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
133             interfaceTestNewCase = null;
134     List<Subnets> subnetsList = new ArrayList<>() ;
135     List<DeviceVteps> deviceVtepsList = new ArrayList<>();
136     List<Vteps> vtepsList = new ArrayList<>();
137     List<TransportZone> transportZoneList = new ArrayList<>();
138     List<TransportZone> transportZoneListNew = new ArrayList<>();
139     List<InternalTunnel> internalTunnelList = new ArrayList<>();
140     List<StateTunnelList> stateTunnelList = new ArrayList<>() ;
141     List<String> lowerLayerIfList = new ArrayList<>();
142     List<InstanceIdentifier> instanceIdentifierList = new ArrayList<>();
143     java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
144     java.lang.Class<? extends TunnelTypeBase> tunnelType2 = TunnelTypeGre.class;
145
146     InstanceIdentifier<TransportZone> transportZoneIdentifier = InstanceIdentifier.builder(TransportZones.class)
147             .child(TransportZone.class, new TransportZoneKey(transportZone1)).build();
148     InstanceIdentifier<TransportZones> transportZonesIdentifier = InstanceIdentifier.builder(TransportZones.class).build();
149     InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier = InstanceIdentifier.builder(TunnelMonitorInterval.class).build();
150     InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsIdentifier = InstanceIdentifier.builder(TunnelMonitorParams.class).build();
151     InstanceIdentifier<Vteps> vtepsIdentifier = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new
152             TransportZoneKey(transportZone1))
153             .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId1,portName1)).build();
154     InstanceIdentifier<Vteps> vtepsIdentifierNew = InstanceIdentifier.builder(TransportZones.class).child(TransportZone
155             .class, new TransportZoneKey(transportZone1))
156             .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId2,portName1)).build();
157     InstanceIdentifier<Subnets> subnetsIdentifier = InstanceIdentifier.builder(TransportZones.class)
158             .child(TransportZone.class, new TransportZoneKey(transportZone1)).child(Subnets.class,
159                     new SubnetsKey(ipPrefixTest)).build();
160     InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
161             .state.Interface> interfaceIdentifier = ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
162     InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
163             .Interface> interfaceIdentifierNew = ItmUtils.buildId(tunnelInterfaceName);
164
165     @Mock DataBroker dataBroker;
166     @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
167     @Mock ReadOnlyTransaction mockReadTx;
168     @Mock WriteTransaction mockWriteTx;
169     @Mock Map<String, Map<SubnetObject, List<Vteps>>> tZones;
170
171     Optional<TransportZone> optionalTransportZone;
172     Optional<TransportZones> optionalTransportZones;
173     Optional<TunnelMonitorInterval> optionalTunnelMonitorInterval;
174     Optional<TunnelMonitorParams> optionalTunnelMonitorParams;
175     Optional<Vteps> optionalVteps;
176     Optional<Subnets> optionalSubnets;
177     Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
178             .Interface> ifStateOptional;
179     Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface>
180             ifStateOptionalNew;
181
182     TepCommandHelper tepCommandHelper ;
183
184     @Before
185     public void setUp() {
186         when(dataBroker.registerDataChangeListener(
187                 any(LogicalDatastoreType.class),
188                 any(InstanceIdentifier.class),
189                 any(DataChangeListener.class),
190                 any(AsyncDataBroker.DataChangeScope.class)))
191                 .thenReturn(dataChangeListenerRegistration);
192         setupMocks();
193
194         optionalTransportZone = Optional.of(transportZone);
195         optionalTransportZones = Optional.of(transportZones);
196         optionalTunnelMonitorInterval = Optional.of(tunnelMonitorInterval);
197         optionalTunnelMonitorParams = Optional.of(tunnelMonitorParams);
198         optionalVteps = Optional.of(vteps);
199         optionalSubnets = Optional.of(subnetsTest);
200         ifStateOptional = Optional.of(interfaceTest);
201         ifStateOptionalNew = Optional.of(interfaceTestNew);
202
203         doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
204                 .CONFIGURATION,transportZoneIdentifier);
205         doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
206                 .CONFIGURATION,transportZonesIdentifier);
207         doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorInterval)).when(mockReadTx).read
208                 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
209         doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorParams)).when(mockReadTx).read
210                 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
211         doReturn(Futures.immediateCheckedFuture(optionalVteps)).when(mockReadTx).read(LogicalDatastoreType
212                 .CONFIGURATION,vtepsIdentifier);
213         doReturn(Futures.immediateCheckedFuture(optionalSubnets)).when(mockReadTx).read(LogicalDatastoreType
214                 .CONFIGURATION,subnetsIdentifier);
215         doReturn(Futures.immediateCheckedFuture(ifStateOptional)).when(mockReadTx).read(LogicalDatastoreType
216                 .OPERATIONAL,interfaceIdentifier);
217         doReturn(Futures.immediateCheckedFuture(ifStateOptionalNew)).when(mockReadTx).read(LogicalDatastoreType
218                 .CONFIGURATION,interfaceIdentifierNew);
219
220         tepCommandHelper = new TepCommandHelper(dataBroker);
221
222     }
223
224     @After
225     public void cleanUp() {
226     }
227
228     private void setupMocks() {
229
230         System.setOut(new PrintStream(outContent));
231         instanceIdentifierList.add(transportZoneIdentifier);
232         instanceIdentifierList.add(vtepsIdentifier);
233         instanceIdentifierList.add(subnetsIdentifier);
234         deviceVteps = new DeviceVtepsBuilder().setIpAddress(ipAddress1).setKey(new DeviceVtepsKey(ipAddress1,sourceDevice))
235                 .setNodeId(sourceDevice).setTopologyId(destinationDevice).build();
236         vteps = new VtepsBuilder().setPortname(portName1).setDpnId(dpId2).setIpAddress(ipAddress1).setKey(new
237                 VtepsKey(dpId2,portName1)).build();
238         vtepsNew = new VtepsBuilder().setPortname(portName1).setDpnId(dpId1).setIpAddress(ipAddress1).setKey(new
239                 VtepsKey(dpId1,portName1)).build();
240         vtepsTest = new VtepsBuilder().build();
241         deviceVtepsList.add(deviceVteps);
242         vtepsList.add(vteps);
243         subnetsTest = new SubnetsBuilder().setGatewayIp(gtwyIp1).setVlanId(vlanId).setKey(new SubnetsKey(ipPrefixTest))
244                 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
245         subnetsList.add(subnetsTest);
246         transportZone = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType1).setKey(new
247                 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
248         transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).setKey(new
249                 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
250         transportZoneList.add(transportZone);
251         transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
252         transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
253         tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
254         tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
255         internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
256                 .setTunnelInterfaceName(tunnelInterfaceName).setKey(new InternalTunnelKey(dpId1,dpId2,tunnelType1))
257                 .setTransportType(tunnelType1).build();
258         internalTunnelList.add(internalTunnelTest);
259         stateTunnelListTest = new StateTunnelListBuilder().setTunnelInterfaceName(tunnelInterfaceName).setOperState(TunnelOperStatus.Up).build();
260         stateTunnelList.add(stateTunnelListTest);
261         tunnelList = new TunnelListBuilder().setInternalTunnel(internalTunnelList).build();
262         tunnelListTest = new TunnelListBuilder().build();
263         lowerLayerIfList.add(dpId1.toString());
264         interfaceTest = new InterfaceBuilder().setOperStatus(Interface.OperStatus.Up).setAdminStatus
265                 (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.AdminStatus.Up)
266                 .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"))
267                 .setIfIndex(100).setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class).build();
268         interfaceTestNew = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
269                 TunnelTypeVxlan.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled,monitorProtocol, interval, false);
270         interfaceTestNewCase = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
271                 TunnelTypeGre.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled, monitorProtocol, interval, false);
272         doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
273         doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
274         doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
275     }
276
277     @Test
278     public void testCreateLocalCacheTzonesEmpty(){
279
280         try {
281             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
282         } catch (TepException e) {
283             LOG.error(e.getMessage());
284         }
285
286         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
287
288     }
289
290     @Test
291     public void testCreateLocalCacheWithoutcheckExistingSubnet(){
292
293         IpAddress gatewayIpObj = new IpAddress("0.0.0.0".toCharArray());
294         IpPrefix subnetMaskObj = new IpPrefix(subnetMask.toCharArray());
295         SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj);
296         SubnetObject subObCli = new SubnetObject(gatewayIpObj, subnetsKey, subnetMaskObj, vlanId);
297         Map<SubnetObject, List<Vteps>> subVtepMapTemp = new HashMap<>();
298         subVtepMapTemp.put(subObCli, vtepsList);
299         transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
300
301         Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
302
303         doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
304                 .CONFIGURATION,transportZoneIdentifier);
305         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
306                 .CONFIGURATION,transportZonesIdentifier);
307
308         try {
309             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
310             tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp1, transportZone1, null);
311         } catch (TepException e) {
312             LOG.error(e.getMessage());
313         }
314
315
316         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
317
318     }
319
320     @Test
321     public void testCreateLocalCacheWithcheckExistingSubnet() {
322
323         transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
324
325         Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
326
327         doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
328                 .CONFIGURATION,transportZoneIdentifier);
329         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
330                 .CONFIGURATION,transportZonesIdentifier);
331
332
333         try {
334             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
335             tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp2, transportZone1, null);
336         } catch (TepException e) {
337             LOG.error(e.getMessage());
338         }
339
340         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
341
342     }
343
344     @Test
345     public void testCreateLocalCacheInvalidIp() {
346
347         String output = null;
348         try {
349             tepCommandHelper.createLocalCache(dpId1, portName1, vlanId, tepIp3, subnetMask, gwyIp1, transportZone1, null);
350         } catch (Exception e) {
351             output = e.getMessage() + newline;
352         }
353
354         assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,output);
355
356     }
357
358     @Test
359     public void testCreateLocalCacheGtwyIpNull(){
360
361         try {
362             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1, null);
363         } catch (TepException e) {
364             LOG.error(e.getMessage());
365         }
366
367         LOG.debug("gateway is null");
368
369     }
370
371     @Test
372     public void testCreateLocalCacheInvalidSubnetMask(){
373
374         String output = null;
375         try {
376             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,tepIp2,gwyIp1,transportZone1, null);
377         } catch (TepException e) {
378             output = e.getMessage()+newline;
379         }
380
381         String newline = System.getProperty("line.separator");
382         assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,output);
383
384     }
385
386     @Test
387     public void testCreateLocalCadcheMismatchIpwithSubnet() {
388
389         String output = null;
390         try {
391             tepCommandHelper.createLocalCache(dpId1, portName1, vlanId, tepIp4, subnetMask, gwyIp1, transportZone1, null);
392         } catch (TepException e) {
393             output = e.getMessage() + newline;
394         }
395
396         assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,output);
397
398     }
399
400     @Test
401     public void testConfigureTunnelType(){
402
403         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
404                 .CONFIGURATION,transportZoneIdentifier);
405
406         tepCommandHelper.configureTunnelType(transportZone1,"VXLAN");
407
408         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
409         verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZones,true);
410
411     }
412
413     @Test
414     public void testConfigureTunnelMonitorInterval(){
415
416         TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
417
418         tepCommandHelper.configureTunnelMonitorInterval(interval);
419
420         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
421         verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier,tunnelMonitor,true);
422
423     }
424
425     @Test
426     public void testConfigureTunnelMonitorParams(){
427
428         TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled).setMonitorProtocol(monitorProtocol).build();
429
430         tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
431
432         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
433         verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,tunnelMonitor,true);
434
435     }
436
437     @Test
438     public void testDeleteVtep(){
439
440         try {
441             tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, gwyIp1, transportZone1, null);
442         } catch (Exception e) {
443             LOG.error(e.getMessage());
444         }
445
446         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
447         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
448
449     }
450
451     @Test
452     public void testDeleteVtepInvalidIp(){
453
454         String output = null;
455         try {
456             tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp3, subnetMask, gwyIp1, transportZone1, null);
457         }catch (TepException e) {
458             output = e.getMessage() +newline;
459         }
460
461         String newline = System.getProperty("line.separator");
462         assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,output);
463
464     }
465
466     @Test
467     public void testDeleteVtepInvalidSubnetMask(){
468
469         String output = null;
470         try {
471             tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, tepIp1, gwyIp1, transportZone1, null);
472         } catch (TepException e) {
473             output = e.getMessage() + newline;
474         }
475
476         assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,output);
477
478     }
479
480     @Test
481     public void testDeleteVtepGatewayIpNull(){
482
483         try {
484             tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, null, transportZone1, null);
485         }  catch (Exception e) {
486             LOG.error(e.getMessage());
487         }
488
489         LOG.debug("gateway is null in deleteVtep");
490
491     }
492
493     @Test
494     public void testDeleteVtepIpSubnetMismatch(){
495
496         String output = null;
497         try {
498             tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp4, subnetMask, gwyIp1, transportZone1, null);
499         } catch (Exception e) {
500             output = e.getMessage()+ newline;
501         }
502
503         assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,output);
504
505     }
506
507     @Test
508     public void testBuildTepsTunnelTypeVxlan(){
509
510         try {
511             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
512         } catch (TepException e) {
513             LOG.error(e.getMessage());
514         }
515         tepCommandHelper.buildTeps();
516
517         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
518         verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
519
520     }
521
522     @Test
523     public void testBuildTepsTunnelTypeGre(){
524
525         optionalTransportZone = Optional.of(transportZoneNew);
526
527         doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
528                 .CONFIGURATION,transportZoneIdentifier);
529
530         try {
531             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
532         } catch (TepException e) {
533             LOG.error(e.getMessage());
534         }
535         tepCommandHelper.buildTeps();
536
537         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
538         verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
539
540     }
541
542
543     @Test
544     public void testBuildTepsTransportZoneAbsent() throws TepException {
545
546         optionalTransportZone = Optional.absent();
547
548         doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
549                 .CONFIGURATION,transportZoneIdentifier);
550
551         tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
552         tepCommandHelper.buildTeps();
553
554         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
555         verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
556
557     }
558
559     @Test
560     public void testShowTepsWithTransportZone(){
561
562         try {
563             tepCommandHelper.showTeps(enabled, interval, null);
564         } catch (TepException e){
565             LOG.error(e.getMessage());
566         }
567
568         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
569
570     }
571
572     @Test
573     public void testShowTepsWithoutTransportZone(){
574
575         optionalTransportZones = Optional.of(transportZonesNew);
576
577         doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
578                 .CONFIGURATION,transportZonesIdentifier);
579
580         String output = null;
581         try {
582             tepCommandHelper.showTeps(enabled, interval, null);
583         } catch (TepException e) {
584             output = e.getMessage() + newline;
585         }
586
587         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
588         assertEquals("No teps configured" + newline,output);
589
590     }
591
592     @Test
593     public void testDeleteOnCommit(){
594
595         transportZoneList.add(transportZone);
596         transportZoneList.add(transportZoneNew);
597         transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
598         optionalTransportZones = Optional.of(transportZones);
599
600         doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
601                 .CONFIGURATION,transportZonesIdentifier);
602
603         try {
604             tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, gwyIp1, transportZone1, null);
605         } catch (TepException e) {
606             LOG.error(e.getMessage());
607         }
608         tepCommandHelper.deleteOnCommit();
609
610         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
611         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
612         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
613         verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,vtepsIdentifierNew);
614         verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
615         verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
616
617     }
618
619     @Test
620     public void testGetTransportZone(){
621
622         tepCommandHelper.getTransportZone(transportZone1);
623
624         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
625     }
626
627     @Test
628     public void testIsInCache(){
629
630         try {
631             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
632         } catch (TepException e) {
633             LOG.error(e.getMessage());
634         }
635         tepCommandHelper.isInCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
636
637         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
638
639     }
640
641     @Test
642     public void testValidateForDuplicates(){
643
644         try {
645             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
646         } catch (TepException e) {
647             LOG.error(e.getMessage());
648         }
649         tepCommandHelper.validateForDuplicates(vtepsTest,transportZone1);
650
651         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
652
653     }
654
655     @Test
656     public void testCheckTepPerTzPerDpn(){
657
658         try {
659             tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
660         } catch (TepException e) {
661             LOG.error(e.getMessage());
662         }
663         tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
664
665         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
666
667     }
668
669 }