Service-notification handling for serviceHandler
[transportpce.git] / servicehandler / src / test / java / org / opendaylight / transportpce / servicehandler / utils / ServiceDataUtils.java
1 /*
2  * Copyright © 2018 Orange, Inc. 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.transportpce.servicehandler.utils;
9
10 import com.google.common.util.concurrent.ListenableFuture;
11 import com.google.common.util.concurrent.ListeningExecutorService;
12 import com.google.common.util.concurrent.MoreExecutors;
13
14 import java.time.OffsetDateTime;
15 import java.time.ZoneOffset;
16 import java.time.format.DateTimeFormatter;
17 import java.util.concurrent.Callable;
18 import java.util.concurrent.Executors;
19
20 import org.opendaylight.transportpce.servicehandler.MappingConstraints;
21 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestInput;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestInputBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.ServicePathRpcResult;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.ServicePathRpcResultBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.service.path.rpc.result.PathDescription;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.service.path.rpc.result.PathDescriptionBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceRpcResultSp;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceRpcResultSpBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev170930.ServiceRpcResultSh;
31 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev170930.ServiceRpcResultShBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ConnectionType;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.RpcActions;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceFormat;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceNotificationTypes;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeader;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeaderBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.RxDirection;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.TxDirection;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.lgx.LgxBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.PortBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInput;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInputBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteInput;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteInputBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceRerouteInput;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceRerouteInputBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceCreateInput;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceCreateInputBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceDeleteInput;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceDeleteInputBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.delete.input.ServiceDeleteReqInfo;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.delete.input.ServiceDeleteReqInfoBuilder;
54 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.AToZDirection;
55 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.AToZDirectionBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ZToADirection;
57 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ZToADirectionBuilder;
58 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.RoutingConstraintsSp.PceMetric;
59 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.RpcStatusEx;
60 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.ServicePathNotificationTypes;
61 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.service.handler.header.ServiceHandlerHeaderBuilder;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
63
64 public final class ServiceDataUtils {
65
66     public static ServiceCreateInput buildServiceCreateInput() {
67
68         ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder();
69         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
70             .ServiceAEnd serviceAEnd = getServiceAEndBuild()
71             .build();
72         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
73             .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service
74             .create.input.ServiceZEndBuilder()
75             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-3-2")
76             .setTxDirection(getTxDirection())
77             .setRxDirection(getRxDirection())
78             .build();
79
80         builtInput.setCommonId("commonId");
81         builtInput.setConnectionType(ConnectionType.Service);
82         builtInput.setCustomer("Customer");
83         builtInput.setServiceName("service 1");
84         builtInput.setServiceAEnd(serviceAEnd);
85         builtInput.setServiceZEnd(serviceZEnd);
86         builtInput.setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
87             .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build());
88
89         return builtInput.build();
90     }
91
92     public static PathComputationRequestInput createPceRequestInput(ServiceCreateInput input) {
93         MappingConstraints mappingConstraints =
94                 new MappingConstraints(input.getHardConstraints(), input.getSoftConstraints());
95         mappingConstraints.serviceToServicePathConstarints();
96         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
97         SdncRequestHeader serviceHandler = input.getSdncRequestHeader();
98         if (serviceHandler != null) {
99             serviceHandlerHeader.setRequestId(serviceHandler.getRequestId());
100         }
101         return new PathComputationRequestInputBuilder()
102             .setServiceName(input.getServiceName())
103             .setResourceReserve(true)
104             .setServiceHandlerHeader(serviceHandlerHeader.build())
105             .setHardConstraints(mappingConstraints.getServicePathHardConstraints())
106             .setSoftConstraints(mappingConstraints.getServicePathSoftConstraints())
107             .setPceMetric(PceMetric.TEMetric)
108             .setServiceAEnd(ModelMappingUtils.createServiceAEnd(input.getServiceAEnd()))
109             .setServiceZEnd(ModelMappingUtils.createServiceZEnd(input.getServiceZEnd()))
110             .build();
111     }
112
113     public static TempServiceCreateInput buildTempServiceCreateInput() {
114
115         TempServiceCreateInputBuilder builtInput = new TempServiceCreateInputBuilder();
116         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.temp.service.create.input
117             .ServiceAEnd serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014
118             .temp.service.create.input.ServiceAEndBuilder()
119             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
120             .setTxDirection(getTxDirection())
121             .setRxDirection(getRxDirection())
122             .build();
123         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.temp.service.create.input
124             .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.temp
125             .service.create.input.ServiceZEndBuilder()
126             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-3-2")
127             .setTxDirection(getTxDirection())
128             .setRxDirection(getRxDirection())
129             .build();
130
131         builtInput.setCommonId("commonId");
132         builtInput.setConnectionType(ConnectionType.Service);
133         builtInput.setCustomer("Customer");
134         builtInput.setServiceAEnd(serviceAEnd);
135         builtInput.setServiceZEnd(serviceZEnd);
136         builtInput.setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
137                 .setRpcAction(RpcActions.TempServiceCreate).setNotificationUrl("notification url").build());
138
139         return builtInput.build();
140     }
141
142     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
143         .ServiceAEndBuilder getServiceAEndBuild() {
144         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
145             .ServiceAEndBuilder()
146             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
147             .setTxDirection(getTxDirection())
148             .setRxDirection(getRxDirection());
149     }
150
151     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
152         .ServiceZEndBuilder getServiceZEndBuild() {
153         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
154             .ServiceZEndBuilder()
155             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
156             .setTxDirection(getTxDirection())
157             .setRxDirection(getRxDirection());
158     }
159
160     private static TxDirection getTxDirection() {
161         return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
162                 .endpoint.TxDirectionBuilder().setPort(new PortBuilder().setPortDeviceName("device name")
163                         .setPortName("port name").setPortRack("port rack").setPortShelf("port shelf")
164                         .setPortSlot("port slot").setPortSubSlot("port subslot").setPortType("port type").build())
165                         .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name").setLgxPortName("lgx port name")
166                                 .setLgxPortRack("lgx port rack").setLgxPortShelf("lgx port shelf").build())
167                         .build();
168     }
169
170     private static RxDirection getRxDirection() {
171         return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
172                 .endpoint.RxDirectionBuilder()
173                 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
174                     .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
175                     .setPortSubSlot("port subslot").setPortType("port type").build())
176                 .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name")
177                     .setLgxPortName("lgx port name").setLgxPortRack("lgx port rack")
178                     .setLgxPortShelf("lgx port shelf").build())
179                         .build();
180     }
181
182     public static ServiceDeleteInput buildServiceDeleteInput() {
183         ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
184         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
185         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
186         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
187         deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder().setServiceName("service 1")
188             .setDueDate(datetime).setTailRetention(ServiceDeleteReqInfo.TailRetention.No).build());
189         SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder();
190         sdncBuilder.setNotificationUrl("notification url");
191         sdncBuilder.setRequestId("request 1");
192         sdncBuilder.setRequestSystemId("request system 1");
193         sdncBuilder.setRpcAction(RpcActions.ServiceDelete);
194         deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
195         return deleteInputBldr.build();
196     }
197
198     public static TempServiceDeleteInput buildTempServiceDeleteInput() {
199         TempServiceDeleteInputBuilder deleteInputBldr = new TempServiceDeleteInputBuilder();
200         deleteInputBldr.setCommonId("service 1");
201         return deleteInputBldr.build();
202     }
203
204     public static ServiceRerouteInput buildServiceRerouteInput() {
205         ServiceRerouteInputBuilder builder = new ServiceRerouteInputBuilder();
206         builder.setServiceName("service 1");
207         return builder.build();
208     }
209
210     public static ServicePathRpcResult buildServicePathRpcResult() {
211         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
212         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
213         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
214         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
215         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
216             .setPathDescription(createPathDescription(0,1, 0, 1))
217             .setServiceName("service 1")
218             .setStatus(RpcStatusEx.Successful).setStatusMessage("success");
219         return builder.build();
220     }
221
222     public static ServicePathRpcResult buildServicePathRpcResult(
223             ServicePathNotificationTypes servicePathNotificationTypes, String serviceName, RpcStatusEx rpcStatusEx,
224             String message, Boolean pathDescription) {
225         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
226         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
227         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
228         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
229         builder.setNotificationType(servicePathNotificationTypes)
230                 .setServiceName(serviceName)
231                 .setStatus(rpcStatusEx).setStatusMessage(message);
232         if (pathDescription) {
233             builder.setPathDescription(createPathDescription(0L, 5L, 0L, 5L));
234         }
235         return builder.build();
236     }
237
238     public static ServicePathRpcResult buildFailedPceServicePathRpcResult() {
239         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
240         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
241         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
242         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
243         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
244                 .setPathDescription(createPathDescription(0, 1, 0, 1)).setServiceName("service 1")
245                 .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
246         return builder.build();
247     }
248
249     public static ServicePathRpcResult buildFailedServicePathRpcResult() {
250         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
251         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
252         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
253         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
254         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
255             .setPathDescription(createPathDescription(0,1, 0, 1))
256             .setServiceName("service 1")
257                 .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
258         return builder.build();
259     }
260
261     public static ServiceRpcResultSp buildServiceRpcResultSp() {
262         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
263         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
264         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
265         ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
266         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
267                 .setServiceName("service 1").setStatus(RpcStatusEx.Successful).setStatusMessage("success");
268         return builder.build();
269     }
270
271     public static ServiceRpcResultSp buildServiceRpcResultSp(ServicePathNotificationTypes servicePathNotificationTypes,
272             String serviceName, RpcStatusEx rpcStatusEx, String message) {
273         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
274         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
275         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
276         ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
277         builder.setNotificationType(servicePathNotificationTypes).setServiceName(serviceName)
278                 .setStatus(rpcStatusEx).setStatusMessage(message);
279         return builder.build();
280     }
281
282     public static ServiceRpcResultSh buildServiceRpcResultSh(ServiceNotificationTypes serviceNotificationTypes,
283             String serviceName, org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
284             .rev170426.RpcStatusEx rpcStatusEx, String message) {
285         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
286         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
287         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
288         ServiceRpcResultShBuilder builder = new ServiceRpcResultShBuilder();
289         builder.setNotificationType(serviceNotificationTypes).setServiceName(serviceName)
290                 .setStatus(rpcStatusEx).setStatusMessage(message);
291         return builder.build();
292     }
293
294     public static ServiceRpcResultSp buildFailedServiceRpcResultSp() {
295         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
296         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
297         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
298         ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
299         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
300                 .setServiceName("service 1").setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
301         return builder.build();
302     }
303
304     public static PathDescription createPathDescription(long azRate, long azWaveLength, long zaRate,
305         long zaWaveLength) {
306         AToZDirection atozDirection = new AToZDirectionBuilder()
307             .setRate(azRate)
308             .setAToZWavelengthNumber(azWaveLength)
309             .setAToZ(null)
310             .build();
311         ZToADirection ztoaDirection = new ZToADirectionBuilder()
312             .setRate(zaRate)
313             .setZToAWavelengthNumber(zaWaveLength)
314             .setZToA(null)
315             .build();
316         PathDescription pathDescription = new PathDescriptionBuilder()
317             .setAToZDirection(atozDirection)
318             .setZToADirection(ztoaDirection)
319             .build();
320         return pathDescription;
321     }
322
323     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
324         .ServiceAEndBuilder getServiceAEndBuildReconfigure() {
325         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
326             .ServiceAEndBuilder()
327             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
328             .setTxDirection(getTxDirection())
329             .setRxDirection(getRxDirection());
330     }
331
332     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
333         .ServiceZEndBuilder getServiceZEndBuildReconfigure() {
334         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
335             .ServiceZEndBuilder()
336             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
337             .setTxDirection(getTxDirection())
338             .setRxDirection(getRxDirection());
339     }
340
341     public static <T> ListenableFuture<T> returnFuture(T output) {
342         final ListeningExecutorService executor =
343                 MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(1));
344         return executor.submit(new Callable<T>() {
345             @Override
346             public T call() throws Exception {
347                 return output;
348             }
349         });
350     }
351
352     private ServiceDataUtils() {
353     }
354
355 }