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.Collections;
25 import java.util.HashMap;
26 import java.util.List;
28 import org.junit.After;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Mock;
33 import org.mockito.runners.MockitoJUnitRunner;
34 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
35 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
36 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
37 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
38 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
39 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
40 import org.opendaylight.genius.itm.globals.ITMConstants;
41 import org.opendaylight.genius.itm.impl.ItmUtils;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder;
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.config.rev160406.ItmConfig;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelListBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelOperStatus;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVtepsBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVtepsKey;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsKey;
80 import org.opendaylight.yangtools.concepts.ListenerRegistration;
81 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
82 import org.slf4j.Logger;
83 import org.slf4j.LoggerFactory;
85 @RunWith(MockitoJUnitRunner.class)
86 public class TepCommandHelperTest {
88 private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
92 Boolean enabled = false ;
93 Class<? extends TunnelMonitoringTypeBase> monitorProtocol = ITMConstants.DEFAULT_MONITOR_PROTOCOL;
94 String tepIp1 = "192.168.56.30";
95 String tepIp2 = "192.168.56.102";
96 String tepIp3 = "168.56.102";
97 String tepIp4 = "150.168.56.102";
98 String gwyIp1 = "192.168.56.105";
99 String gwyIp2 = "192.168.56.106";
100 String subnetMask = "192.168.56.100/24";
101 String tunnelInterfaceName = "1:phy0:100" ;
102 String sourceDevice = "hwvtep://192.168.101.30:6640/physicalswitch/s3";
103 String newline = System.getProperty("line.separator");
104 String destinationDevice = "hwvtep:1";
105 String portName1 = "phy0";
106 String transportZone1 = "TZA" ;
107 BigInteger dpId1 = BigInteger.valueOf(1);
108 BigInteger dpId2 = BigInteger.valueOf(2);
109 IpAddress gtwyIp1 = IpAddressBuilder.getDefaultInstance(gwyIp1);
110 IpAddress ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
111 IpAddress ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
112 IpPrefix ipPrefixTest = IpPrefixBuilder.getDefaultInstance(subnetMask);
113 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
114 TransportZone transportZone = null;
115 TransportZone transportZoneNew = null;
116 TransportZones transportZones = null;
117 TransportZones transportZonesNew = null;
118 TunnelMonitorInterval tunnelMonitorInterval = null;
119 TunnelMonitorParams tunnelMonitorParams = null;
120 Subnets subnetsTest = null;
121 DeviceVteps deviceVteps = null;
123 Vteps vtepsNew = null;
124 Vteps vtepsTest = null;
125 InternalTunnel internalTunnelTest = null;
126 TunnelList tunnelList = null;
127 TunnelList tunnelListTest = null;
128 StateTunnelList stateTunnelListTest = null ;
129 StateTunnelList stateTunnelTest = null ;
130 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface
131 interfaceTest = null;
132 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
133 interfaceTestNew = null;
134 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
135 interfaceTestNewCase = null;
136 List<Subnets> subnetsList = new ArrayList<>() ;
137 List<DeviceVteps> deviceVtepsList = new ArrayList<>();
138 List<Vteps> vtepsList = new ArrayList<>();
139 List<TransportZone> transportZoneList = new ArrayList<>();
140 List<TransportZone> transportZoneListNew = new ArrayList<>();
141 List<InternalTunnel> internalTunnelList = new ArrayList<>();
142 List<StateTunnelList> stateTunnelList = new ArrayList<>() ;
143 List<String> lowerLayerIfList = new ArrayList<>();
144 List<InstanceIdentifier> instanceIdentifierList = new ArrayList<>();
145 java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
146 java.lang.Class<? extends TunnelTypeBase> tunnelType2 = TunnelTypeGre.class;
148 InstanceIdentifier<TransportZone> transportZoneIdentifier = InstanceIdentifier.builder(TransportZones.class)
149 .child(TransportZone.class, new TransportZoneKey(transportZone1)).build();
150 InstanceIdentifier<TransportZones> transportZonesIdentifier = InstanceIdentifier.builder(TransportZones.class).build();
151 InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier = InstanceIdentifier.builder(TunnelMonitorInterval.class).build();
152 InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsIdentifier = InstanceIdentifier.builder(TunnelMonitorParams.class).build();
153 InstanceIdentifier<Vteps> vtepsIdentifier = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new
154 TransportZoneKey(transportZone1))
155 .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId1,portName1)).build();
156 InstanceIdentifier<Vteps> vtepsIdentifierNew = InstanceIdentifier.builder(TransportZones.class).child(TransportZone
157 .class, new TransportZoneKey(transportZone1))
158 .child(Subnets.class, new SubnetsKey(ipPrefixTest)).child(Vteps.class, new VtepsKey(dpId2,portName1)).build();
159 InstanceIdentifier<Subnets> subnetsIdentifier = InstanceIdentifier.builder(TransportZones.class)
160 .child(TransportZone.class, new TransportZoneKey(transportZone1)).child(Subnets.class,
161 new SubnetsKey(ipPrefixTest)).build();
162 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
163 .state.Interface> interfaceIdentifier = ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
164 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
165 .Interface> interfaceIdentifierNew = ItmUtils.buildId(tunnelInterfaceName);
167 @Mock DataBroker dataBroker;
168 @Mock ItmConfig itmConfig;
169 @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
170 @Mock ReadOnlyTransaction mockReadTx;
171 @Mock WriteTransaction mockWriteTx;
172 @Mock Map<String, Map<SubnetObject, List<Vteps>>> tZones;
174 Optional<TransportZone> optionalTransportZone;
175 Optional<TransportZones> optionalTransportZones;
176 Optional<TunnelMonitorInterval> optionalTunnelMonitorInterval;
177 Optional<TunnelMonitorParams> optionalTunnelMonitorParams;
178 Optional<Vteps> optionalVteps;
179 Optional<Subnets> optionalSubnets;
180 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
181 .Interface> ifStateOptional;
182 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface>
185 TepCommandHelper tepCommandHelper ;
188 public void setUp() {
189 when(dataBroker.registerDataChangeListener(
190 any(LogicalDatastoreType.class),
191 any(InstanceIdentifier.class),
192 any(DataChangeListener.class),
193 any(AsyncDataBroker.DataChangeScope.class)))
194 .thenReturn(dataChangeListenerRegistration);
197 optionalTransportZone = Optional.of(transportZone);
198 optionalTransportZones = Optional.of(transportZones);
199 optionalTunnelMonitorInterval = Optional.of(tunnelMonitorInterval);
200 optionalTunnelMonitorParams = Optional.of(tunnelMonitorParams);
201 optionalVteps = Optional.of(vteps);
202 optionalSubnets = Optional.of(subnetsTest);
203 ifStateOptional = Optional.of(interfaceTest);
204 ifStateOptionalNew = Optional.of(interfaceTestNew);
206 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
207 .CONFIGURATION,transportZoneIdentifier);
208 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
209 .CONFIGURATION,transportZonesIdentifier);
210 doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorInterval)).when(mockReadTx).read
211 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
212 doReturn(Futures.immediateCheckedFuture(optionalTunnelMonitorParams)).when(mockReadTx).read
213 (LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
214 doReturn(Futures.immediateCheckedFuture(optionalVteps)).when(mockReadTx).read(LogicalDatastoreType
215 .CONFIGURATION,vtepsIdentifier);
216 doReturn(Futures.immediateCheckedFuture(optionalSubnets)).when(mockReadTx).read(LogicalDatastoreType
217 .CONFIGURATION,subnetsIdentifier);
218 doReturn(Futures.immediateCheckedFuture(ifStateOptional)).when(mockReadTx).read(LogicalDatastoreType
219 .OPERATIONAL,interfaceIdentifier);
220 doReturn(Futures.immediateCheckedFuture(ifStateOptionalNew)).when(mockReadTx).read(LogicalDatastoreType
221 .CONFIGURATION,interfaceIdentifierNew);
223 tepCommandHelper = new TepCommandHelper(dataBroker, itmConfig);
228 public void cleanUp() {
231 private void setupMocks() {
233 System.setOut(new PrintStream(outContent));
234 instanceIdentifierList.add(transportZoneIdentifier);
235 instanceIdentifierList.add(vtepsIdentifier);
236 instanceIdentifierList.add(subnetsIdentifier);
237 deviceVteps = new DeviceVtepsBuilder().setIpAddress(ipAddress1).setKey(new DeviceVtepsKey(ipAddress1,sourceDevice))
238 .setNodeId(sourceDevice).setTopologyId(destinationDevice).build();
239 vteps = new VtepsBuilder().setPortname(portName1).setDpnId(dpId2).setIpAddress(ipAddress1).setKey(new
240 VtepsKey(dpId2,portName1)).build();
241 vtepsNew = new VtepsBuilder().setPortname(portName1).setDpnId(dpId1).setIpAddress(ipAddress1).setKey(new
242 VtepsKey(dpId1,portName1)).build();
243 vtepsTest = new VtepsBuilder().build();
244 deviceVtepsList.add(deviceVteps);
245 vtepsList.add(vteps);
246 subnetsTest = new SubnetsBuilder().setGatewayIp(gtwyIp1).setVlanId(vlanId).setKey(new SubnetsKey(ipPrefixTest))
247 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
248 subnetsList.add(subnetsTest);
249 transportZone = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType1).setKey(new
250 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
251 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).setKey(new
252 TransportZoneKey(transportZone1)).setSubnets(subnetsList).build();
253 transportZoneList.add(transportZone);
254 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
255 transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
256 tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
257 tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
258 internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
259 .setTunnelInterfaceNames(Collections.singletonList(tunnelInterfaceName))
260 .setKey(new InternalTunnelKey(dpId1, dpId2, tunnelType1)).setTransportType(tunnelType1).build();
261 internalTunnelList.add(internalTunnelTest);
262 stateTunnelListTest = new StateTunnelListBuilder().setTunnelInterfaceName(tunnelInterfaceName).setOperState(TunnelOperStatus.Up).build();
263 stateTunnelList.add(stateTunnelListTest);
264 tunnelList = new TunnelListBuilder().setInternalTunnel(internalTunnelList).build();
265 tunnelListTest = new TunnelListBuilder().build();
266 lowerLayerIfList.add(dpId1.toString());
267 interfaceTest = new InterfaceBuilder().setOperStatus(Interface.OperStatus.Up).setAdminStatus
268 (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.AdminStatus.Up)
269 .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"))
270 .setIfIndex(100).setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class).build();
271 interfaceTestNew = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
272 TunnelTypeVxlan.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled,monitorProtocol, interval, false);
273 interfaceTestNewCase = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
274 TunnelTypeGre.class, ipAddress1, ipAddress2, gtwyIp1, vlanId, true, enabled, monitorProtocol, interval, false);
275 doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
276 doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
277 doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
281 public void testCreateLocalCacheTzonesEmpty(){
284 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
285 } catch (TepException e) {
286 LOG.error(e.getMessage());
289 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
294 public void testCreateLocalCacheWithoutcheckExistingSubnet(){
296 IpAddress gatewayIpObj = new IpAddress("0.0.0.0".toCharArray());
297 IpPrefix subnetMaskObj = new IpPrefix(subnetMask.toCharArray());
298 SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj);
299 SubnetObject subObCli = new SubnetObject(gatewayIpObj, subnetsKey, subnetMaskObj, vlanId);
300 Map<SubnetObject, List<Vteps>> subVtepMapTemp = new HashMap<>();
301 subVtepMapTemp.put(subObCli, vtepsList);
302 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
304 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
306 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
307 .CONFIGURATION,transportZoneIdentifier);
308 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
309 .CONFIGURATION,transportZonesIdentifier);
312 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
313 tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp1, transportZone1, null);
314 } catch (TepException e) {
315 LOG.error(e.getMessage());
319 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
324 public void testCreateLocalCacheWithcheckExistingSubnet() {
326 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
328 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
330 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
331 .CONFIGURATION,transportZoneIdentifier);
332 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
333 .CONFIGURATION,transportZonesIdentifier);
337 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
338 tepCommandHelper.createLocalCache(dpId2,portName1,vlanId, tepIp1,subnetMask,gwyIp2, transportZone1, null);
339 } catch (TepException e) {
340 LOG.error(e.getMessage());
343 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
348 public void testCreateLocalCacheInvalidIp() {
350 String output = null;
352 tepCommandHelper.createLocalCache(dpId1, portName1, vlanId, tepIp3, subnetMask, gwyIp1, transportZone1, null);
353 } catch (Exception e) {
354 output = e.getMessage() + newline;
357 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,output);
362 public void testCreateLocalCacheGtwyIpNull(){
365 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1, null);
366 } catch (TepException e) {
367 LOG.error(e.getMessage());
370 LOG.debug("gateway is null");
375 public void testCreateLocalCacheInvalidSubnetMask(){
377 String output = null;
379 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,tepIp2,gwyIp1,transportZone1, null);
380 } catch (TepException e) {
381 output = e.getMessage()+newline;
384 String newline = System.getProperty("line.separator");
385 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,output);
390 public void testCreateLocalCadcheMismatchIpwithSubnet() {
392 String output = null;
394 tepCommandHelper.createLocalCache(dpId1, portName1, vlanId, tepIp4, subnetMask, gwyIp1, transportZone1, null);
395 } catch (TepException e) {
396 output = e.getMessage() + newline;
399 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,output);
404 public void testConfigureTunnelType(){
406 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
407 .CONFIGURATION,transportZoneIdentifier);
409 tepCommandHelper.configureTunnelType(transportZone1,"VXLAN");
411 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
412 verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZones,true);
417 public void testConfigureTunnelMonitorInterval(){
419 TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
421 tepCommandHelper.configureTunnelMonitorInterval(interval);
423 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
424 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier,tunnelMonitor,true);
429 public void testConfigureTunnelMonitorParams(){
431 TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled).setMonitorProtocol(monitorProtocol).build();
433 tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
435 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
436 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,tunnelMonitor,true);
441 public void testDeleteVtep(){
444 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, gwyIp1, transportZone1, null);
445 } catch (Exception e) {
446 LOG.error(e.getMessage());
449 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
450 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
455 public void testDeleteVtepInvalidIp(){
457 String output = null;
459 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp3, subnetMask, gwyIp1, transportZone1, null);
460 }catch (TepException e) {
461 output = e.getMessage() +newline;
464 String newline = System.getProperty("line.separator");
465 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,output);
470 public void testDeleteVtepInvalidSubnetMask(){
472 String output = null;
474 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, tepIp1, gwyIp1, transportZone1, null);
475 } catch (TepException e) {
476 output = e.getMessage() + newline;
479 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,output);
484 public void testDeleteVtepGatewayIpNull(){
487 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, null, transportZone1, null);
488 } catch (Exception e) {
489 LOG.error(e.getMessage());
492 LOG.debug("gateway is null in deleteVtep");
497 public void testDeleteVtepIpSubnetMismatch(){
499 String output = null;
501 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp4, subnetMask, gwyIp1, transportZone1, null);
502 } catch (Exception e) {
503 output = e.getMessage()+ newline;
506 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,output);
511 public void testBuildTepsTunnelTypeVxlan(){
514 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
515 } catch (TepException e) {
516 LOG.error(e.getMessage());
518 tepCommandHelper.buildTeps();
520 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
521 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
526 public void testBuildTepsTunnelTypeGre(){
528 optionalTransportZone = Optional.of(transportZoneNew);
530 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
531 .CONFIGURATION,transportZoneIdentifier);
534 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
535 } catch (TepException e) {
536 LOG.error(e.getMessage());
538 tepCommandHelper.buildTeps();
540 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
541 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
547 public void testBuildTepsTransportZoneAbsent() throws TepException {
549 optionalTransportZone = Optional.absent();
551 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
552 .CONFIGURATION,transportZoneIdentifier);
554 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
555 tepCommandHelper.buildTeps();
557 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
558 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
563 public void testShowTepsWithTransportZone(){
566 tepCommandHelper.showTeps(enabled, interval, null);
567 } catch (TepException e){
568 LOG.error(e.getMessage());
571 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
576 public void testShowTepsWithoutTransportZone(){
578 optionalTransportZones = Optional.of(transportZonesNew);
580 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
581 .CONFIGURATION,transportZonesIdentifier);
583 String output = null;
585 tepCommandHelper.showTeps(enabled, interval, null);
586 } catch (TepException e) {
587 output = e.getMessage() + newline;
590 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
591 assertEquals("No teps configured" + newline,output);
596 public void testDeleteOnCommit(){
598 transportZoneList.add(transportZone);
599 transportZoneList.add(transportZoneNew);
600 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
601 optionalTransportZones = Optional.of(transportZones);
603 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
604 .CONFIGURATION,transportZonesIdentifier);
607 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, gwyIp1, transportZone1, null);
608 } catch (TepException e) {
609 LOG.error(e.getMessage());
611 tepCommandHelper.deleteOnCommit();
613 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
614 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
615 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
616 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,vtepsIdentifierNew);
617 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
618 verify(mockWriteTx).delete(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
623 public void testGetTransportZone(){
625 tepCommandHelper.getTransportZone(transportZone1);
627 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
631 public void testIsInCache(){
634 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
635 } catch (TepException e) {
636 LOG.error(e.getMessage());
638 tepCommandHelper.isInCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
640 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
645 public void testValidateForDuplicates(){
648 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
649 } catch (TepException e) {
650 LOG.error(e.getMessage());
652 tepCommandHelper.validateForDuplicates(vtepsTest,transportZone1);
654 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
659 public void testCheckTepPerTzPerDpn(){
662 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
663 } catch (TepException e) {
664 LOG.error(e.getMessage());
666 tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
668 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);