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 java.io.ByteArrayOutputStream;
18 import java.io.PrintStream;
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22 import java.util.Optional;
23 import java.util.concurrent.ExecutionException;
24 import org.junit.After;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.Mock;
29 import org.mockito.junit.MockitoJUnitRunner;
30 import org.opendaylight.genius.itm.cache.UnprocessedTunnelsStateCache;
31 import org.opendaylight.genius.itm.globals.ITMConstants;
32 import org.opendaylight.genius.itm.impl.ItmUtils;
33 import org.opendaylight.mdsal.binding.api.DataBroker;
34 import org.opendaylight.mdsal.binding.api.ReadTransaction;
35 import org.opendaylight.mdsal.binding.api.WriteTransaction;
36 import org.opendaylight.mdsal.common.api.CommitInfo;
37 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelOperStatus;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVteps;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsKey;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Vteps;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.VtepsBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.VtepsKey;
69 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
70 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
71 import org.opendaylight.yangtools.yang.common.Uint64;
72 import org.slf4j.Logger;
73 import org.slf4j.LoggerFactory;
75 @RunWith(MockitoJUnitRunner.class)
76 public class TepCommandHelperTest {
78 private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
80 private final int interval = 1000;
81 private final Boolean enabled = false ;
82 private final Class<? extends TunnelMonitoringTypeBase> monitorProtocol = ITMConstants.DEFAULT_MONITOR_PROTOCOL;
83 private final String tepIp1 = "192.168.56.30";
84 private final String tepIp2 = "192.168.56.102";
85 private final String tepIp3 = "168.56.102";
86 private final String tepIp4 = "150.168.56.102";
87 private final String gwyIp1 = "192.168.56.105";
88 private final String subnetMask = "192.168.56.100/24";
89 private final String tunnelInterfaceName = "1:phy0:100" ;
90 private final String sourceDevice = "hwvtep://192.168.101.30:6640/physicalswitch/s3";
91 private final String destinationDevice = "hwvtep:1";
92 private final String transportZone1 = "TZA" ;
93 private final Uint64 dpId1 = Uint64.ONE;
94 private final Uint64 dpId2 = Uint64.valueOf(2);
95 private final IpAddress ipAddress1 = IpAddressBuilder.getDefaultInstance(tepIp1);
96 private final IpAddress ipAddress2 = IpAddressBuilder.getDefaultInstance(tepIp2);
97 private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
98 private TransportZone transportZone = null;
99 private TransportZone transportZoneNew = null;
100 private TransportZones transportZones = null;
101 private TransportZones transportZonesNew = null;
102 private TunnelMonitorInterval tunnelMonitorInterval = null;
103 private TunnelMonitorParams tunnelMonitorParams = null;
104 private Vteps vteps = null;
105 private Vteps vtepsTest = null;
106 private TransportZone mergeTransportZone = null;
107 private TransportZone mergeTransportZoneGre = null;
108 private TransportZones mergeParentTransportZones = null;
109 private TransportZones mergeParentTransportZonesGre = null;
110 private Vteps mergeVteps = null;
111 private final List<Vteps> mergeVtepsList = new ArrayList<>();
112 private final List<TransportZone> mergeParentTransportZoneList = new ArrayList<>();
113 private final List<TransportZone> mergeParentTransportZoneListGre = new ArrayList<>();
114 private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
115 .Interface interfaceTest = null;
116 private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
117 interfaceTestNew = null;
118 private final List<DeviceVteps> deviceVtepsList = new ArrayList<>();
119 private final List<Vteps> vtepsList = new ArrayList<>();
120 private final List<TransportZone> transportZoneList = new ArrayList<>();
121 private final List<TransportZone> transportZoneListNew = new ArrayList<>();
122 private final List<InternalTunnel> internalTunnelList = new ArrayList<>();
123 private final List<StateTunnelList> stateTunnelList = new ArrayList<>() ;
124 private final List<String> lowerLayerIfList = new ArrayList<>();
125 private final List<InstanceIdentifier> instanceIdentifierList = new ArrayList<>();
126 private final java.lang.Class<? extends TunnelTypeBase> tunnelType1 = TunnelTypeVxlan.class;
127 private final java.lang.Class<? extends TunnelTypeBase> tunnelType2 = TunnelTypeGre.class;
129 private final InstanceIdentifier<TransportZone> transportZoneIdentifier = InstanceIdentifier
130 .create(TransportZones.class).child(TransportZone.class, new TransportZoneKey(transportZone1));
131 private final InstanceIdentifier<TransportZones> transportZonesIdentifier =
132 InstanceIdentifier.builder(TransportZones.class).build();
133 private final InstanceIdentifier<TunnelMonitorInterval> tunnelMonitorIntervalIdentifier =
134 InstanceIdentifier.builder(TunnelMonitorInterval.class).build();
135 private final InstanceIdentifier<TunnelMonitorParams> tunnelMonitorParamsIdentifier =
136 InstanceIdentifier.builder(TunnelMonitorParams.class).build();
137 private final InstanceIdentifier<Vteps> vtepsIdentifier = InstanceIdentifier.builder(TransportZones.class)
138 .child(TransportZone.class, new TransportZoneKey(transportZone1))
139 .child(Vteps.class, new VtepsKey(dpId1)).build();
140 private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces
141 .rev140508.interfaces.state.Interface>
142 interfaceIdentifier = ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
143 private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces
144 .rev140508.interfaces.Interface>
145 interfaceIdentifierNew = ItmUtils.buildId(tunnelInterfaceName);
148 private DataBroker dataBroker;
150 private ItmConfig itmConfig;
152 private ReadTransaction mockReadTx;
154 private WriteTransaction mockWriteTx;
156 private Optional<TransportZones> optionalTransportZones;
158 private TepCommandHelper tepCommandHelper ;
159 private UnprocessedTunnelsStateCache unprocessedTunnelsStateCache;
162 public void setUp() {
165 Optional<TransportZone> optionalTransportZone = Optional.of(transportZone);
166 optionalTransportZones = Optional.of(transportZones);
167 Optional<TunnelMonitorInterval> optionalTunnelMonitorInterval = Optional.of(tunnelMonitorInterval);
168 Optional<TunnelMonitorParams> optionalTunnelMonitorParams = Optional.of(tunnelMonitorParams);
169 Optional<Vteps> optionalVteps = Optional.of(vteps);
170 Optional<Interface> ifStateOptional = Optional.of(interfaceTest);
171 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
173 ifStateOptionalNew = Optional.of(interfaceTestNew);
175 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
176 .CONFIGURATION,transportZoneIdentifier);
177 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
178 .CONFIGURATION,transportZonesIdentifier);
179 doReturn(FluentFutures.immediateFluentFuture(optionalTunnelMonitorInterval)).when(mockReadTx)
180 .read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
181 doReturn(FluentFutures.immediateFluentFuture(optionalTunnelMonitorParams)).when(mockReadTx)
182 .read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
183 doReturn(FluentFutures.immediateFluentFuture(optionalVteps)).when(mockReadTx)
184 .read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
185 lenient().doReturn(FluentFutures.immediateFluentFuture(ifStateOptional)).when(mockReadTx)
186 .read(LogicalDatastoreType.OPERATIONAL,interfaceIdentifier);
187 lenient().doReturn(FluentFutures.immediateFluentFuture(ifStateOptionalNew)).when(mockReadTx)
188 .read(LogicalDatastoreType.CONFIGURATION,interfaceIdentifierNew);
190 unprocessedTunnelsStateCache = new UnprocessedTunnelsStateCache();
191 tepCommandHelper = new TepCommandHelper(dataBroker, itmConfig,
192 unprocessedTunnelsStateCache);
197 public void cleanUp() {
200 private void setupMocks() {
202 System.setOut(new PrintStream(outContent));
203 instanceIdentifierList.add(transportZoneIdentifier);
204 instanceIdentifierList.add(vtepsIdentifier);
205 DeviceVteps deviceVteps = new DeviceVtepsBuilder().setIpAddress(ipAddress1)
206 .withKey(new DeviceVtepsKey(ipAddress1, sourceDevice))
207 .setNodeId(sourceDevice).setTopologyId(destinationDevice).build();
208 vteps = new VtepsBuilder().setDpnId(dpId2)
209 .setIpAddress(ipAddress1).withKey(new VtepsKey(dpId2)).build();
210 vtepsTest = new VtepsBuilder().setDpnId(Uint64.TEN).build();
211 deviceVtepsList.add(deviceVteps);
212 vtepsList.add(vteps);
213 transportZone = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType1).withKey(new
214 TransportZoneKey(transportZone1)).setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
215 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2).withKey(new
216 TransportZoneKey(transportZone1)).setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
217 transportZoneList.add(transportZone);
218 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
219 transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
220 mergeVteps = new VtepsBuilder().setDpnId(dpId2)
221 .setIpAddress(ipAddress1).withKey(new VtepsKey(dpId1)).build();
222 mergeVtepsList.add(mergeVteps);
224 new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
225 .setTunnelType(tunnelType1).setZoneName(transportZone1).setVteps(mergeVtepsList)
227 mergeParentTransportZoneList.add(mergeTransportZone);
228 mergeParentTransportZones = new TransportZonesBuilder().setTransportZone(mergeParentTransportZoneList).build();
229 mergeTransportZoneGre =
230 new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
231 .setTunnelType(tunnelType2).setZoneName(transportZone1).setVteps(mergeVtepsList)
233 mergeParentTransportZoneListGre.add(mergeTransportZoneGre);
234 mergeParentTransportZonesGre = new TransportZonesBuilder().setTransportZone(mergeParentTransportZoneListGre)
236 tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
237 tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
238 InternalTunnel internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
239 .setTunnelInterfaceNames(Collections.singletonList(tunnelInterfaceName))
240 .withKey(new InternalTunnelKey(dpId1, dpId2, tunnelType1)).setTransportType(tunnelType1).build();
241 internalTunnelList.add(internalTunnelTest);
242 StateTunnelList stateTunnelListTest = new StateTunnelListBuilder().setTunnelInterfaceName(tunnelInterfaceName)
243 .setOperState(TunnelOperStatus.Up).build();
244 stateTunnelList.add(stateTunnelListTest);
245 lowerLayerIfList.add(dpId1.toString());
246 interfaceTest = new InterfaceBuilder().setName("foo").setOperStatus(Interface.OperStatus.Up)
247 .setAdminStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508
248 .interfaces.state.Interface.AdminStatus.Up)
249 .setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715
250 .PhysAddress.getDefaultInstance("AA:AA:AA:AA:AA:AA"))
251 .setIfIndex(100).setLowerLayerIf(lowerLayerIfList).setType(L2vlan.class).build();
252 interfaceTestNew = ItmUtils.buildTunnelInterface(dpId1, tunnelInterfaceName, destinationDevice, enabled,
253 TunnelTypeVxlan.class, ipAddress1, ipAddress2, true, enabled,monitorProtocol,
254 interval, false, null);
255 doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
256 doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
257 lenient().doReturn(FluentFutures.immediateNullFluentFuture()).when(mockWriteTx).commit();
258 doReturn(CommitInfo.emptyFluentFuture()).when(mockWriteTx).commit();
262 public void testCreateLocalCacheTzonesEmpty() {
265 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
266 } catch (TepException e) {
267 LOG.error(e.getMessage());
270 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
275 public void testCreateLocalCacheWithoutcheckExistingSubnet() {
277 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2)
278 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
280 doReturn(FluentFutures.immediateFluentFuture(Optional.of(transportZoneNew))).when(mockReadTx).read(
281 LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
282 lenient().doReturn(FluentFutures.immediateFluentFuture(Optional.empty()))
283 .when(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
286 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
287 tepCommandHelper.createLocalCache(dpId2,tepIp1,transportZone1);
288 } catch (TepException e) {
289 LOG.error(e.getMessage());
292 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
297 public void testCreateLocalCacheWithcheckExistingSubnet() {
299 transportZoneNew = new TransportZoneBuilder().setZoneName(transportZone1).setTunnelType(tunnelType2)
300 .setDeviceVteps(deviceVtepsList).setVteps(vtepsList).build();
302 Optional<TransportZone> optionalTransportZone = Optional.of(transportZoneNew);
304 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZone)).when(mockReadTx).read(LogicalDatastoreType
305 .CONFIGURATION,transportZoneIdentifier);
306 lenient().doReturn(FluentFutures.immediateFluentFuture(Optional.empty()))
307 .when(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
309 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
310 tepCommandHelper.createLocalCache(dpId2,tepIp1,transportZone1);
311 } catch (TepException e) {
312 LOG.error(e.getMessage());
315 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
319 @SuppressWarnings("checkstyle:IllegalCatch")
321 public void testCreateLocalCacheGtwyIpNull() {
324 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
325 } catch (TepException e) {
326 LOG.error(e.getMessage());
328 LOG.debug("gateway is null");
332 public void testConfigureTunnelType() throws ExecutionException, InterruptedException {
333 doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
334 .CONFIGURATION,transportZoneIdentifier);
336 tepCommandHelper.configureTunnelType(transportZone1, "VXLAN");
338 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION, transportZoneIdentifier);
340 final List<TransportZone> newList = new ArrayList<>(transportZoneList);
341 newList.add(new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
342 .setTunnelType(TunnelTypeVxlan.class).build());
344 verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION, transportZonesIdentifier,
345 new TransportZonesBuilder().setTransportZone(newList).build());
349 public void testConfigureTunnelMonitorInterval() {
351 TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
353 tepCommandHelper.configureTunnelMonitorInterval(interval);
355 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
356 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
357 tunnelMonitorIntervalIdentifier, tunnelMonitor);
361 public void testConfigureTunnelMonitorParams() {
363 TunnelMonitorParams tunnelMonitor = new TunnelMonitorParamsBuilder().setEnabled(enabled)
364 .setMonitorProtocol(monitorProtocol).build();
366 tepCommandHelper.configureTunnelMonitorParams(enabled, "BFD");
368 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier);
369 verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorParamsIdentifier,
373 @SuppressWarnings("checkstyle:IllegalCatch")
375 public void testDeleteVtep() {
378 tepCommandHelper.deleteVtep(dpId1, tepIp1, transportZone1);
379 } catch (Exception e) {
380 LOG.error(e.getMessage());
383 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
386 @SuppressWarnings("checkstyle:IllegalCatch")
388 public void testDeleteVtepGatewayIpNull() {
391 tepCommandHelper.deleteVtep(dpId1, tepIp1, transportZone1);
392 } catch (Exception e) {
393 LOG.error(e.getMessage());
396 LOG.debug("gateway is null in deleteVtep");
400 @SuppressWarnings("checkstyle:IllegalCatch")
402 public void testBuildTepsTunnelTypeVxlan() {
405 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
406 } catch (TepException e) {
407 LOG.error(e.getMessage());
409 tepCommandHelper.buildTeps();
411 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
412 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
413 mergeParentTransportZones);
417 public void testBuildTepsTunnelTypeGre() {
419 doReturn(FluentFutures.immediateFluentFuture(Optional.of(transportZoneNew))).when(mockReadTx).read(
420 LogicalDatastoreType.CONFIGURATION, transportZoneIdentifier);
423 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
424 } catch (TepException e) {
425 LOG.error(e.getMessage());
427 tepCommandHelper.buildTeps();
429 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
430 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
431 mergeParentTransportZonesGre);
437 public void testBuildTepsTransportZoneAbsent() throws TepException {
439 doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
440 .CONFIGURATION,transportZoneIdentifier);
442 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
443 tepCommandHelper.buildTeps();
445 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
446 verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
447 mergeParentTransportZones);
452 public void testShowTepsWithTransportZone() {
455 tepCommandHelper.showTeps(enabled, interval);
456 } catch (TepException e) {
457 LOG.error(e.getMessage());
460 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
465 public void testShowTepsWithoutTransportZone() {
467 optionalTransportZones = Optional.of(transportZonesNew);
469 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
470 .CONFIGURATION,transportZonesIdentifier);
472 String output = null;
474 tepCommandHelper.showTeps(enabled, interval);
475 } catch (TepException e) {
476 output = e.getMessage();
479 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier);
480 assertEquals("No teps configured",output);
485 public void testDeleteOnCommit() {
487 transportZoneList.add(transportZone);
488 transportZoneList.add(transportZoneNew);
489 transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
490 optionalTransportZones = Optional.of(transportZones);
492 doReturn(FluentFutures.immediateFluentFuture(optionalTransportZones)).when(mockReadTx).read(LogicalDatastoreType
493 .CONFIGURATION,transportZonesIdentifier);
496 tepCommandHelper.deleteVtep(dpId1, tepIp1, transportZone1);
497 } catch (TepException e) {
498 LOG.error(e.getMessage());
500 tepCommandHelper.deleteOnCommit();
502 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,vtepsIdentifier);
506 public void testGetTransportZone() {
508 tepCommandHelper.getTransportZone(transportZone1);
510 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
514 public void testIsInCache() {
517 tepCommandHelper.createLocalCache(dpId1, tepIp1, transportZone1);
518 tepCommandHelper.isInCache(dpId1, tepIp1 ,transportZone1);
519 } catch (TepException e) {
520 LOG.error(e.getMessage());
522 verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
526 public void testCheckTepPerTzPerDpn() {
529 tepCommandHelper.createLocalCache(dpId1,tepIp1,transportZone1);
530 } catch (TepException e) {
531 LOG.error(e.getMessage());
533 tepCommandHelper.checkTepPerTzPerDpn(transportZone1,dpId2);
535 verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);