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 com.google.common.base.Optional;
12 import com.google.common.util.concurrent.Futures;
13 import static org.junit.Assert.*;
14 import org.junit.After;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 import org.mockito.Mock;
19 import org.mockito.runners.MockitoJUnitRunner;
20 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
21 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
22 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
23 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
24 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
25 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
26 import org.opendaylight.genius.itm.globals.ITMConstants;
27 import org.opendaylight.genius.itm.impl.ItmUtils;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefixBuilder;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelListBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.*;
59 import org.opendaylight.yangtools.concepts.ListenerRegistration;
60 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
61 import org.slf4j.Logger;
62 import org.slf4j.LoggerFactory;
64 import java.io.ByteArrayOutputStream;
65 import java.io.PrintStream;
66 import java.math.BigInteger;
67 import java.util.ArrayList;
68 import java.util.HashMap;
69 import java.util.List;
72 import static org.mockito.Matchers.any;
73 import static org.mockito.Mockito.*;
75 @RunWith(MockitoJUnitRunner.class)
76 public class TepCommandHelperTest {
78 private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
82 Boolean enabled = false ;
83 Class<? extends TunnelMonitoringTypeBase> monitorProtocol = ITMConstants.DEFAULT_MONITOR_PROTOCOL;
84 String tepIp1 = "192.168.56.30";
85 String tepIp2 = "192.168.56.102";
86 String tepIp3 = "168.56.102";
87 String tepIp4 = "150.168.56.102";
88 String gwyIp1 = "192.168.56.105";
89 String gwyIp2 = "192.168.56.106";
90 String subnetMask = "192.168.56.100/24";
91 String tunnelInterfaceName = "1:phy0:100" ;
92 String sourceDevice = "hwvtep://192.168.101.30:6640/physicalswitch/s3";
93 String newline = System.getProperty("line.separator");
94 String destinationDevice = "hwvtep:1";
95 String portName1 = "phy0";
96 String transportZone1 = "TZA" ;
97 BigInteger dpId1 = BigInteger.valueOf(1);
98 BigInteger dpId2 = BigInteger.valueOf(2);
99 IpAddress gtwyIp1 = IpAddressBuilder.getDefaultInstance(gwyIp1);
100 IpAddress ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
101 IpAddress ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
102 IpPrefix ipPrefixTest = IpPrefixBuilder.getDefaultInstance(subnetMask);
103 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
104 TransportZone transportZone = null;
105 TransportZone transportZoneNew = null;
106 TransportZones transportZones = null;
107 TransportZones transportZonesNew = null;
108 TunnelMonitorInterval tunnelMonitorInterval = null;
109 TunnelMonitorParams tunnelMonitorParams = null;
110 Subnets subnetsTest = null;
111 DeviceVteps deviceVteps = null;
113 Vteps vtepsNew = null;
114 Vteps vtepsTest = null;
115 InternalTunnel internalTunnelTest = null;
116 TunnelList tunnelList = null;
117 TunnelList tunnelListTest = null;
118 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface
119 interfaceTest = null;
120 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
121 interfaceTestNew = null;
122 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
123 interfaceTestNewCase = null;
124 List<Subnets> subnetsList = new ArrayList<>() ;
125 List<DeviceVteps> deviceVtepsList = new ArrayList<>();
126 List<Vteps> vtepsList = new ArrayList<>();
127 List<TransportZone> transportZoneList = new ArrayList<>();
128 List<TransportZone> transportZoneListNew = new ArrayList<>();
129 List<InternalTunnel> internalTunnelList = new ArrayList<>();
130 List<String> lowerLayerIfList = new ArrayList<>();
131 List<InstanceIdentifier> instanceIdentifierList = new ArrayList<>();
132 java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
133 java.lang.Class<? extends TunnelTypeBase> tunnelType2 = TunnelTypeGre.class;
135 InstanceIdentifier<TransportZone> transportZoneIdentifier = InstanceIdentifier.builder(TransportZones.class)
136 .child(TransportZone.class, new TransportZoneKey(transportZone1)).build();
137 InstanceIdentifier<TransportZones> transportZonesIdentifier = InstanceIdentifier.builder(TransportZones.class).build();
138 InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier = InstanceIdentifier.builder(TunnelMonitorInterval.class).build();
139 InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsIdentifier = InstanceIdentifier.builder(TunnelMonitorParams.class).build();
140 InstanceIdentifier<Vteps> vtepsIdentifier = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new
141 TransportZoneKey(transportZone1))
142 .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId1,portName1)).build();
143 InstanceIdentifier<Vteps> vtepsIdentifierNew = InstanceIdentifier.builder(TransportZones.class).child(TransportZone
144 .class, new TransportZoneKey(transportZone1))
145 .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId2,portName1)).build();
146 InstanceIdentifier<Subnets> subnetsIdentifier = InstanceIdentifier.builder(TransportZones.class)
147 .child(TransportZone.class, new TransportZoneKey(transportZone1)).child(Subnets.class,
148 new SubnetsKey(ipPrefixTest)).build();
149 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
150 .state.Interface> interfaceIdentifier = ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
151 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
152 .Interface> interfaceIdentifierNew = ItmUtils.buildId(tunnelInterfaceName);
154 @Mock DataBroker dataBroker;
155 @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
156 @Mock ReadOnlyTransaction mockReadTx;
157 @Mock WriteTransaction mockWriteTx;
158 @Mock Map<String, Map<SubnetObject, List<Vteps>>> tZones;
160 Optional<TransportZone> optionalTransportZone;
161 Optional<TransportZones> optionalTransportZones;
162 Optional<TunnelMonitorInterval> optionalTunnelMonitorInterval;
163 Optional<TunnelMonitorParams> optionalTunnelMonitorParams;
164 Optional<Vteps> optionalVteps;
165 Optional<Subnets> optionalSubnets;
166 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
167 .Interface> ifStateOptional;
168 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface>
171 TepCommandHelper tepCommandHelper ;
174 public void setUp() throws Exception {
175 when(dataBroker.registerDataChangeListener(
176 any(LogicalDatastoreType.class),
177 any(InstanceIdentifier.class),
178 any(DataChangeListener.class),
179 any(AsyncDataBroker.DataChangeScope.class)))
180 .thenReturn(dataChangeListenerRegistration);
183 optionalTransportZone = Optional.of(transportZone);
184 optionalTransportZones = Optional.of(transportZones);
185 optionalTunnelMonitorInterval = Optional.of(tunnelMonitorInterval);
186 optionalTunnelMonitorParams = Optional.of(tunnelMonitorParams);
187 optionalVteps = Optional.of(vteps);
188 optionalSubnets = Optional.of(subnetsTest);
189 ifStateOptional = Optional.of(interfaceTest);
190 ifStateOptionalNew = Optional.of(interfaceTestNew);
192 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
193 .CONFIGURATION,transportZoneIdentifier);
194 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
195 .CONFIGURATION,transportZonesIdentifier);
196 doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorInterval)).when(mockReadTx).read
197 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
198 doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorParams)).when(mockReadTx).read
199 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
200 doReturn(Futures.immediateCheckedFuture(optionalVteps)).when(mockReadTx).read(LogicalDatastoreType
201 .CONFIGURATION,vtepsIdentifier);
202 doReturn(Futures.immediateCheckedFuture(optionalSubnets)).when(mockReadTx).read(LogicalDatastoreType
203 .CONFIGURATION,subnetsIdentifier);
204 doReturn(Futures.immediateCheckedFuture(ifStateOptional)).when(mockReadTx).read(LogicalDatastoreType
205 .OPERATIONAL,interfaceIdentifier);
206 doReturn(Futures.immediateCheckedFuture(ifStateOptionalNew)).when(mockReadTx).read(LogicalDatastoreType
207 .CONFIGURATION,interfaceIdentifierNew);
209 tepCommandHelper = new TepCommandHelper(dataBroker);
214 public void cleanUp() {
217 private void setupMocks() {
219 System.setOut(new PrintStream(outContent));
220 instanceIdentifierList.add(transportZoneIdentifier);
221 instanceIdentifierList.add(vtepsIdentifier);
222 instanceIdentifierList.add(subnetsIdentifier);
223 deviceVteps = new DeviceVtepsBuilder().setIpAddress(ipAddress1).setKey(new DeviceVtepsKey(ipAddress1,sourceDevice))
224 .setNodeId(sourceDevice).setTopologyId(destinationDevice).build();
225 vteps = new VtepsBuilder().setPortname(portName1).setDpnId(dpId2).setIpAddress(ipAddress1).setKey(new
226 VtepsKey(dpId2,portName1)).build();
227 vtepsNew = new VtepsBuilder().setPortname(portName1).setDpnId(dpId1).setIpAddress(ipAddress1).setKey(new
228 VtepsKey(dpId1,portName1)).build();
229 vtepsTest = new VtepsBuilder().build();
230 deviceVtepsList.add(deviceVteps);
231 vtepsList.add(vteps);
232 subnetsTest = new SubnetsBuilder().setGatewayIp(gtwyIp1).setVlanId(vlanId).setKey(new SubnetsKey(ipPrefixTest))
233 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
234 subnetsList.add(subnetsTest);
235 transportZone = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType1).setKey(new
236 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
237 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).setKey(new
238 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
239 transportZoneList.add(transportZone);
240 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
241 transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
242 tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
243 tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
244 internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
245 .setTunnelInterfaceName(tunnelInterfaceName).setKey(new InternalTunnelKey(dpId1,dpId2,tunnelType1))
246 .setTransportType(tunnelType1).build();
247 internalTunnelList.add(internalTunnelTest);
248 tunnelList = new TunnelListBuilder().setInternalTunnel(internalTunnelList).build();
249 tunnelListTest = new TunnelListBuilder().build();
250 lowerLayerIfList.add(dpId1.toString());
251 interfaceTest = new InterfaceBuilder().setOperStatus(Interface.OperStatus.Up).setAdminStatus
252 (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.AdminStatus.Up)
253 .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"))
254 .setIfIndex(100).setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class).build();
255 interfaceTestNew = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
256 TunnelTypeVxlan.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled,monitorProtocol, interval);
257 interfaceTestNewCase = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
258 TunnelTypeGre.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled, monitorProtocol, interval);
259 doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
260 doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
261 doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
265 public void testCreateLocalCacheTzonesEmpty(){
267 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
269 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
274 public void testCreateLocalCacheWithoutcheckExistingSubnet(){
276 IpAddress gatewayIpObj = new IpAddress("0.0.0.0".toCharArray());
277 IpPrefix subnetMaskObj = new IpPrefix(subnetMask.toCharArray());
278 SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj);
279 SubnetObject subObCli = new SubnetObject(gatewayIpObj, subnetsKey, subnetMaskObj, vlanId);
280 Map<SubnetObject, List<Vteps>> subVtepMapTemp = new HashMap<SubnetObject, List<Vteps>>();
281 subVtepMapTemp.put(subObCli, vtepsList);
282 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
284 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
286 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
287 .CONFIGURATION,transportZoneIdentifier);
288 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
289 .CONFIGURATION,transportZonesIdentifier);
291 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
292 tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp1, transportZone1);
294 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
299 public void testCreateLocalCacheWithcheckExistingSubnet(){
301 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
303 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
305 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
306 .CONFIGURATION,transportZoneIdentifier);
307 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
308 .CONFIGURATION,transportZonesIdentifier);
310 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
311 tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp2, transportZone1);
313 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
318 public void testCreateLocalCacheInvalidIp(){
320 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp3,subnetMask,gwyIp1,transportZone1);
322 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,outContent.toString());
327 public void testCreateLocalCacheGtwyIpNull(){
329 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1);
331 LOG.debug("gateway is null");
336 public void testCreateLocalCacheInvalidSubnetMask(){
338 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,tepIp2,gwyIp1,transportZone1);
340 String newline = System.getProperty("line.separator");
341 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,outContent.toString());
346 public void testCreateLocalCacheMismatchIpwithSubnet(){
348 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp4,subnetMask,gwyIp1,transportZone1);
350 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,outContent.toString());
355 public void testConfigureTunnelType(){
357 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
358 .CONFIGURATION,transportZoneIdentifier);
360 tepCommandHelper.configureTunnelType(transportZone1,"VXLAN");
362 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
363 verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZones,true);
368 public void testConfigureTunnelMonitorInterval(){
370 TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
372 tepCommandHelper.configureTunnelMonitorInterval(interval);
374 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
375 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier,tunnelMonitor,true);
380 public void testConfigureTunnelMonitorParams(){
382 TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled).setMonitorProtocol(monitorProtocol).build();
384 tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
386 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
387 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,tunnelMonitor,true);
392 public void testDeleteVtep(){
394 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
396 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
397 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
402 public void testDeleteVtepInvalidIp(){
404 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp3,subnetMask,gwyIp1,transportZone1);
406 String newline = System.getProperty("line.separator");
407 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,outContent.toString());
412 public void testDeleteVtepInvalidSubnetMask(){
414 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,tepIp1,gwyIp1,transportZone1);
416 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,outContent.toString());
421 public void testDeleteVtepGatewayIpNull(){
423 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1);
425 LOG.debug("gateway is null in deleteVtep");
430 public void testDeleteVtepIpSubnetMismatch(){
432 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp4,subnetMask,gwyIp1,transportZone1);
434 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,outContent.toString());
439 public void testBuildTepsTunnelTypeVxlan(){
441 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
442 tepCommandHelper.buildTeps();
444 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
445 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
450 public void testBuildTepsTunnelTypeGre(){
452 optionalTransportZone = Optional.of(transportZoneNew);
454 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
455 .CONFIGURATION,transportZoneIdentifier);
457 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
458 tepCommandHelper.buildTeps();
460 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
461 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
467 public void testBuildTepsTransportZoneAbsent(){
469 optionalTransportZone = Optional.absent();
471 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
472 .CONFIGURATION,transportZoneIdentifier);
474 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
475 tepCommandHelper.buildTeps();
477 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
478 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
483 public void testShowTepsWithTransportZone(){
485 tepCommandHelper.showTeps(enabled,interval);
487 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
492 public void testShowTepsWithoutTransportZone(){
494 optionalTransportZones = Optional.of(transportZonesNew);
496 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
497 .CONFIGURATION,transportZonesIdentifier);
499 tepCommandHelper.showTeps(enabled,interval);
501 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
502 assertEquals("No teps configured" + newline,outContent.toString());
507 public void testDeleteOnCommit(){
509 transportZoneList.add(transportZone);
510 transportZoneList.add(transportZoneNew);
511 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
512 optionalTransportZones = Optional.of(transportZones);
514 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
515 .CONFIGURATION,transportZonesIdentifier);
517 tepCommandHelper.deleteVtep(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
518 tepCommandHelper.deleteOnCommit();
520 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
521 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
522 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
523 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,vtepsIdentifierNew);
524 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
525 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
530 public void testShowStateTunnelTypeVxlan(){
532 tepCommandHelper.showState(tunnelList,enabled);
534 verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,interfaceIdentifier);
535 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,interfaceIdentifierNew);
540 public void testShowStateTunnelTypeGre(){
542 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface>
543 ifStateOptionalNew = Optional.of(interfaceTestNewCase);
545 doReturn(Futures.immediateCheckedFuture(ifStateOptionalNew)).when(mockReadTx).read(LogicalDatastoreType
546 .CONFIGURATION,interfaceIdentifierNew);
548 tepCommandHelper.showState(tunnelList,enabled);
550 verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,interfaceIdentifier);
551 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,interfaceIdentifierNew);
556 public void testShowStateTunnelAbsent(){
558 tepCommandHelper.showState(tunnelListTest, enabled);
560 assertEquals("No Internal Tunnels Exist" + newline,outContent.toString());
565 public void testGetTransportZone(){
567 tepCommandHelper.getTransportZone(transportZone1);
569 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
573 public void testIsInCache(){
575 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
576 tepCommandHelper.isInCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
578 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
583 public void testValidateForDuplicates(){
585 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
586 tepCommandHelper.validateForDuplicates(vtepsTest,transportZone1);
588 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
593 public void testCheckTepPerTzPerDpn(){
595 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1);
596 tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
598 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);