75cc7cbdcdd324af81478774844098e9b200e834
[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.GetTunnelInterfaceNameInput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameOutput;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameOutputBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelTypeInput;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelTypeOutput;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetWatchPortForTunnelInput;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetWatchPortForTunnelOutput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentInput;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentOutput;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentOutputBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsTunnelInternalOrExternalInput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsTunnelInternalOrExternalOutput;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointInput;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointOutput;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsInput;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelFromDpnsOutput;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveTerminatingServiceActionsInput;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveTerminatingServiceActionsOutput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.SetBfdParamOnTunnelInput;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.SetBfdParamOnTunnelOutput;
63 import org.opendaylight.yangtools.yang.common.RpcResult;
64 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
65 import org.opendaylight.yangtools.yang.common.Uint64;
66
67 public final class ItmRpcTestImpl implements ItmRpcService {
68
69     // FIXME: access is complete synchronized, why are these ConcurrentHashMaps???
70     private final Map<Uint64, IpAddress> tepIps = new ConcurrentHashMap<>();
71     private final Map<Uint64, Map<String, String>> interfaceNames = new ConcurrentHashMap<>();
72     private final Map<Uint64, Map<String, String>> externalInterfaceNames = new ConcurrentHashMap<>();
73
74     public synchronized void addDpn(Uint64 dpnId, String tepIp) {
75         tepIps.put(dpnId, IpAddressBuilder.getDefaultInstance(tepIp));
76     }
77
78     public synchronized void addInterface(Uint64 dpnId, String dstTep, String interfaceName) {
79         interfaceNames.putIfAbsent(dpnId, new ConcurrentHashMap<>());
80         interfaceNames.get(dpnId).put(dstTep, interfaceName);
81     }
82
83     public synchronized void addL2GwInterface(Uint64 dpnId, String nodeId, String interfaceName) {
84         externalInterfaceNames.putIfAbsent(dpnId, new ConcurrentHashMap<>());
85         externalInterfaceNames.get(dpnId).put(nodeId, interfaceName);
86     }
87
88     public synchronized void addExternalInterface(Uint64 dpnId, String dstTep, String interfaceName) {
89         //dstTep = IpAddressBuilder.getDefaultInstance(dstTep).toString();
90         externalInterfaceNames.putIfAbsent(dpnId, new ConcurrentHashMap<>());
91         externalInterfaceNames.get(dpnId).put(dstTep, interfaceName);
92     }
93
94     @Override
95     public synchronized ListenableFuture<RpcResult<BuildExternalTunnelFromDpnsOutput>> buildExternalTunnelFromDpns(
96             BuildExternalTunnelFromDpnsInput input) {
97         return RpcResultBuilder.<BuildExternalTunnelFromDpnsOutput>success().buildFuture();
98     }
99
100     @Override
101     public synchronized ListenableFuture<RpcResult<RemoveExternalTunnelEndpointOutput>> removeExternalTunnelEndpoint(
102             RemoveExternalTunnelEndpointInput input) {
103         return RpcResultBuilder.<RemoveExternalTunnelEndpointOutput>success().buildFuture();
104     }
105
106     @Override
107     public ListenableFuture<RpcResult<GetDpnInfoOutput>> getDpnInfo(GetDpnInfoInput input) {
108         throw new UnsupportedOperationException("getDpnInfo");
109     }
110
111     @Override
112     public synchronized ListenableFuture<RpcResult<AddL2GwMlagDeviceOutput>> addL2GwMlagDevice(
113             AddL2GwMlagDeviceInput input) {
114         return RpcResultBuilder.<AddL2GwMlagDeviceOutput>success().buildFuture();
115     }
116
117     @Override
118     public synchronized ListenableFuture<RpcResult<RemoveExternalTunnelFromDpnsOutput>> removeExternalTunnelFromDpns(
119             RemoveExternalTunnelFromDpnsInput input) {
120         return RpcResultBuilder.<RemoveExternalTunnelFromDpnsOutput>success().buildFuture();
121     }
122
123     @Override
124     public synchronized ListenableFuture<RpcResult<DeleteL2GwDeviceOutput>> deleteL2GwDevice(
125             DeleteL2GwDeviceInput input) {
126         return RpcResultBuilder.<DeleteL2GwDeviceOutput>success().buildFuture();
127     }
128
129     @Override
130     public synchronized ListenableFuture<RpcResult<AddL2GwDeviceOutput>> addL2GwDevice(AddL2GwDeviceInput input) {
131         return RpcResultBuilder.<AddL2GwDeviceOutput>success().buildFuture();
132     }
133
134     @Override
135     public ListenableFuture<RpcResult<GetWatchPortForTunnelOutput>> getWatchPortForTunnel(
136             GetWatchPortForTunnelInput input) {
137         throw new UnsupportedOperationException("TODO");
138     }
139
140     @Override
141     public synchronized ListenableFuture<RpcResult<IsTunnelInternalOrExternalOutput>> isTunnelInternalOrExternal(
142             IsTunnelInternalOrExternalInput input) {
143         throw new UnsupportedOperationException("TODO");
144     }
145
146     @Override
147     public synchronized ListenableFuture<RpcResult<GetTunnelInterfaceNameOutput>> getTunnelInterfaceName(
148             GetTunnelInterfaceNameInput input) {
149         String interfaceName = interfaceNames.get(input.getSourceDpid())
150                 .get(tepIps.get(input.getDestinationDpid()).stringValue());
151         GetTunnelInterfaceNameOutput output =
152                 new GetTunnelInterfaceNameOutputBuilder().setInterfaceName(interfaceName).build();
153         return RpcResultBuilder.success(output).buildFuture();
154     }
155
156     @Override
157     public synchronized ListenableFuture<RpcResult<IsDcgwPresentOutput>> isDcgwPresent(IsDcgwPresentInput input) {
158         IsDcgwPresentOutput output = new IsDcgwPresentOutputBuilder().setRetVal(0L).build();
159         return RpcResultBuilder.success(output).buildFuture();
160     }
161
162     @Override
163     public synchronized ListenableFuture<RpcResult<GetExternalTunnelInterfaceNameOutput>>
164             getExternalTunnelInterfaceName(GetExternalTunnelInterfaceNameInput input) {
165         String interfaceName = externalInterfaceNames.get(Uint64.valueOf(input.getSourceNode()))
166                 .get(input.getDestinationNode());
167         GetExternalTunnelInterfaceNameOutput output = new GetExternalTunnelInterfaceNameOutputBuilder()
168                 .setInterfaceName(interfaceName)
169                 .build();
170         return RpcResultBuilder.success(output).buildFuture();
171     }
172
173     @Override
174     public synchronized ListenableFuture<RpcResult<CreateTerminatingServiceActionsOutput>>
175         createTerminatingServiceActions(CreateTerminatingServiceActionsInput input) {
176         return RpcResultBuilder.<CreateTerminatingServiceActionsOutput>success().buildFuture();
177     }
178
179     @Override
180     public synchronized ListenableFuture<RpcResult<GetDpnEndpointIpsOutput>> getDpnEndpointIps(
181             GetDpnEndpointIpsInput input) {
182         GetDpnEndpointIpsOutput output = new GetDpnEndpointIpsOutputBuilder()
183                 .setNexthopipList(Lists.newArrayList(tepIps.get(input.getSourceDpid()))).build();
184         return RpcResultBuilder.success(output).buildFuture();
185     }
186
187     @Override
188     public synchronized ListenableFuture<RpcResult<DeleteL2GwMlagDeviceOutput>> deleteL2GwMlagDevice(
189             DeleteL2GwMlagDeviceInput input) {
190         return RpcResultBuilder.<DeleteL2GwMlagDeviceOutput>success().buildFuture();
191     }
192
193     @Override
194     public synchronized ListenableFuture<RpcResult<GetInternalOrExternalInterfaceNameOutput>>
195             getInternalOrExternalInterfaceName(GetInternalOrExternalInterfaceNameInput input) {
196         throw new UnsupportedOperationException("TODO");
197     }
198
199     @Override
200     public synchronized ListenableFuture<RpcResult<RemoveTerminatingServiceActionsOutput>>
201         removeTerminatingServiceActions(RemoveTerminatingServiceActionsInput input) {
202         return RpcResultBuilder.<RemoveTerminatingServiceActionsOutput>success().buildFuture();
203     }
204
205     @Override
206     public synchronized ListenableFuture<RpcResult<AddExternalTunnelEndpointOutput>> addExternalTunnelEndpoint(
207             AddExternalTunnelEndpointInput input) {
208         return RpcResultBuilder.<AddExternalTunnelEndpointOutput>success().buildFuture();
209     }
210
211     @Override
212     public synchronized ListenableFuture<RpcResult<SetBfdParamOnTunnelOutput>> setBfdParamOnTunnel(
213             SetBfdParamOnTunnelInput input) {
214         throw new UnsupportedOperationException("TODO");
215     }
216
217     @Override
218     public synchronized ListenableFuture<RpcResult<GetEgressActionsForTunnelOutput>>
219         getEgressActionsForTunnel(GetEgressActionsForTunnelInput input) {
220         throw new UnsupportedOperationException("TODO");
221     }
222
223     @Override
224     public synchronized ListenableFuture<RpcResult<GetTunnelTypeOutput>> getTunnelType(GetTunnelTypeInput input) {
225         throw new UnsupportedOperationException("TODO");
226     }
227 }