Manage ODU4 services over multiple OTU4
[transportpce.git] / renderer / src / test / java / org / opendaylight / transportpce / renderer / utils / ServiceDataUtils.java
1 /*
2  * Copyright © 2018 Orange Systems, 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.renderer.utils;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.List;
15 import java.util.Map;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInputBuilder;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.PathDescription;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.PathDescriptionBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.ServiceAEndBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.ServiceZEndBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.port.PortBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
29 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
30 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
32 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
34 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
35 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
36 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
37 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
38 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
39 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link;
41 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.LinkBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
43 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.NodeBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
45 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.Nodes;
50 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.NodesBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.NodesKey;
52 import org.opendaylight.yangtools.yang.common.Uint32;
53
54
55 public final class ServiceDataUtils {
56
57     private ServiceDataUtils() {
58
59     }
60
61     public static Nodes createNode(String nodeId, String srcTp, String dstTp) {
62         return new NodesBuilder().setNodeId(nodeId).withKey(new NodesKey(nodeId)).setSrcTp(srcTp)
63                 .setDestTp(dstTp).build();
64     }
65
66     public static ServicePathInput buildServicePathInputs(List<Nodes> nodes) {
67         ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder();
68         servicePathInputBuilder.setNodes(nodes);
69         servicePathInputBuilder.setServiceName("Service 1").setWaveNumber(Uint32.valueOf(20));
70         return servicePathInputBuilder.build();
71     }
72
73     public static ServicePathInput buildServicePathInputs() {
74         ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder();
75         List<Nodes> nodes = new ArrayList<>();
76         nodes.add(ServiceDataUtils.createNode("node1", "src", "dst"));
77         servicePathInputBuilder.setNodes(nodes);
78         servicePathInputBuilder.setServiceName("Service 1").setWaveNumber(Uint32.valueOf(20));
79         return servicePathInputBuilder.build();
80     }
81
82     public static RendererRollbackInput buildRendererRollbackInput() {
83         RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
84         rendererRollbackInputBuilder.setNodeInterface(Map.of());
85         return rendererRollbackInputBuilder.build();
86     }
87
88     public static ServiceImplementationRequestInput buildServiceImplementationRequestInputTerminationPointResource(
89         String tpId) {
90         ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder()
91             .setServiceName("service 1").setPathDescription(createPathDescriptionTerminationPointResource(tpId))
92             .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build())
93             .setServiceAEnd(getServiceAEndBuild(tpId).build())
94             .setServiceZEnd(getServiceZEndBuild(tpId).build())
95             .setConnectionType(ConnectionType.Service);
96         return builder.build();
97     }
98
99     /*public static ServiceImplementationRequestInput buildServiceImplementationRequestInputInvalidResource() {
100         ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder()
101             .setServiceName("service 1").setPathDescription(createPathDescriptionInvalidResource())
102             .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build())
103             .setServiceAEnd(getServiceAEndBuild().build())
104             .setServiceZEnd(getServiceZEndBuild().build());
105         return builder.build();
106     }
107
108     public static ServiceImplementationRequestInput buildServiceImplementationRequestInputLinkResource() {
109         ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder()
110             .setServiceName("service 1").setPathDescription(createPathDescriptionLinkResource())
111             .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build())
112             .setServiceAEnd(getServiceAEndBuild().build())
113             .setServiceZEnd(getServiceZEndBuild().build());
114         return builder.build();
115     }*/
116
117     private static PathDescription createPathDescriptionInvalidResource() {
118         Map<AToZKey,AToZ> atoZMap = new HashMap<>();
119         Node node = new NodeBuilder().setNodeId("XPONDER-1-2").build();
120         AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder()
121             .setResource(node).build()).build();
122         atoZMap.put(atoZ.key(),atoZ);
123         AToZDirection atozDirection = new AToZDirectionBuilder()
124             .setRate(Uint32.valueOf(20))
125             .setAToZWavelengthNumber(Uint32.valueOf(32))
126             .setAToZ(atoZMap)
127             .build();
128         Map<ZToAKey,ZToA> ztoAMap = new HashMap<>();
129         ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder()
130             .setResource(node).build()).build();
131         ztoAMap.put(ztoA.key(),ztoA);
132         ZToADirection ztoaDirection = new ZToADirectionBuilder()
133             .setRate(Uint32.valueOf(20))
134             .setZToAWavelengthNumber(Uint32.valueOf(20))
135             .setZToA(ztoAMap)
136             .build();
137         PathDescriptionBuilder builder = new PathDescriptionBuilder()
138             .setAToZDirection(atozDirection)
139             .setZToADirection(ztoaDirection);
140         return builder.build();
141     }
142
143     public static PathDescription createPathDescriptionTerminationPointResource(String tpId) {
144         Map<AToZKey,AToZ> atoZMap = new HashMap<>();
145         TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder();
146         List<String> nodeIds = Arrays.asList("XPONDER-1-2", "XPONDER-2-3");
147         Integer atozId = 1;
148         for (String nodeId : nodeIds) {
149             for (String otherNodeId : nodeIds) {
150                 TerminationPoint terminationPoint = terminationPointBuilder
151                     .setTpNodeId(nodeId + '-'
152                             + tpId)
153                         .setTpId(tpId).build();
154                 AToZ atoZ = new AToZBuilder().setId(atozId.toString())
155                     .withKey(new AToZKey(atozId.toString())).setResource(new ResourceBuilder()
156                         .setResource(terminationPoint).build()).build();
157                 atozId++;
158                 atoZMap.put(atoZ.key(),atoZ);
159             }
160         }
161         AToZDirection atozDirection = new AToZDirectionBuilder()
162             .setRate(Uint32.valueOf(20))
163             .setAToZWavelengthNumber(Uint32.valueOf(20))
164             .setAToZ(atoZMap)
165             .build();
166
167         Collections.reverse(nodeIds);
168         Map<ZToAKey,ZToA> ztoAMap = new HashMap<>();
169         Integer ztoaId = 1;
170         for (String nodeId : nodeIds) {
171             for (String otherNodeId : nodeIds) {
172                 TerminationPoint terminationPoint = terminationPointBuilder
173                     .setTpNodeId(nodeId + '-'
174                             + tpId)
175                         .setTpId(tpId).build();
176                 ZToA ztoA = new ZToABuilder().setId(ztoaId.toString())
177                     .withKey(new ZToAKey(ztoaId.toString())).setResource(new ResourceBuilder()
178                         .setResource(terminationPoint).build()).build();
179                 ztoaId++;
180                 ztoAMap.put(ztoA.key(),ztoA);
181             }
182         }
183         ZToADirection ztoaDirection = new ZToADirectionBuilder()
184             .setRate(Uint32.valueOf(20))
185             .setZToAWavelengthNumber(Uint32.valueOf(20))
186             .setZToA(ztoAMap)
187             .build();
188         PathDescriptionBuilder builder = new PathDescriptionBuilder()
189             .setAToZDirection(atozDirection)
190             .setZToADirection(ztoaDirection);
191         return builder.build();
192     }
193
194     private static PathDescription createPathDescriptionLinkResource() {
195         Map<AToZKey,AToZ> atoZMap = new HashMap<>();
196         Link link1 = new LinkBuilder().setLinkId("link 1").build();
197         Link link2 = new LinkBuilder().setLinkId("link 2").build();
198         AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder()
199             .setResource(link1).build()).build();
200         AToZ atoZ2 = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder()
201             .setResource(link2).build()).build();
202         atoZMap.put(atoZ.key(),atoZ);
203         atoZMap.put(atoZ2.key(),atoZ2);
204         AToZDirection atozDirection = new AToZDirectionBuilder()
205             .setRate(Uint32.valueOf(20))
206             .setAToZWavelengthNumber(Uint32.valueOf(20))
207             .setAToZ(atoZMap)
208             .build();
209         Map<ZToAKey,ZToA> ztoAMap = new HashMap<>();
210         ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder()
211             .setResource(link1).build()).build();
212         ZToA ztoA2 = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder()
213             .setResource(link2).build()).build();
214         ztoAMap.put(ztoA.key(),ztoA);
215         ztoAMap.put(ztoA2.key(),ztoA2);
216         ZToADirection ztoaDirection = new ZToADirectionBuilder()
217             .setRate(Uint32.valueOf(20))
218             .setZToAWavelengthNumber(Uint32.valueOf(20))
219             .setZToA(ztoAMap)
220             .build();
221         PathDescriptionBuilder builder = new PathDescriptionBuilder()
222             .setAToZDirection(atozDirection)
223             .setZToADirection(ztoaDirection);
224         return builder.build();
225     }
226
227     public static ServiceAEndBuilder getServiceAEndBuild(String tpId) {
228         return new ServiceAEndBuilder()
229             .setClli("clli").setServiceFormat(ServiceFormat.OC)
230             .setServiceRate(Uint32.valueOf(1)).setNodeId("XPONDER-1-2-"
231                     + tpId)
232             .setTxDirection(
233                 new TxDirectionBuilder()
234                     .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
235                         .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
236                         .setPortSubSlot("port subslot").setPortType("port type").build())
237                     .build())
238             .setRxDirection(
239                 new RxDirectionBuilder()
240                     .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
241                         .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
242                         .setPortSubSlot("port subslot").setPortType("port type").build())
243                     .build())
244             .setServiceRate(Uint32.valueOf(100))
245                 .setServiceFormat(ServiceFormat.Ethernet);
246     }
247
248     public static ServiceZEndBuilder getServiceZEndBuild(String tpId) {
249         return new ServiceZEndBuilder()
250             .setClli("clli").setServiceFormat(ServiceFormat.OC)
251             .setServiceRate(Uint32.valueOf(1)).setNodeId("XPONDER-2-3-"
252                     + tpId)
253             .setTxDirection(
254                 new TxDirectionBuilder()
255                     .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
256                         .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
257                         .setPortSubSlot("port subslot").setPortType("port type").build())
258                     .build())
259             .setRxDirection(
260                 new RxDirectionBuilder()
261                     .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
262                         .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
263                         .setPortSubSlot("port subslot").setPortType("port type").build())
264                     .build());
265     }
266
267 }