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.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;
83 @RunWith(MockitoJUnitRunner.class)
84 public class TepCommandHelperTest {
86 private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
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;
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;
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);
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;
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>
182 TepCommandHelper tepCommandHelper ;
185 public void setUp() throws Exception {
186 when(dataBroker.registerDataChangeListener(
187 any(LogicalDatastoreType.class),
188 any(InstanceIdentifier.class),
189 any(DataChangeListener.class),
190 any(AsyncDataBroker.DataChangeScope.class)))
191 .thenReturn(dataChangeListenerRegistration);
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);
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);
220 tepCommandHelper = new TepCommandHelper(dataBroker);
225 public void cleanUp() {
228 private void setupMocks() {
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();
278 public void testCreateLocalCacheTzonesEmpty(){
281 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
282 } catch (TepException e) {
283 LOG.error(e.getMessage());
286 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
291 public void testCreateLocalCacheWithoutcheckExistingSubnet(){
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();
301 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
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);
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());
316 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
321 public void testCreateLocalCacheWithcheckExistingSubnet() {
323 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).build();
325 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
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);
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());
340 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
345 public void testCreateLocalCacheInvalidIp() {
347 String output = null;
349 tepCommandHelper.createLocalCache(dpId1, portName1, vlanId, tepIp3, subnetMask, gwyIp1, transportZone1, null);
350 } catch (Exception e) {
351 output = e.getMessage() + newline;
354 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,output);
359 public void testCreateLocalCacheGtwyIpNull(){
362 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,null,transportZone1, null);
363 } catch (TepException e) {
364 LOG.error(e.getMessage());
367 LOG.debug("gateway is null");
372 public void testCreateLocalCacheInvalidSubnetMask(){
374 String output = null;
376 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,tepIp2,gwyIp1,transportZone1, null);
377 } catch (TepException e) {
378 output = e.getMessage()+newline;
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);
387 public void testCreateLocalCadcheMismatchIpwithSubnet() {
389 String output = null;
391 tepCommandHelper.createLocalCache(dpId1, portName1, vlanId, tepIp4, subnetMask, gwyIp1, transportZone1, null);
392 } catch (TepException e) {
393 output = e.getMessage() + newline;
396 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,output);
401 public void testConfigureTunnelType(){
403 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType
404 .CONFIGURATION,transportZoneIdentifier);
406 tepCommandHelper.configureTunnelType(transportZone1,"VXLAN");
408 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
409 verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZones,true);
414 public void testConfigureTunnelMonitorInterval(){
416 TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
418 tepCommandHelper.configureTunnelMonitorInterval(interval);
420 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
421 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier,tunnelMonitor,true);
426 public void testConfigureTunnelMonitorParams(){
428 TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled).setMonitorProtocol(monitorProtocol).build();
430 tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
432 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
433 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,tunnelMonitor,true);
438 public void testDeleteVtep(){
441 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, gwyIp1, transportZone1, null);
442 } catch (Exception e) {
443 LOG.error(e.getMessage());
446 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
447 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,subnetsIdentifier);
452 public void testDeleteVtepInvalidIp(){
454 String output = null;
456 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp3, subnetMask, gwyIp1, transportZone1, null);
457 }catch (TepException e) {
458 output = e.getMessage() +newline;
461 String newline = System.getProperty("line.separator");
462 assertEquals("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255" + newline,output);
467 public void testDeleteVtepInvalidSubnetMask(){
469 String output = null;
471 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, tepIp1, gwyIp1, transportZone1, null);
472 } catch (TepException e) {
473 output = e.getMessage() + newline;
476 assertEquals("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32" + newline,output);
481 public void testDeleteVtepGatewayIpNull(){
484 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, null, transportZone1, null);
485 } catch (Exception e) {
486 LOG.error(e.getMessage());
489 LOG.debug("gateway is null in deleteVtep");
494 public void testDeleteVtepIpSubnetMismatch(){
496 String output = null;
498 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp4, subnetMask, gwyIp1, transportZone1, null);
499 } catch (Exception e) {
500 output = e.getMessage()+ newline;
503 assertEquals("IpAddress and gateWayIp should belong to the subnet provided" + newline,output);
508 public void testBuildTepsTunnelTypeVxlan(){
511 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
512 } catch (TepException e) {
513 LOG.error(e.getMessage());
515 tepCommandHelper.buildTeps();
517 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
518 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
523 public void testBuildTepsTunnelTypeGre(){
525 optionalTransportZone = Optional.of(transportZoneNew);
527 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
528 .CONFIGURATION,transportZoneIdentifier);
531 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
532 } catch (TepException e) {
533 LOG.error(e.getMessage());
535 tepCommandHelper.buildTeps();
537 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
538 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
544 public void testBuildTepsTransportZoneAbsent() throws TepException {
546 optionalTransportZone = Optional.absent();
548 doReturn(Futures.immediateCheckedFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
549 .CONFIGURATION,transportZoneIdentifier);
551 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
552 tepCommandHelper.buildTeps();
554 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
555 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
560 public void testShowTepsWithTransportZone(){
563 tepCommandHelper.showTeps(enabled, interval, null);
564 } catch (TepException e){
565 LOG.error(e.getMessage());
568 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
573 public void testShowTepsWithoutTransportZone(){
575 optionalTransportZones = Optional.of(transportZonesNew);
577 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
578 .CONFIGURATION,transportZonesIdentifier);
580 String output = null;
582 tepCommandHelper.showTeps(enabled, interval, null);
583 } catch (TepException e) {
584 output = e.getMessage() + newline;
587 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
588 assertEquals("No teps configured" + newline,output);
593 public void testDeleteOnCommit(){
595 transportZoneList.add(transportZone);
596 transportZoneList.add(transportZoneNew);
597 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
598 optionalTransportZones = Optional.of(transportZones);
600 doReturn(Futures.immediateCheckedFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
601 .CONFIGURATION,transportZonesIdentifier);
604 tepCommandHelper.deleteVtep(dpId1, portName1, vlanId, tepIp1, subnetMask, gwyIp1, transportZone1, null);
605 } catch (TepException e) {
606 LOG.error(e.getMessage());
608 tepCommandHelper.deleteOnCommit();
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);
620 public void testGetTransportZone(){
622 tepCommandHelper.getTransportZone(transportZone1);
624 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
628 public void testIsInCache(){
631 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
632 } catch (TepException e) {
633 LOG.error(e.getMessage());
635 tepCommandHelper.isInCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
637 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
642 public void testValidateForDuplicates(){
645 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
646 } catch (TepException e) {
647 LOG.error(e.getMessage());
649 tepCommandHelper.validateForDuplicates(vtepsTest,transportZone1);
651 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
656 public void testCheckTepPerTzPerDpn(){
659 tepCommandHelper.createLocalCache(dpId1,portName1,vlanId,tepIp1,subnetMask,gwyIp1,transportZone1, null);
660 } catch (TepException e) {
661 LOG.error(e.getMessage());
663 tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
665 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);