2 * Copyright (c) 2016, 2017 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.Mockito.doReturn;
13 import static org.mockito.Mockito.lenient;
14 import static org.mockito.Mockito.times;
15 import static org.mockito.Mockito.verify;
17 import com.google.common.util.concurrent.FluentFuture;
18 import java.io.ByteArrayOutputStream;
19 import java.io.PrintStream;
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.List;
23 import java.util.Optional;
24 import java.util.concurrent.ExecutionException;
25 import org.junit.After;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.Mock;
30 import org.mockito.junit.MockitoJUnitRunner;
31 import org.opendaylight.genius.itm.cache.UnprocessedTunnelsStateCache;
32 import org.opendaylight.genius.itm.globals.ITMConstants;
33 import org.opendaylight.genius.itm.impl.ItmUtils;
34 import org.opendaylight.mdsal.binding.api.DataBroker;
35 import org.opendaylight.mdsal.binding.api.ReadTransaction;
36 import org.opendaylight.mdsal.binding.api.WriteTransaction;
37 import org.opendaylight.mdsal.common.api.CommitInfo;
38 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelOperStatus;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVteps;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsKey;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Vteps;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.VtepsBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.VtepsKey;
70 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
71 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
72 import org.opendaylight.yangtools.yang.common.Uint64;
73 import org.slf4j.Logger;
74 import org.slf4j.LoggerFactory;
76 @RunWith(MockitoJUnitRunner.class)
77 public class TepCommandHelperTest {
79 private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
81 private final int interval = 1000;
82 private final Boolean enabled = false ;
83 private final Class<? extends TunnelMonitoringTypeBase> monitorProtocol = ITMConstants.DEFAULT_MONITOR_PROTOCOL;
84 private final String tepIp1 = "192.168.56.30";
85 private final String tepIp2 = "192.168.56.102";
86 private final String tepIp3 = "168.56.102";
87 private final String tepIp4 = "150.168.56.102";
88 private final String gwyIp1 = "192.168.56.105";
89 private final String subnetMask = "192.168.56.100/24";
90 private final String tunnelInterfaceName = "1:phy0:100" ;
91 private final String sourceDevice = "hwvtep://192.168.101.30:6640/physicalswitch/s3";
92 private final String destinationDevice = "hwvtep:1";
93 private final String transportZone1 = "TZA" ;
94 private final Uint64 dpId1 = Uint64.ONE;
95 private final Uint64 dpId2 = Uint64.valueOf(2);
96 private final IpAddress ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
97 private final IpAddress ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
98 private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
99 private TransportZone transportZone = null;
100 private TransportZone transportZoneNew = null;
101 private TransportZones transportZones = null;
102 private TransportZones transportZonesNew = null;
103 private TunnelMonitorInterval tunnelMonitorInterval = null;
104 private TunnelMonitorParams tunnelMonitorParams = null;
105 private Vteps vteps = null;
106 private Vteps vtepsTest = null;
107 private TransportZone mergeTransportZone = null;
108 private TransportZone mergeTransportZoneGre = null;
109 private TransportZones mergeParentTransportZones = null;
110 private TransportZones mergeParentTransportZonesGre = null;
111 private Vteps mergeVteps = null;
112 private final List<Vteps> mergeVtepsList = new ArrayList<>();
113 private final List<TransportZone> mergeParentTransportZoneList = new ArrayList<>();
114 private final List<TransportZone> mergeParentTransportZoneListGre = new ArrayList<>();
115 private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
116 .Interface interfaceTest = null;
117 private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
118 interfaceTestNew = null;
119 private final List<DeviceVteps> deviceVtepsList = new ArrayList<>();
120 private final List<Vteps> vtepsList = new ArrayList<>();
121 private final List<TransportZone> transportZoneList = new ArrayList<>();
122 private final List<TransportZone> transportZoneListNew = new ArrayList<>();
123 private final List<InternalTunnel> internalTunnelList = new ArrayList<>();
124 private final List<StateTunnelList> stateTunnelList = new ArrayList<>() ;
125 private final List<String> lowerLayerIfList = new ArrayList<>();
126 private final List<InstanceIdentifier> instanceIdentifierList = new ArrayList<>();
127 private final java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
128 private final java.lang.Class<? extends TunnelTypeBase> tunnelType2 = TunnelTypeGre.class;
130 private final InstanceIdentifier<TransportZone> transportZoneIdentifier = InstanceIdentifier
131 .create(TransportZones.class).child(TransportZone.class, new TransportZoneKey(transportZone1));
132 private final InstanceIdentifier<TransportZones> transportZonesIdentifier =
133 InstanceIdentifier.builder(TransportZones.class).build();
134 private final InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier =
135 InstanceIdentifier.builder(TunnelMonitorInterval.class).build();
136 private final InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsIdentifier =
137 InstanceIdentifier.builder(TunnelMonitorParams.class).build();
138 private final InstanceIdentifier<Vteps> vtepsIdentifier = InstanceIdentifier.builder(TransportZones.class)
139 .child(TransportZone.class, new TransportZoneKey(transportZone1))
140 .child(Vteps.class, new VtepsKey(dpId1)).build();
141 private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces
142 .rev140508.interfaces.state.Interface>
143 interfaceIdentifier = ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
144 private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces
145 .rev140508.interfaces.Interface>
146 interfaceIdentifierNew = ItmUtils.buildId(tunnelInterfaceName);
149 private DataBroker dataBroker;
151 private ItmConfig itmConfig;
153 private ReadTransaction mockReadTx;
155 private WriteTransaction mockWriteTx;
157 private Optional<TransportZones> optionalTransportZones;
159 private TepCommandHelper tepCommandHelper ;
160 private UnprocessedTunnelsStateCache unprocessedTunnelsStateCache;
163 public void setUp() {
166 Optional<TransportZone> optionalTransportZone = Optional.of(transportZone);
167 optionalTransportZones = Optional.of(transportZones);
168 Optional<TunnelMonitorInterval> optionalTunnelMonitorInterval = Optional.of(tunnelMonitorInterval);
169 Optional<TunnelMonitorParams> optionalTunnelMonitorParams = Optional.of(tunnelMonitorParams);
170 Optional<Vteps> optionalVteps = Optional.of(vteps);
171 Optional<Interface> ifStateOptional = Optional.of(interfaceTest);
172 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
174 ifStateOptionalNew = Optional.of(interfaceTestNew);
176 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
177 .CONFIGURATION,transportZoneIdentifier);
178 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
179 .CONFIGURATION,transportZonesIdentifier);
180 doReturn(FluentFutures.immediateFluentFuture(optionalTunnelMonitorInterval)).when(mockReadTx)
181 .read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
182 doReturn(FluentFutures.immediateFluentFuture(optionalTunnelMonitorParams)).when(mockReadTx)
183 .read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
184 doReturn(FluentFutures.immediateFluentFuture(optionalVteps)).when(mockReadTx)
185 .read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
186 lenient().doReturn(FluentFutures.immediateFluentFuture(ifStateOptional)).when(mockReadTx)
187 .read(LogicalDatastoreType.OPERATIONAL,interfaceIdentifier);
188 lenient().doReturn(FluentFutures.immediateFluentFuture(ifStateOptionalNew)).when(mockReadTx)
189 .read(LogicalDatastoreType.CONFIGURATION,interfaceIdentifierNew);
191 unprocessedTunnelsStateCache = new UnprocessedTunnelsStateCache();
192 tepCommandHelper = new TepCommandHelper(dataBroker, itmConfig,
193 unprocessedTunnelsStateCache);
198 public void cleanUp() {
201 private void setupMocks() {
203 System.setOut(new PrintStream(outContent));
204 instanceIdentifierList.add(transportZoneIdentifier);
205 instanceIdentifierList.add(vtepsIdentifier);
206 DeviceVteps deviceVteps = new DeviceVtepsBuilder().setIpAddress(ipAddress1)
207 .withKey(new DeviceVtepsKey(ipAddress1, sourceDevice))
208 .setNodeId(sourceDevice).setTopologyId(destinationDevice).build();
209 vteps = new VtepsBuilder().setDpnId(dpId2)
210 .setIpAddress(ipAddress1).withKey(new VtepsKey(dpId2)).build();
211 vtepsTest = new VtepsBuilder().build();
212 deviceVtepsList.add(deviceVteps);
213 vtepsList.add(vteps);
214 transportZone = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType1).withKey(new
215 TransportZoneKey(transportZone1)).setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
216 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).withKey(new
217 TransportZoneKey(transportZone1)).setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
218 transportZoneList.add(transportZone);
219 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
220 transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
221 mergeVteps = new VtepsBuilder().setDpnId(dpId2)
222 .setIpAddress(ipAddress1).withKey(new VtepsKey(dpId1)).build();
223 mergeVtepsList.add(mergeVteps);
225 new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
226 .setTunnelType(tunnelType1).setZoneName(transportZone1).setVteps(mergeVtepsList)
228 mergeParentTransportZoneList.add(mergeTransportZone);
229 mergeParentTransportZones = new TransportZonesBuilder().setTransportZone(mergeParentTransportZoneList).build();
230 mergeTransportZoneGre =
231 new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
232 .setTunnelType(tunnelType2).setZoneName(transportZone1).setVteps(mergeVtepsList)
234 mergeParentTransportZoneListGre.add(mergeTransportZoneGre);
235 mergeParentTransportZonesGre = new TransportZonesBuilder().setTransportZone(mergeParentTransportZoneListGre)
237 tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
238 tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
239 InternalTunnel internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
240 .setTunnelInterfaceNames(Collections.singletonList(tunnelInterfaceName))
241 .withKey(new InternalTunnelKey(dpId1, dpId2, tunnelType1)).setTransportType(tunnelType1).build();
242 internalTunnelList.add(internalTunnelTest);
243 StateTunnelList stateTunnelListTest = new StateTunnelListBuilder().setTunnelInterfaceName(tunnelInterfaceName)
244 .setOperState(TunnelOperStatus.Up).build();
245 stateTunnelList.add(stateTunnelListTest);
246 lowerLayerIfList.add(dpId1.toString());
247 interfaceTest = new InterfaceBuilder().setOperStatus(Interface.OperStatus.Up)
248 .setAdminStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508
249 .interfaces.state.Interface.AdminStatus.Up)
250 .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715
251 .PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"))
252 .setIfIndex(100).setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class).build();
253 interfaceTestNew = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
254 TunnelTypeVxlan.class, ipAddress1, ipAddress2, true, enabled,monitorProtocol,
255 interval, false, null);
256 doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
257 doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
258 lenient().doReturn(FluentFutures.immediateNullFluentFuture()).when(mockWriteTx).commit();
259 doReturn(FluentFuture.from(FluentFutures.immediateFluentFuture(CommitInfo.empty()))).when(mockWriteTx).commit();
263 public void testCreateLocalCacheTzonesEmpty() {
266 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
267 } catch (TepException e) {
268 LOG.error(e.getMessage());
271 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
276 public void testCreateLocalCacheWithoutcheckExistingSubnet() {
278 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2)
279 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
281 doReturn(FluentFutures.immediateFluentFuture(Optional.of(transportZoneNew))).when(mockReadTx).read(
282 LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
283 lenient().doReturn(FluentFutures.immediateFluentFuture(Optional.empty()))
284 .when(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
287 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
288 tepCommandHelper.createLocalCache(dpId2,tepIp1,transportZone1);
289 } catch (TepException e) {
290 LOG.error(e.getMessage());
293 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
298 public void testCreateLocalCacheWithcheckExistingSubnet() {
300 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2)
301 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
303 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
305 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
306 .CONFIGURATION,transportZoneIdentifier);
307 lenient().doReturn(FluentFutures.immediateFluentFuture(Optional.empty()))
308 .when(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
310 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
311 tepCommandHelper.createLocalCache(dpId2,tepIp1,transportZone1);
312 } catch (TepException e) {
313 LOG.error(e.getMessage());
316 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
320 @SuppressWarnings("checkstyle:IllegalCatch")
322 public void testCreateLocalCacheGtwyIpNull() {
325 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
326 } catch (TepException e) {
327 LOG.error(e.getMessage());
329 LOG.debug("gateway is null");
333 public void testConfigureTunnelType() throws ExecutionException, InterruptedException {
334 doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
335 .CONFIGURATION,transportZoneIdentifier);
337 tepCommandHelper.configureTunnelType(transportZone1, "VXLAN");
339 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION, transportZoneIdentifier);
341 final List<TransportZone> newList = new ArrayList<>(transportZoneList);
342 newList.add(new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
343 .setTunnelType(TunnelTypeVxlan.class).build());
345 verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION, transportZonesIdentifier,
346 new TransportZonesBuilder().setTransportZone(newList).build());
350 public void testConfigureTunnelMonitorInterval() {
352 TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
354 tepCommandHelper.configureTunnelMonitorInterval(interval);
356 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
357 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
358 tunnelMonitorIntervalIdentifier, tunnelMonitor);
362 public void testConfigureTunnelMonitorParams() {
364 TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled)
365 .setMonitorProtocol(monitorProtocol).build();
367 tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
369 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
370 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,
374 @SuppressWarnings("checkstyle:IllegalCatch")
376 public void testDeleteVtep() {
379 tepCommandHelper.deleteVtep(dpId1, tepIp1, transportZone1);
380 } catch (Exception e) {
381 LOG.error(e.getMessage());
384 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
387 @SuppressWarnings("checkstyle:IllegalCatch")
389 public void testDeleteVtepGatewayIpNull() {
392 tepCommandHelper.deleteVtep(dpId1, tepIp1, transportZone1);
393 } catch (Exception e) {
394 LOG.error(e.getMessage());
397 LOG.debug("gateway is null in deleteVtep");
401 @SuppressWarnings("checkstyle:IllegalCatch")
403 public void testBuildTepsTunnelTypeVxlan() {
406 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
407 } catch (TepException e) {
408 LOG.error(e.getMessage());
410 tepCommandHelper.buildTeps();
412 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
413 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
414 mergeParentTransportZones);
418 public void testBuildTepsTunnelTypeGre() {
420 doReturn(FluentFutures.immediateFluentFuture(Optional.of(transportZoneNew))).when(mockReadTx).read(
421 LogicalDatastoreType.CONFIGURATION, transportZoneIdentifier);
424 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
425 } catch (TepException e) {
426 LOG.error(e.getMessage());
428 tepCommandHelper.buildTeps();
430 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
431 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
432 mergeParentTransportZonesGre);
438 public void testBuildTepsTransportZoneAbsent() throws TepException {
440 doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
441 .CONFIGURATION,transportZoneIdentifier);
443 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
444 tepCommandHelper.buildTeps();
446 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
447 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
448 mergeParentTransportZones);
453 public void testShowTepsWithTransportZone() {
456 tepCommandHelper.showTeps(enabled, interval);
457 } catch (TepException e) {
458 LOG.error(e.getMessage());
461 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
466 public void testShowTepsWithoutTransportZone() {
468 optionalTransportZones = Optional.of(transportZonesNew);
470 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
471 .CONFIGURATION,transportZonesIdentifier);
473 String output = null;
475 tepCommandHelper.showTeps(enabled, interval);
476 } catch (TepException e) {
477 output = e.getMessage();
480 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
481 assertEquals("No teps configured",output);
486 public void testDeleteOnCommit() {
488 transportZoneList.add(transportZone);
489 transportZoneList.add(transportZoneNew);
490 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
491 optionalTransportZones = Optional.of(transportZones);
493 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
494 .CONFIGURATION,transportZonesIdentifier);
497 tepCommandHelper.deleteVtep(dpId1, tepIp1, transportZone1);
498 } catch (TepException e) {
499 LOG.error(e.getMessage());
501 tepCommandHelper.deleteOnCommit();
503 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
507 public void testGetTransportZone() {
509 tepCommandHelper.getTransportZone(transportZone1);
511 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
515 public void testIsInCache() {
518 tepCommandHelper.createLocalCache(dpId1, tepIp1, transportZone1);
519 tepCommandHelper.isInCache(dpId1, tepIp1 ,transportZone1);
520 } catch (TepException e) {
521 LOG.error(e.getMessage());
523 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
527 public void testCheckTepPerTzPerDpn() {
530 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
531 } catch (TepException e) {
532 LOG.error(e.getMessage());
534 tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
536 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);