2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.genius.itm.cli;
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;
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;
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
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelListBuilder;
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.rev160406.TransportZones;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVtepsBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVtepsKey;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsKey;
77 import org.opendaylight.yangtools.concepts.ListenerRegistration;
78 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
79 import org.slf4j.Logger;
80 import org.slf4j.LoggerFactory;
82 @RunWith(MockitoJUnitRunner.class)
83 public class TepCommandHelperTest {
85 private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
89 Boolean enabled = false ;
90 Class<? extends TunnelMonitoringTypeBase> monitorProtocol = ITMConstants.DEFAULT_MONITOR_PROTOCOL;
91 String tepIp1 = "192.168.56.30";
92 String tepIp2 = "192.168.56.102";
93 String tepIp3 = "168.56.102";
94 String tepIp4 = "150.168.56.102";
95 String gwyIp1 = "192.168.56.105";
96 String gwyIp2 = "192.168.56.106";
97 String subnetMask = "192.168.56.100/24";
98 String tunnelInterfaceName = "1:phy0:100" ;
99 String sourceDevice = "hwvtep://192.168.101.30:6640/physicalswitch/s3";
100 String newline = System.getProperty("line.separator");
101 String destinationDevice = "hwvtep:1";
102 String portName1 = "phy0";
103 String transportZone1 = "TZA" ;
104 BigInteger dpId1 = BigInteger.valueOf(1);
105 BigInteger dpId2 = BigInteger.valueOf(2);
106 IpAddress gtwyIp1 = IpAddressBuilder.getDefaultInstance(gwyIp1);
107 IpAddress ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
108 IpAddress ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
109 IpPrefix ipPrefixTest = IpPrefixBuilder.getDefaultInstance(subnetMask);
110 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
111 TransportZone transportZone = null;
112 TransportZone transportZoneNew = null;
113 TransportZones transportZones = null;
114 TransportZones transportZonesNew = null;
115 TunnelMonitorInterval tunnelMonitorInterval = null;
116 TunnelMonitorParams tunnelMonitorParams = null;
117 Subnets subnetsTest = null;
118 DeviceVteps deviceVteps = null;
120 Vteps vtepsNew = null;
121 Vteps vtepsTest = null;
122 InternalTunnel internalTunnelTest = null;
123 TunnelList tunnelList = null;
124 TunnelList tunnelListTest = null;
125 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface
126 interfaceTest = null;
127 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
128 interfaceTestNew = null;
129 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
130 interfaceTestNewCase = null;
131 List<Subnets> subnetsList = new ArrayList<>() ;
132 List<DeviceVteps> deviceVtepsList = new ArrayList<>();
133 List<Vteps> vtepsList = new ArrayList<>();
134 List<TransportZone> transportZoneList = new ArrayList<>();
135 List<TransportZone> transportZoneListNew = new ArrayList<>();
136 List<InternalTunnel> internalTunnelList = new ArrayList<>();
137 List<String> lowerLayerIfList = new ArrayList<>();
138 List<InstanceIdentifier> instanceIdentifierList = new ArrayList<>();
139 java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
140 java.lang.Class<? extends TunnelTypeBase> tunnelType2 = TunnelTypeGre.class;
142 InstanceIdentifier<TransportZone> transportZoneIdentifier = InstanceIdentifier.builder(TransportZones.class)
143 .child(TransportZone.class, new TransportZoneKey(transportZone1)).build();
144 InstanceIdentifier<TransportZones> transportZonesIdentifier = InstanceIdentifier.builder(TransportZones.class).build();
145 InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier = InstanceIdentifier.builder(TunnelMonitorInterval.class).build();
146 InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsIdentifier = InstanceIdentifier.builder(TunnelMonitorParams.class).build();
147 InstanceIdentifier<Vteps> vtepsIdentifier = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new
148 TransportZoneKey(transportZone1))
149 .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId1,portName1)).build();
150 InstanceIdentifier<Vteps> vtepsIdentifierNew = InstanceIdentifier.builder(TransportZones.class).child(TransportZone
151 .class, new TransportZoneKey(transportZone1))
152 .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId2,portName1)).build();
153 InstanceIdentifier<Subnets> subnetsIdentifier = InstanceIdentifier.builder(TransportZones.class)
154 .child(TransportZone.class, new TransportZoneKey(transportZone1)).child(Subnets.class,
155 new SubnetsKey(ipPrefixTest)).build();
156 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
157 .state.Interface> interfaceIdentifier = ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
158 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
159 .Interface> interfaceIdentifierNew = ItmUtils.buildId(tunnelInterfaceName);
161 @Mock DataBroker dataBroker;
162 @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
163 @Mock ReadOnlyTransaction mockReadTx;
164 @Mock WriteTransaction mockWriteTx;
165 @Mock Map<String, Map<SubnetObject, List<Vteps>>> tZones;
167 Optional<TransportZone> optionalTransportZone;
168 Optional<TransportZones> optionalTransportZones;
169 Optional<TunnelMonitorInterval> optionalTunnelMonitorInterval;
170 Optional<TunnelMonitorParams> optionalTunnelMonitorParams;
171 Optional<Vteps> optionalVteps;
172 Optional<Subnets> optionalSubnets;
173 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
174 .Interface> ifStateOptional;
175 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface>
178 TepCommandHelper tepCommandHelper ;
181 public void setUp() throws Exception {
182 when(dataBroker.registerDataChangeListener(
183 any(LogicalDatastoreType.class),
184 any(InstanceIdentifier.class),
185 any(DataChangeListener.class),
186 any(AsyncDataBroker.DataChangeScope.class)))
187 .thenReturn(dataChangeListenerRegistration);
190 optionalTransportZone = Optional.of(transportZone);
191 optionalTransportZones = Optional.of(transportZones);
192 optionalTunnelMonitorInterval = Optional.of(tunnelMonitorInterval);
193 optionalTunnelMonitorParams = Optional.of(tunnelMonitorParams);
194 optionalVteps = Optional.of(vteps);
195 optionalSubnets = Optional.of(subnetsTest);
196 ifStateOptional = Optional.of(interfaceTest);
197 ifStateOptionalNew = Optional.of(interfaceTestNew);
199 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
200 .CONFIGURATION,transportZoneIdentifier);
201 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
202 .CONFIGURATION,transportZonesIdentifier);
203 doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorInterval)).when(mockReadTx).read
204 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
205 doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorParams)).when(mockReadTx).read
206 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
207 doReturn(Futures.immediateCheckedFuture(optionalVteps)).when(mockReadTx).read(LogicalDatastoreType
208 .CONFIGURATION,vtepsIdentifier);
209 doReturn(Futures.immediateCheckedFuture(optionalSubnets)).when(mockReadTx).read(LogicalDatastoreType
210 .CONFIGURATION,subnetsIdentifier);
211 doReturn(Futures.immediateCheckedFuture(ifStateOptional)).when(mockReadTx).read(LogicalDatastoreType
212 .OPERATIONAL,interfaceIdentifier);
213 doReturn(Futures.immediateCheckedFuture(ifStateOptionalNew)).when(mockReadTx).read(LogicalDatastoreType
214 .CONFIGURATION,interfaceIdentifierNew);
216 tepCommandHelper = new TepCommandHelper(dataBroker);
221 public void cleanUp() {
224 private void setupMocks() {
226 System.setOut(new PrintStream(outContent));
227 instanceIdentifierList.add(transportZoneIdentifier);
228 instanceIdentifierList.add(vtepsIdentifier);
229 instanceIdentifierList.add(subnetsIdentifier);
230 deviceVteps = new DeviceVtepsBuilder().setIpAddress(ipAddress1).setKey(new DeviceVtepsKey(ipAddress1,sourceDevice))
231 .setNodeId(sourceDevice).setTopologyId(destinationDevice).build();
232 vteps = new VtepsBuilder().setPortname(portName1).setDpnId(dpId2).setIpAddress(ipAddress1).setKey(new
233 VtepsKey(dpId2,portName1)).build();
234 vtepsNew = new VtepsBuilder().setPortname(portName1).setDpnId(dpId1).setIpAddress(ipAddress1).setKey(new
235 VtepsKey(dpId1,portName1)).build();
236 vtepsTest = new VtepsBuilder().build();
237 deviceVtepsList.add(deviceVteps);
238 vtepsList.add(vteps);
239 subnetsTest = new SubnetsBuilder().setGatewayIp(gtwyIp1).setVlanId(vlanId).setKey(new SubnetsKey(ipPrefixTest))
240 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
241 subnetsList.add(subnetsTest);
242 transportZone = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType1).setKey(new
243 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
244 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).setKey(new
245 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
246 transportZoneList.add(transportZone);
247 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
248 transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
249 tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
250 tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
251 internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
252 .setTunnelInterfaceName(tunnelInterfaceName).setKey(new InternalTunnelKey(dpId1,dpId2,tunnelType1))
253 .setTransportType(tunnelType1).build();
254 internalTunnelList.add(internalTunnelTest);
255 tunnelList = new TunnelListBuilder().setInternalTunnel(internalTunnelList).build();
256 tunnelListTest = new TunnelListBuilder().build();
257 lowerLayerIfList.add(dpId1.toString());
258 interfaceTest = new InterfaceBuilder().setOperStatus(Interface.OperStatus.Up).setAdminStatus
259 (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.AdminStatus.Up)
260 .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"))
261 .setIfIndex(100).setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class).build();
262 interfaceTestNew = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
263 TunnelTypeVxlan.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled,monitorProtocol, interval);
264 interfaceTestNewCase = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
265 TunnelTypeGre.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled, monitorProtocol, interval);
266 doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
267 doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
268 doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
272 public void testCreateLocalCacheTzonesEmpty(){
274 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
276 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
281 public void testCreateLocalCacheWithoutcheckExistingSubnet(){
283 IpAddress gatewayIpObj = new IpAddress("0.0.0.0".toCharArray());
284 IpPrefix subnetMaskObj = new IpPrefix(subnetMask.toCharArray());
285 SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj);
286 SubnetObject subObCli = new SubnetObject(gatewayIpObj, subnetsKey, subnetMaskObj, vlanId);
287 Map<SubnetObject, List<Vteps>> subVtepMapTemp = new HashMap<>();
288 subVtepMapTemp.put(subObCli, vtepsList);
289 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
291 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
293 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
294 .CONFIGURATION,transportZoneIdentifier);
295 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
296 .CONFIGURATION,transportZonesIdentifier);
298 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
299 tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp1, transportZone1);
301 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
306 public void testCreateLocalCacheWithcheckExistingSubnet(){
308 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
310 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
312 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
313 .CONFIGURATION,transportZoneIdentifier);
314 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
315 .CONFIGURATION,transportZonesIdentifier);
317 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
318 tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp2, transportZone1);
320 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
325 public void testCreateLocalCacheInvalidIp(){
327 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp3,subnetMask,gwyIp1,transportZone1);
329 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,outContent.toString());
334 public void testCreateLocalCacheGtwyIpNull(){
336 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1);
338 LOG.debug("gateway is null");
343 public void testCreateLocalCacheInvalidSubnetMask(){
345 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,tepIp2,gwyIp1,transportZone1);
347 String newline = System.getProperty("line.separator");
348 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,outContent.toString());
353 public void testCreateLocalCacheMismatchIpwithSubnet(){
355 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp4,subnetMask,gwyIp1,transportZone1);
357 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,outContent.toString());
362 public void testConfigureTunnelType(){
364 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
365 .CONFIGURATION,transportZoneIdentifier);
367 tepCommandHelper.configureTunnelType(transportZone1,"VXLAN");
369 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
370 verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZones,true);
375 public void testConfigureTunnelMonitorInterval(){
377 TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
379 tepCommandHelper.configureTunnelMonitorInterval(interval);
381 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
382 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier,tunnelMonitor,true);
387 public void testConfigureTunnelMonitorParams(){
389 TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled).setMonitorProtocol(monitorProtocol).build();
391 tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
393 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
394 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,tunnelMonitor,true);
399 public void testDeleteVtep(){
401 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
403 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
404 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
409 public void testDeleteVtepInvalidIp(){
411 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp3,subnetMask,gwyIp1,transportZone1);
413 String newline = System.getProperty("line.separator");
414 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,outContent.toString());
419 public void testDeleteVtepInvalidSubnetMask(){
421 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,tepIp1,gwyIp1,transportZone1);
423 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,outContent.toString());
428 public void testDeleteVtepGatewayIpNull(){
430 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1);
432 LOG.debug("gateway is null in deleteVtep");
437 public void testDeleteVtepIpSubnetMismatch(){
439 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp4,subnetMask,gwyIp1,transportZone1);
441 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,outContent.toString());
446 public void testBuildTepsTunnelTypeVxlan(){
448 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
449 tepCommandHelper.buildTeps();
451 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
452 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
457 public void testBuildTepsTunnelTypeGre(){
459 optionalTransportZone = Optional.of(transportZoneNew);
461 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
462 .CONFIGURATION,transportZoneIdentifier);
464 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
465 tepCommandHelper.buildTeps();
467 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
468 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
474 public void testBuildTepsTransportZoneAbsent(){
476 optionalTransportZone = Optional.absent();
478 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
479 .CONFIGURATION,transportZoneIdentifier);
481 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
482 tepCommandHelper.buildTeps();
484 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
485 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
490 public void testShowTepsWithTransportZone(){
492 tepCommandHelper.showTeps(enabled,interval);
494 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
499 public void testShowTepsWithoutTransportZone(){
501 optionalTransportZones = Optional.of(transportZonesNew);
503 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
504 .CONFIGURATION,transportZonesIdentifier);
506 tepCommandHelper.showTeps(enabled,interval);
508 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
509 assertEquals("No teps configured" + newline,outContent.toString());
514 public void testDeleteOnCommit(){
516 transportZoneList.add(transportZone);
517 transportZoneList.add(transportZoneNew);
518 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
519 optionalTransportZones = Optional.of(transportZones);
521 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
522 .CONFIGURATION,transportZonesIdentifier);
524 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
525 tepCommandHelper.deleteOnCommit();
527 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
528 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
529 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
530 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,vtepsIdentifierNew);
531 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
532 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
537 public void testShowStateTunnelTypeVxlan(){
539 tepCommandHelper.showState(tunnelList,enabled);
541 verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,interfaceIdentifier);
542 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,interfaceIdentifierNew);
547 public void testShowStateTunnelTypeGre(){
549 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface>
550 ifStateOptionalNew = Optional.of(interfaceTestNewCase);
552 doReturn(Futures.immediateCheckedFuture(ifStateOptionalNew)).when(mockReadTx).read(LogicalDatastoreType
553 .CONFIGURATION,interfaceIdentifierNew);
555 tepCommandHelper.showState(tunnelList,enabled);
557 verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,interfaceIdentifier);
558 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,interfaceIdentifierNew);
563 public void testShowStateTunnelAbsent(){
565 tepCommandHelper.showState(tunnelListTest, enabled);
567 assertEquals("No Internal Tunnels Exist" + newline,outContent.toString());
572 public void testGetTransportZone(){
574 tepCommandHelper.getTransportZone(transportZone1);
576 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
580 public void testIsInCache(){
582 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
583 tepCommandHelper.isInCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
585 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
590 public void testValidateForDuplicates(){
592 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
593 tepCommandHelper.validateForDuplicates(vtepsTest,transportZone1);
595 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
600 public void testCheckTepPerTzPerDpn(){
602 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
603 tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
605 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);