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
8 package org.opendaylight.genius.itm.tests;
10 import static com.google.common.truth.Truth.assertThat;
11 import static org.opendaylight.mdsal.binding.testutils.AssertDataObjects.assertEqualBeans;
13 import com.google.common.util.concurrent.ListenableFuture;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.Optional;
18 import java.util.concurrent.ExecutionException;
19 import java.util.concurrent.Future;
20 import javax.inject.Inject;
21 import org.junit.Before;
22 import org.junit.Rule;
23 import org.junit.Test;
24 import org.junit.rules.MethodRule;
25 import org.opendaylight.genius.datastoreutils.testutils.JobCoordinatorEventsWaiter;
26 import org.opendaylight.genius.datastoreutils.testutils.JobCoordinatorTestModule;
27 import org.opendaylight.genius.datastoreutils.testutils.TestableDataTreeChangeListenerModule;
28 import org.opendaylight.genius.itm.impl.ItmUtils;
29 import org.opendaylight.genius.itm.rpc.ItmManagerRpcService;
30 import org.opendaylight.genius.itm.tests.xtend.ExpectedDcGatewayIp;
31 import org.opendaylight.genius.itm.tests.xtend.ExpectedDeviceVtepsObjects;
32 import org.opendaylight.genius.itm.tests.xtend.ExpectedExternalTunnelObjects;
33 import org.opendaylight.genius.itm.tests.xtend.ExpectedInternalTunnelIdentifierObjects;
34 import org.opendaylight.infrautils.caches.testutils.CacheModule;
35 import org.opendaylight.infrautils.inject.guice.testutils.GuiceRule;
36 import org.opendaylight.infrautils.testutils.LogRule;
37 import org.opendaylight.mdsal.binding.api.DataBroker;
38 import org.opendaylight.mdsal.binding.util.Datastore;
39 import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunner;
40 import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunnerImpl;
41 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeMplsOverGre;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnEndpoints;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.ExternalTunnelList;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfoBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfoKey;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsKey;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnel;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnelBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnelKey;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.DcGatewayIpList;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.dc.gateway.ip.list.DcGatewayIp;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.dc.gateway.ip.list.DcGatewayIpKey;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVteps;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsKey;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddExternalTunnelEndpointInput;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddExternalTunnelEndpointInputBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddExternalTunnelEndpointOutput;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceInput;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceInputBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceOutput;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwMlagDeviceInput;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwMlagDeviceInputBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwMlagDeviceOutput;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.BuildExternalTunnelFromDpnsInput;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.BuildExternalTunnelFromDpnsInputBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.BuildExternalTunnelFromDpnsOutput;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceInput;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceInputBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceOutput;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwMlagDeviceInput;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwMlagDeviceInputBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwMlagDeviceOutput;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetExternalTunnelInterfaceNameInput;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetExternalTunnelInterfaceNameInputBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetExternalTunnelInterfaceNameOutput;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetInternalOrExternalInterfaceNameInput;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetInternalOrExternalInterfaceNameInputBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetInternalOrExternalInterfaceNameOutput;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetInternalOrExternalInterfaceNameOutputBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameInput;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameInputBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameOutput;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointInput;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointInputBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointOutput;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsInput;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsInputBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsOutput;
103 import org.opendaylight.yangtools.yang.binding.DataObject;
104 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
105 import org.opendaylight.yangtools.yang.common.RpcResult;
106 import org.opendaylight.yangtools.yang.common.Uint64;
108 public class ItmManagerRpcServiceTest {
110 public @Rule LogRule logRule = new LogRule();
111 // TODO public @Rule LogCaptureRule logCaptureRule = new LogCaptureRule();
112 public @Rule MethodRule guice = new GuiceRule(ItmTestModule.class, TestableDataTreeChangeListenerModule.class,
113 JobCoordinatorTestModule.class, CacheModule.class);
115 String trunkInterfaceName;
117 ExternalTunnel externalTunnel;
118 ExternalTunnel externalTunnel2;
119 InternalTunnel internalTunnel;
120 DpnEndpoints dpnEndpoints;
121 DPNTEPsInfo dpntePsInfoVxlan;
122 TunnelEndPoints tunnelEndPointsVxlan;
124 TransportZones transportZones;
125 TransportZone transportZone;
126 DeviceVteps deviceVteps;
127 List<DPNTEPsInfo> cfgdDpnListVxlan = new ArrayList<>();
128 List<TunnelEndPoints> tunnelEndPointsListVxlan = new ArrayList<>();
129 List<TransportZone> transportZoneList = new ArrayList<>();
130 List<DeviceVteps> deviceVtepsList = new ArrayList<>();
131 List<String> stringList = new ArrayList<>();
132 List<Uint64> dpId1List = new ArrayList<>();
133 DeviceVtepsKey deviceVtepKey = new DeviceVtepsKey(ItmTestConstants.IP_ADDRESS_3, ItmTestConstants.SOURCE_DEVICE);
134 DeviceVtepsKey deviceVtep2Key = new DeviceVtepsKey(ItmTestConstants.IP_ADDRESS_3, ItmTestConstants.SOURCE_DEVICE_2);
135 AddExternalTunnelEndpointInput addExternalTunnelEndpointInput;
136 GetInternalOrExternalInterfaceNameInput getExternalInterfaceNameInput;
137 GetInternalOrExternalInterfaceNameInput getInternalInterfaceNameInput;
138 GetInternalOrExternalInterfaceNameOutput getInternalOrExternalInterfaceNameOutput;
139 BuildExternalTunnelFromDpnsInput buildExternalTunnelFromDpnsInput;
140 RemoveExternalTunnelFromDpnsInput removeExternalTunnelFromDpnsInput;
141 RemoveExternalTunnelEndpointInput removeExternalTunnelEndpointInput;
142 GetExternalTunnelInterfaceNameInput getExternalTunnelInterfaceNameInput;
143 AddL2GwDeviceInput addL2GwDeviceInput;
144 DeleteL2GwDeviceInput deleteL2GwDeviceInput;
145 AddL2GwMlagDeviceInput addL2GwMlagDeviceInput;
146 DeleteL2GwMlagDeviceInput deleteL2GwMlagDeviceInput;
147 GetTunnelInterfaceNameInput getTunnelInterfaceNameInput;
149 InstanceIdentifier<DcGatewayIp> dcGatewayIpIdentifier = InstanceIdentifier.builder(DcGatewayIpList.class)
150 .child(DcGatewayIp.class, new DcGatewayIpKey(ItmTestConstants.IP_ADDRESS_3)).build();
151 InstanceIdentifier<ExternalTunnel> externalTunnelIdentifier = InstanceIdentifier.create(ExternalTunnelList.class)
152 .child(ExternalTunnel.class, new ExternalTunnelKey(ItmTestConstants.IP_ADDRESS_3.stringValue(),
153 ItmTestConstants.DP_ID_1.toString(), TunnelTypeMplsOverGre.class));
154 InstanceIdentifier<ExternalTunnel> externalTunnelIdentifierNew = InstanceIdentifier.create(ExternalTunnelList.class)
155 .child(ExternalTunnel.class, new ExternalTunnelKey(ItmTestConstants.IP_ADDRESS_3.stringValue(),
156 ItmTestConstants.DP_ID_1.toString(), ItmTestConstants.TUNNEL_TYPE_VXLAN));
157 InstanceIdentifier<ExternalTunnel> externalTunnelIdentifier2 = InstanceIdentifier.create(ExternalTunnelList.class)
158 .child(ExternalTunnel.class, new ExternalTunnelKey(ItmTestConstants.DESTINATION_DEVICE,
159 ItmTestConstants.SOURCE_DEVICE, ItmTestConstants.TUNNEL_TYPE_VXLAN));
160 InstanceIdentifier<InternalTunnel> internalTunnelIdentifier = InstanceIdentifier.create(TunnelList.class)
161 .child(InternalTunnel.class, new InternalTunnelKey(ItmTestConstants.DP_ID_2, ItmTestConstants.DP_ID_1,
162 ItmTestConstants.TUNNEL_TYPE_VXLAN));
163 //InstanceIdentifier<DpnEndpoints> dpnEndpointsIdentifier = InstanceIdentifier.builder(DpnEndpoints.class).build();
166 InstanceIdentifier<DPNTEPsInfo> dpnEndpointsIdentifier = InstanceIdentifier.builder(DpnEndpoints.class)
167 .child(DPNTEPsInfo.class, new DPNTEPsInfoKey(ItmTestConstants.DP_ID_1)).build();
169 InstanceIdentifier<Interface> interfaceIdentifier;
171 InstanceIdentifier<TransportZone> transportZonesIdentifier = InstanceIdentifier.builder(TransportZones.class)
172 .child(TransportZone.class, new TransportZoneKey(ItmTestConstants.TZ_NAME)).build();
174 InstanceIdentifier<DeviceVteps> deviceVtepsIdentifier = InstanceIdentifier.builder(TransportZones.class)
175 .child(TransportZone.class, new TransportZoneKey(ItmTestConstants.TZ_NAME))
176 .child(DeviceVteps.class, deviceVtepKey).build();
177 InstanceIdentifier<DeviceVteps> deviceVtepsIdentifier2 = InstanceIdentifier.builder(TransportZones.class)
178 .child(TransportZone.class, new TransportZoneKey(ItmTestConstants.TZ_NAME))
179 .child(DeviceVteps.class, deviceVtep2Key).build();
181 @Inject DataBroker dataBroker;
182 private @Inject JobCoordinatorEventsWaiter coordinatorEventsWaiter;
183 @Inject ItmManagerRpcService itmManagerRpcService ;
184 ManagedNewTransactionRunner txRunner;
187 public void setUp() throws Exception {
190 this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
193 /*if (dataBroker != null)
195 String errMsg = "present db :" + txRunner;
196 throw new NullPointerException(errMsg);
199 deviceVteps = new DeviceVtepsBuilder().setIpAddress(ItmTestConstants.IP_ADDRESS_3).withKey(new DeviceVtepsKey(
200 ItmTestConstants.IP_ADDRESS_3,ItmTestConstants.SOURCE_DEVICE))
201 .setNodeId(ItmTestConstants.SOURCE_DEVICE).setTopologyId(ItmTestConstants.DESTINATION_DEVICE).build();
202 deviceVtepsList.add(deviceVteps);
203 stringList.add(ItmTestConstants.SOURCE_DEVICE);
204 dpId1List.add(ItmTestConstants.DP_ID_1);
205 stringList.add(ItmTestConstants.SOURCE_DEVICE_2);
207 trunkInterfaceName = ItmUtils.getTrunkInterfaceName(ItmTestConstants.PARENT_INTERFACE_NAME,
208 ItmTestConstants.IP_ADDRESS_3.stringValue(),
209 ItmTestConstants.IP_ADDRESS_3.stringValue(),
210 ItmTestConstants.TUNNEL_TYPE_VXLAN.getName());
211 interfaceIdentifier = ItmUtils.buildId(trunkInterfaceName);
212 tunnelEndPointsVxlan = new TunnelEndPointsBuilder().setIpAddress(ItmTestConstants.IP_ADDRESS_3)
213 .setInterfaceName(ItmTestConstants.PARENT_INTERFACE_NAME)
214 .setTzMembership(ItmUtils.createTransportZoneMembership(ItmTestConstants.TZ_NAME))
215 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
216 .withKey(new TunnelEndPointsKey(ItmTestConstants.IP_ADDRESS_3,
217 ItmTestConstants.TUNNEL_TYPE_VXLAN)).build();
218 tunnelEndPointsListVxlan.add(tunnelEndPointsVxlan);
219 dpntePsInfoVxlan = new DPNTEPsInfoBuilder().setDPNID(ItmTestConstants.DP_ID_1)
220 .withKey(new DPNTEPsInfoKey(ItmTestConstants.DP_ID_1)).setUp(true)
221 .setTunnelEndPoints(tunnelEndPointsListVxlan).build();
222 //cfgdDpnListVxlan.add(dpntePsInfoVxlan);
223 //dpnEndpoints = new DpnEndpointsBuilder().setDPNTEPsInfo(cfgdDpnListVxlan).build();
225 internalTunnel = new InternalTunnelBuilder()
226 .setTunnelInterfaceNames(Collections.singletonList(ItmTestConstants.PARENT_INTERFACE_NAME))
227 .setDestinationDPN(ItmTestConstants.DP_ID_2).setSourceDPN(ItmTestConstants.DP_ID_1)
228 .setTransportType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
229 .withKey(new InternalTunnelKey(ItmTestConstants.DP_ID_2, ItmTestConstants.DP_ID_1,
230 ItmTestConstants.TUNNEL_TYPE_VXLAN))
232 getExternalInterfaceNameInput = new GetInternalOrExternalInterfaceNameInputBuilder()
233 .setDestinationIp(ItmTestConstants.IP_ADDRESS_3).setSourceDpid(ItmTestConstants.DP_ID_1)
234 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_MPLS_OVER_GRE).build();
235 getInternalInterfaceNameInput = new GetInternalOrExternalInterfaceNameInputBuilder()
236 .setDestinationIp(ItmTestConstants.IP_ADDRESS_3).setSourceDpid(ItmTestConstants.DP_ID_1)
237 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_MPLS_OVER_GRE).build();
238 addExternalTunnelEndpointInput = new AddExternalTunnelEndpointInputBuilder()
239 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
240 .setDestinationIp(ItmTestConstants.IP_ADDRESS_3).build();
241 addL2GwDeviceInput = new AddL2GwDeviceInputBuilder().setIpAddress(ItmTestConstants.IP_ADDRESS_3)
242 .setNodeId(ItmTestConstants.SOURCE_DEVICE)
243 .setTopologyId(ItmTestConstants.DESTINATION_DEVICE).build();
244 deleteL2GwDeviceInput = new DeleteL2GwDeviceInputBuilder().setIpAddress(ItmTestConstants.IP_ADDRESS_3)
245 .setNodeId(ItmTestConstants.SOURCE_DEVICE)
246 .setTopologyId(ItmTestConstants.DESTINATION_DEVICE).build();
247 addL2GwMlagDeviceInput = new AddL2GwMlagDeviceInputBuilder().setIpAddress(ItmTestConstants.IP_ADDRESS_3)
248 .setNodeId(stringList)
249 .setTopologyId(ItmTestConstants.DESTINATION_DEVICE).build();
250 deleteL2GwMlagDeviceInput = new DeleteL2GwMlagDeviceInputBuilder().setIpAddress(ItmTestConstants.IP_ADDRESS_3)
251 .setNodeId(stringList).setTopologyId(ItmTestConstants.DESTINATION_DEVICE).build();
252 buildExternalTunnelFromDpnsInput = new BuildExternalTunnelFromDpnsInputBuilder()
253 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
254 .setDestinationIp(ItmTestConstants.IP_ADDRESS_3).setDpnId(dpId1List).build();
255 removeExternalTunnelFromDpnsInput = new RemoveExternalTunnelFromDpnsInputBuilder()
256 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
257 .setDestinationIp(ItmTestConstants.IP_ADDRESS_3).setDpnId(dpId1List).build();
258 removeExternalTunnelEndpointInput = new RemoveExternalTunnelEndpointInputBuilder()
259 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
260 .setDestinationIp(ItmTestConstants.IP_ADDRESS_3).build();
261 getTunnelInterfaceNameInput = new GetTunnelInterfaceNameInputBuilder()
262 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
263 .setSourceDpid(ItmTestConstants.DP_ID_1).setDestinationDpid(ItmTestConstants.DP_ID_2).build();
264 getExternalTunnelInterfaceNameInput = new GetExternalTunnelInterfaceNameInputBuilder()
265 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
266 .setDestinationNode(ItmTestConstants.DESTINATION_DEVICE)
267 .setSourceNode(ItmTestConstants.SOURCE_DEVICE).build();
268 iface = ItmUtils.buildTunnelInterface(ItmTestConstants.DP_ID_1,trunkInterfaceName, String.format("%s %s",
269 ItmUtils.convertTunnelTypetoString(ItmTestConstants.TUNNEL_TYPE_VXLAN), "Trunk Interface"),
270 true,ItmTestConstants.TUNNEL_TYPE_VXLAN,tunnelEndPointsVxlan.getIpAddress(),
271 ItmTestConstants.IP_ADDRESS_3,false,false, ItmTestConstants.MONITOR_PROTOCOL,null, false, null);
273 transportZone = new TransportZoneBuilder().setZoneName(ItmTestConstants.TZ_NAME)
274 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
275 .withKey(new TransportZoneKey(ItmTestConstants.TZ_NAME)).build();
276 //transportZoneList.add(transportZone);
277 //transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
279 // build external tunnel objects
280 externalTunnel = new ExternalTunnelBuilder().setSourceDevice(ItmTestConstants.DP_ID_1.toString())
281 .setDestinationDevice(ItmTestConstants.IP_ADDRESS_3.stringValue())
282 .setTransportType(TunnelTypeMplsOverGre.class)
283 .setTunnelInterfaceName(ItmTestConstants.PARENT_INTERFACE_NAME).build();
285 externalTunnel2 = new ExternalTunnelBuilder().setSourceDevice(ItmTestConstants.SOURCE_DEVICE)
286 .setDestinationDevice(ItmTestConstants.DESTINATION_DEVICE)
287 .setTransportType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
288 .setTunnelInterfaceName(ItmTestConstants.PARENT_INTERFACE_NAME).build();
290 getInternalOrExternalInterfaceNameOutput = new GetInternalOrExternalInterfaceNameOutputBuilder()
291 .setInterfaceName(ItmTestConstants.PARENT_INTERFACE_NAME).build();
293 // commit external tunnel into config DS
294 syncWrite(externalTunnelIdentifier, externalTunnel);
295 syncWrite(externalTunnelIdentifier2, externalTunnel2);
297 /*if (dataBroker != null)
299 String errMsg = "present db :" + internalTunnelIdentifier + " present 2" + internalTunnel ;
300 throw new NullPointerException(errMsg);
303 // commit internal tunnel into config DS.
304 syncWrite(internalTunnelIdentifier, internalTunnel);
307 // commit dpnEndpoints into config DS
309 syncWrite(dpnEndpointsIdentifier, dpntePsInfoVxlan);
311 // wait for completion of ITM config DS default-TZ creation task of DJC
312 coordinatorEventsWaiter.awaitEventsConsumption();
313 // commit TZ into config DS
315 syncWrite(transportZonesIdentifier, transportZone);
319 public void testGetExternalInterfaceNameExtTunnelPresent() throws Exception {
320 Future<RpcResult<GetInternalOrExternalInterfaceNameOutput>> rpcRes = itmManagerRpcService
321 .getInternalOrExternalInterfaceName(getExternalInterfaceNameInput);
322 // check RPC response is SUCCESS
323 assertThat(rpcRes.get().isSuccessful()).isTrue();
325 assertThat(getInternalOrExternalInterfaceNameOutput).isEqualTo(rpcRes.get().getResult());
329 public void testGetInternalInterfaceNameIntTunnelPresent() throws Exception {
330 Future<RpcResult<GetInternalOrExternalInterfaceNameOutput>> rpcRes = itmManagerRpcService
331 .getInternalOrExternalInterfaceName(getInternalInterfaceNameInput);
332 // check RPC response is SUCCESS
333 assertThat(rpcRes.get().isSuccessful()).isTrue();
335 assertThat(getInternalOrExternalInterfaceNameOutput).isEqualTo(rpcRes.get().getResult());
339 public void testAddExternalTunnelEndpoint() throws Exception {
340 ListenableFuture<RpcResult<AddExternalTunnelEndpointOutput>> rpcRes =
341 itmManagerRpcService.addExternalTunnelEndpoint(addExternalTunnelEndpointInput);
343 // check RPC response is SUCCESS
344 assertThat(rpcRes.get().isSuccessful()).isTrue();
346 // check DCGatewayIp is added in config DS
347 assertEqualBeans(ExpectedDcGatewayIp.newDcGatewayIpForRpcTest(),
348 dataBroker.newReadOnlyTransaction()
349 .read(LogicalDatastoreType.CONFIGURATION, dcGatewayIpIdentifier).get().get());
353 public void testAddL2GwDevice() throws Exception {
354 ListenableFuture<RpcResult<AddL2GwDeviceOutput>> rpcRes =
355 itmManagerRpcService.addL2GwDevice(addL2GwDeviceInput);
357 coordinatorEventsWaiter.awaitEventsConsumption();
360 // check RPC response is SUCCESS
361 assertThat(rpcRes.get().isSuccessful()).isTrue();
363 // check L2GwDevice is added in config DS
364 assertEqualBeans(ExpectedDeviceVtepsObjects.newDeviceVtepsObject(), dataBroker.newReadOnlyTransaction()
365 .read(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier).get().get());
369 public void testAddL2GwMlagDevice() throws Exception {
370 ListenableFuture<RpcResult<AddL2GwMlagDeviceOutput>> rpcRes =
371 itmManagerRpcService.addL2GwMlagDevice(addL2GwMlagDeviceInput);
373 coordinatorEventsWaiter.awaitEventsConsumption();
377 // check RPC response is SUCCESS
378 assertThat(rpcRes.get().isSuccessful()).isTrue();
380 // check L2GwMlagDevice is added in config DS
381 assertEqualBeans(ExpectedDeviceVtepsObjects.newDeviceVtepsObject(), dataBroker.newReadOnlyTransaction()
382 .read(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier).get().get());
383 assertEqualBeans(ExpectedDeviceVtepsObjects.newDeviceVtepsObject2(), dataBroker.newReadOnlyTransaction()
384 .read(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier2).get().get());
388 public void testDeleteL2GwDevice() throws Exception {
389 ListenableFuture<RpcResult<DeleteL2GwDeviceOutput>> rpcRes =
390 itmManagerRpcService.deleteL2GwDevice(deleteL2GwDeviceInput);
392 // check RPC response is SUCCESS
393 assertThat(rpcRes.get().isSuccessful()).isTrue();
395 // check L2GwDevice is deleted from config DS
396 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
397 .read(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier).get());
401 public void testDeleteL2GwMlagDevice() throws Exception {
402 ListenableFuture<RpcResult<DeleteL2GwMlagDeviceOutput>> rpcRes =
403 itmManagerRpcService.deleteL2GwMlagDevice(deleteL2GwMlagDeviceInput);
405 // check RPC response is SUCCESS
406 assertThat(rpcRes.get().isSuccessful()).isTrue();
408 // check L2GwMlagDevice is deleted from config DS
409 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
410 .read(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier).get());
411 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
412 .read(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier2).get());
416 public void testBuildExternalTunnelFromDpns() throws Exception {
417 ListenableFuture<RpcResult<BuildExternalTunnelFromDpnsOutput>> rpcRes =
418 itmManagerRpcService.buildExternalTunnelFromDpns(buildExternalTunnelFromDpnsInput);
420 // check RPC response is SUCCESS
421 assertThat(rpcRes.get().isSuccessful()).isTrue();
423 // check ExternalTunnel From Dpns is added in config DS
424 assertEqualBeans(ExpectedExternalTunnelObjects.newExternalTunnelForRpcTest(),
425 dataBroker.newReadOnlyTransaction()
426 .read(LogicalDatastoreType.CONFIGURATION,externalTunnelIdentifierNew).get().get());
430 public void testRemoveExternalTunnelFromDpns() throws Exception {
431 ListenableFuture<RpcResult<RemoveExternalTunnelFromDpnsOutput>> rpcRes =
432 itmManagerRpcService.removeExternalTunnelFromDpns(removeExternalTunnelFromDpnsInput);
434 // check RPC response is SUCCESS
435 assertThat(rpcRes.get().isSuccessful()).isTrue();
437 // check ExternalTunnel From Dpns is deleted from config DS
438 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
439 .read(LogicalDatastoreType.CONFIGURATION, externalTunnelIdentifierNew).get());
440 // check iface is removed
441 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
442 .read(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier).get());
446 public void testRemoveExternalTunnelEndpoint() throws Exception {
447 // call RPC to add ExternalTunnelEndpoint as pre-requisite
448 ListenableFuture<RpcResult<AddExternalTunnelEndpointOutput>> rpcRes =
449 itmManagerRpcService.addExternalTunnelEndpoint(addExternalTunnelEndpointInput);
451 // check RPC response is SUCCESS
452 assertThat(rpcRes.get().isSuccessful()).isTrue();
454 ListenableFuture<RpcResult<RemoveExternalTunnelEndpointOutput>> removeExternalTunnelEndpoint =
455 itmManagerRpcService.removeExternalTunnelEndpoint(removeExternalTunnelEndpointInput);
457 // check RPC response is SUCCESS
458 assertThat(removeExternalTunnelEndpoint.get().isSuccessful()).isTrue();
460 // check ExternalTunnelEndpoint is deleted from config DS
461 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
462 .read(LogicalDatastoreType.CONFIGURATION, externalTunnelIdentifierNew).get());
463 // check iface is removed
464 assertThat(Optional.empty()).isEqualTo(dataBroker.newReadOnlyTransaction()
465 .read(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier).get());
469 public void testGetTunnelInterfaceName() throws Exception {
470 Future<RpcResult<GetTunnelInterfaceNameOutput>> rpcRes = itmManagerRpcService
471 .getTunnelInterfaceName(getTunnelInterfaceNameInput);
472 // check RPC response is SUCCESS
473 assertThat(rpcRes.get().isSuccessful()).isTrue();
475 // check ExternalTunnel From Dpns is added in config DS
476 assertEqualBeans(ExpectedInternalTunnelIdentifierObjects.newInternalTunnelObjVxLanOneToTwo(),
477 dataBroker.newReadOnlyTransaction()
478 .read(LogicalDatastoreType.CONFIGURATION,internalTunnelIdentifier).get().get());
482 public void testGetExternalTunnelInterfaceName() throws Exception {
483 Future<RpcResult<GetExternalTunnelInterfaceNameOutput>> rpcRes = itmManagerRpcService
484 .getExternalTunnelInterfaceName(getExternalTunnelInterfaceNameInput);
486 // check RPC response is SUCCESS
487 assertThat(rpcRes.get().isSuccessful()).isTrue();
489 // check ExternalTunnel From Dpns is added in config DS
490 assertEqualBeans(ExpectedExternalTunnelObjects.newExternalTunnel2ForRpcTest(),
491 dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType
492 .CONFIGURATION,externalTunnelIdentifier2).get().get());
494 // check for interfaceName
495 assertThat(ItmTestConstants.PARENT_INTERFACE_NAME).isEqualTo(rpcRes.get().getResult().getInterfaceName());
498 private <T extends DataObject> void syncWrite(InstanceIdentifier<T> path, T data) {
500 txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
501 tx -> tx.mergeParentStructurePut(path, data)).get();
502 } catch (InterruptedException | ExecutionException e) {
503 throw new RuntimeException(e.getMessage(), e);