TR: HY22527 Yang changes and IFM flag added for OF-Tunnel
[genius.git] / commons / testutils / src / main / java / org / opendaylight / genius / testutils / itm / ItmRpcTestImpl.java
1 /*
2  * Copyright © 2017 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.genius.testutils.itm;
9
10 import com.google.common.collect.Lists;
11 import com.google.common.util.concurrent.ListenableFuture;
12 import java.util.Map;
13 import java.util.concurrent.ConcurrentHashMap;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddExternalTunnelEndpointInput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddExternalTunnelEndpointOutput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceInput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceOutput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwMlagDeviceInput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwMlagDeviceOutput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.BuildExternalTunnelFromDpnsInput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.BuildExternalTunnelFromDpnsOutput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.CreateTerminatingServiceActionsInput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.CreateTerminatingServiceActionsOutput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceInput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceOutput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwMlagDeviceInput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwMlagDeviceOutput;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetDpnEndpointIpsInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetDpnEndpointIpsOutput;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetDpnEndpointIpsOutputBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetDpnInfoInput;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetDpnInfoOutput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetEgressActionsForTunnelInput;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetEgressActionsForTunnelOutput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetExternalTunnelInterfaceNameInput;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetExternalTunnelInterfaceNameOutput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetExternalTunnelInterfaceNameOutputBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetInternalOrExternalInterfaceNameInput;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetInternalOrExternalInterfaceNameOutput;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTepIpInput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTepIpOutput;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameInput;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameOutput;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameOutputBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelTypeInput;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelTypeOutput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetWatchPortForTunnelInput;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetWatchPortForTunnelOutput;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentInput;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentOutput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentOutputBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsTunnelInternalOrExternalInput;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsTunnelInternalOrExternalOutput;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointInput;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointOutput;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsInput;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsOutput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveTerminatingServiceActionsInput;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveTerminatingServiceActionsOutput;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.SetBfdParamOnTunnelInput;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.SetBfdParamOnTunnelOutput;
65 import org.opendaylight.yangtools.yang.common.RpcResult;
66 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
67 import org.opendaylight.yangtools.yang.common.Uint64;
68
69 public final class ItmRpcTestImpl implements ItmRpcService {
70
71     // FIXME: access is complete synchronized, why are these ConcurrentHashMaps???
72     private final Map<Uint64, IpAddress> tepIps = new ConcurrentHashMap<>();
73     private final Map<Uint64, Map<String, String>> interfaceNames = new ConcurrentHashMap<>();
74     private final Map<Uint64, Map<String, String>> externalInterfaceNames = new ConcurrentHashMap<>();
75
76     public synchronized void addDpn(Uint64 dpnId, String tepIp) {
77         tepIps.put(dpnId, IpAddressBuilder.getDefaultInstance(tepIp));
78     }
79
80     public synchronized void addInterface(Uint64 dpnId, String dstTep, String interfaceName) {
81         interfaceNames.putIfAbsent(dpnId, new ConcurrentHashMap<>());
82         interfaceNames.get(dpnId).put(dstTep, interfaceName);
83     }
84
85     public synchronized void addL2GwInterface(Uint64 dpnId, String nodeId, String interfaceName) {
86         externalInterfaceNames.putIfAbsent(dpnId, new ConcurrentHashMap<>());
87         externalInterfaceNames.get(dpnId).put(nodeId, interfaceName);
88     }
89
90     public synchronized void addExternalInterface(Uint64 dpnId, String dstTep, String interfaceName) {
91         //dstTep = IpAddressBuilder.getDefaultInstance(dstTep).toString();
92         externalInterfaceNames.putIfAbsent(dpnId, new ConcurrentHashMap<>());
93         externalInterfaceNames.get(dpnId).put(dstTep, interfaceName);
94     }
95
96     @Override
97     public synchronized ListenableFuture<RpcResult<BuildExternalTunnelFromDpnsOutput>> buildExternalTunnelFromDpns(
98             BuildExternalTunnelFromDpnsInput input) {
99         return RpcResultBuilder.<BuildExternalTunnelFromDpnsOutput>success().buildFuture();
100     }
101
102     @Override
103     public synchronized ListenableFuture<RpcResult<RemoveExternalTunnelEndpointOutput>> removeExternalTunnelEndpoint(
104             RemoveExternalTunnelEndpointInput input) {
105         return RpcResultBuilder.<RemoveExternalTunnelEndpointOutput>success().buildFuture();
106     }
107
108     @Override
109     public ListenableFuture<RpcResult<GetDpnInfoOutput>> getDpnInfo(GetDpnInfoInput input) {
110         throw new UnsupportedOperationException("getDpnInfo");
111     }
112
113     @Override
114     public synchronized ListenableFuture<RpcResult<AddL2GwMlagDeviceOutput>> addL2GwMlagDevice(
115             AddL2GwMlagDeviceInput input) {
116         return RpcResultBuilder.<AddL2GwMlagDeviceOutput>success().buildFuture();
117     }
118
119     @Override
120     public synchronized ListenableFuture<RpcResult<RemoveExternalTunnelFromDpnsOutput>> removeExternalTunnelFromDpns(
121             RemoveExternalTunnelFromDpnsInput input) {
122         return RpcResultBuilder.<RemoveExternalTunnelFromDpnsOutput>success().buildFuture();
123     }
124
125     @Override
126     public synchronized ListenableFuture<RpcResult<DeleteL2GwDeviceOutput>> deleteL2GwDevice(
127             DeleteL2GwDeviceInput input) {
128         return RpcResultBuilder.<DeleteL2GwDeviceOutput>success().buildFuture();
129     }
130
131     @Override
132     public synchronized ListenableFuture<RpcResult<AddL2GwDeviceOutput>> addL2GwDevice(AddL2GwDeviceInput input) {
133         return RpcResultBuilder.<AddL2GwDeviceOutput>success().buildFuture();
134     }
135
136     @Override
137     public ListenableFuture<RpcResult<GetWatchPortForTunnelOutput>> getWatchPortForTunnel(
138             GetWatchPortForTunnelInput input) {
139         throw new UnsupportedOperationException("TODO");
140     }
141
142     public ListenableFuture<RpcResult<GetTepIpOutput>> getTepIp(GetTepIpInput input) {
143         return null;
144     }
145
146     @Override
147     public synchronized ListenableFuture<RpcResult<IsTunnelInternalOrExternalOutput>> isTunnelInternalOrExternal(
148             IsTunnelInternalOrExternalInput input) {
149         throw new UnsupportedOperationException("TODO");
150     }
151
152     @Override
153     public synchronized ListenableFuture<RpcResult<GetTunnelInterfaceNameOutput>> getTunnelInterfaceName(
154             GetTunnelInterfaceNameInput input) {
155         String interfaceName = interfaceNames.get(input.getSourceDpid())
156                 .get(tepIps.get(input.getDestinationDpid()).stringValue());
157         GetTunnelInterfaceNameOutput output =
158                 new GetTunnelInterfaceNameOutputBuilder().setInterfaceName(interfaceName).build();
159         return RpcResultBuilder.success(output).buildFuture();
160     }
161
162     @Override
163     public synchronized ListenableFuture<RpcResult<IsDcgwPresentOutput>> isDcgwPresent(IsDcgwPresentInput input) {
164         IsDcgwPresentOutput output = new IsDcgwPresentOutputBuilder().setRetVal(0L).build();
165         return RpcResultBuilder.success(output).buildFuture();
166     }
167
168     @Override
169     public synchronized ListenableFuture<RpcResult<GetExternalTunnelInterfaceNameOutput>>
170             getExternalTunnelInterfaceName(GetExternalTunnelInterfaceNameInput input) {
171         String interfaceName = externalInterfaceNames.get(Uint64.valueOf(input.getSourceNode()))
172                 .get(input.getDestinationNode());
173         GetExternalTunnelInterfaceNameOutput output = new GetExternalTunnelInterfaceNameOutputBuilder()
174                 .setInterfaceName(interfaceName)
175                 .build();
176         return RpcResultBuilder.success(output).buildFuture();
177     }
178
179     @Override
180     public synchronized ListenableFuture<RpcResult<CreateTerminatingServiceActionsOutput>>
181         createTerminatingServiceActions(CreateTerminatingServiceActionsInput input) {
182         return RpcResultBuilder.<CreateTerminatingServiceActionsOutput>success().buildFuture();
183     }
184
185     @Override
186     public synchronized ListenableFuture<RpcResult<GetDpnEndpointIpsOutput>> getDpnEndpointIps(
187             GetDpnEndpointIpsInput input) {
188         GetDpnEndpointIpsOutput output = new GetDpnEndpointIpsOutputBuilder()
189                 .setNexthopipList(Lists.newArrayList(tepIps.get(input.getSourceDpid()))).build();
190         return RpcResultBuilder.success(output).buildFuture();
191     }
192
193     @Override
194     public synchronized ListenableFuture<RpcResult<DeleteL2GwMlagDeviceOutput>> deleteL2GwMlagDevice(
195             DeleteL2GwMlagDeviceInput input) {
196         return RpcResultBuilder.<DeleteL2GwMlagDeviceOutput>success().buildFuture();
197     }
198
199     @Override
200     public synchronized ListenableFuture<RpcResult<GetInternalOrExternalInterfaceNameOutput>>
201             getInternalOrExternalInterfaceName(GetInternalOrExternalInterfaceNameInput input) {
202         throw new UnsupportedOperationException("TODO");
203     }
204
205     @Override
206     public synchronized ListenableFuture<RpcResult<RemoveTerminatingServiceActionsOutput>>
207         removeTerminatingServiceActions(RemoveTerminatingServiceActionsInput input) {
208         return RpcResultBuilder.<RemoveTerminatingServiceActionsOutput>success().buildFuture();
209     }
210
211     @Override
212     public synchronized ListenableFuture<RpcResult<AddExternalTunnelEndpointOutput>> addExternalTunnelEndpoint(
213             AddExternalTunnelEndpointInput input) {
214         return RpcResultBuilder.<AddExternalTunnelEndpointOutput>success().buildFuture();
215     }
216
217     @Override
218     public synchronized ListenableFuture<RpcResult<SetBfdParamOnTunnelOutput>> setBfdParamOnTunnel(
219             SetBfdParamOnTunnelInput input) {
220         throw new UnsupportedOperationException("TODO");
221     }
222
223     @Override
224     public synchronized ListenableFuture<RpcResult<GetEgressActionsForTunnelOutput>>
225         getEgressActionsForTunnel(GetEgressActionsForTunnelInput input) {
226         throw new UnsupportedOperationException("TODO");
227     }
228
229     @Override
230     public synchronized ListenableFuture<RpcResult<GetTunnelTypeOutput>> getTunnelType(GetTunnelTypeInput input) {
231         throw new UnsupportedOperationException("TODO");
232     }
233 }