initial olm unit testing commit
[transportpce.git] / olm / src / test / java / org / opendaylight / transportpce / olm / util / TransactionUtils.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
9 package org.opendaylight.transportpce.olm.util;
10
11 import java.math.BigDecimal;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Map;
16 import java.util.Optional;
17
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
20 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.Network;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.Nodes;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesKey;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegree;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegreeBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingKey;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.FiberPmd;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.RatioDB;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.State;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.amplified.link.SectionElementBuilder;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.span.attributes.LinkConcatenation;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.span.attributes.LinkConcatenationBuilder;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.OMSAttributesBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.oms.attributes.AmplifiedLinkBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.oms.attributes.SpanBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmLinkType;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1Builder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkBuilder;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.DestinationBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SourceBuilder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SupportingLink;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SupportingLinkBuilder;
54 import org.opendaylight.yangtools.yang.binding.Augmentation;
55 import org.opendaylight.yangtools.yang.binding.DataObject;
56 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
57
58 public final class TransactionUtils {
59
60     private TransactionUtils() {
61
62     }
63
64     public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
65         DataObject object) {
66         ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
67         transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object, true);
68         transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
69         return true;
70     }
71
72 //
73 //    public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
74 //        InstanceIdentifier instanceIdentifier,
75 //        DataObject object)
76
77 //    public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
78 //                                  String nodeId,
79 //                                  LogicalDatastoreType logicalDatastoreType,
80 //                                  InstanceIdentifier<? extends DataObject> instanceIdentifier)
81 //            throws ExecutionException, InterruptedException {
82 //        Future<Optional<DeviceTransaction>> deviceTxFuture =
83 //                deviceTransactionManager.getDeviceTransaction(nodeId);
84 //        if (!deviceTxFuture.get().isPresent()) {
85 //            return null;
86 //        }
87 //        DeviceTransaction deviceTx = deviceTxFuture.get().get();
88 //        com.google.common.base.Optional<? extends DataObject> readOpt
89 //                = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
90 //        if (!readOpt.isPresent()) {
91 //            return null;
92 //        }
93 //        return readOpt.get();
94 //    }
95
96     public static Network1 getNullNetwork() {
97         Network1 network = new Network1Builder().setLink(null).build();
98         Optional.of(network);
99         return network;
100     }
101
102     public static Network1 getEmptyNetwork() {
103         Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
104         Optional.of(network);
105         return network;
106     }
107
108     public static Network1 getNetwork() {
109         List<SupportingLink> supportingLinks = new ArrayList<>();
110         SupportingLink supportingLink1 = new SupportingLinkBuilder().setLinkRef("ref1")
111             .setNetworkRef(new NetworkId("net1")).build();
112         SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
113             .setNetworkRef(new NetworkId("net2")).build();
114         supportingLinks.add(supportingLink1);
115         supportingLinks.add(supportingLink2);
116         List<Link> links = new ArrayList<>();
117         Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
118             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
119                 .setDestTp("dest tp").build())
120             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
121                 .setSourceTp("src tp").build())
122             .setSupportingLink(supportingLinks).build();
123
124         Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
125             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
126                 .setDestTp("dest tp").build())
127             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
128                 .setSourceTp("src tp").build())
129             .setSupportingLink(supportingLinks).build();
130         links.add(link1);
131         links.add(link2);
132         Network1 network = new Network1Builder().setLink(links).build();
133         Optional.of(network);
134         return network;
135     }
136
137     public static Network1 getNetwork2() {
138         List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
139         LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
140             .setFiberType(LinkConcatenation.FiberType.Truewave)
141             .setPmd(new FiberPmd(BigDecimal.ONE))
142             .setSRLGId(Long.valueOf(1))
143             .setSRLGLength(Long.valueOf(1))
144             .build();
145         LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
146             .setFiberType(LinkConcatenation.FiberType.Truewave)
147             .setPmd(new FiberPmd(BigDecimal.ONE))
148             .setSRLGId(Long.valueOf(1))
149             .setSRLGLength(Long.valueOf(1))
150             .build();
151         linkConcentationValues.add(linkConcatenation);
152         linkConcentationValues.add(linkConcatenation2);
153         List<org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink>
154             amplifiedLinkValues = new ArrayList<>();
155         org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink al = new
156             org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes
157                 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
158                 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
159                     .attributes.amplified.link.section.element.section.element.SpanBuilder()
160                         .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
161                                 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
162                                     .setAdministrativeState(State.InService)
163                                     .setAutoSpanloss(true)
164                                     .setClfi("clfi")
165                                     .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
166                                     .setLinkConcatenation(linkConcentationValues)
167                                     .setSpanlossBase(new RatioDB(BigDecimal.ONE))
168                                     .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
169                                     .build())
170                     .build())
171                 .build())
172             .setSectionEltNumber(Integer.valueOf(1)).build();
173         org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink al2 = new
174             org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes
175                 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
176                 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
177                      .attributes.amplified.link.section.element.section.element.SpanBuilder()
178                         .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
179                                 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
180                                     .setAdministrativeState(State.InService)
181                                     .setAutoSpanloss(true)
182                                     .setClfi("clfi")
183                                     .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
184                                     .setLinkConcatenation(linkConcentationValues)
185                                     .setSpanlossBase(new RatioDB(BigDecimal.ONE))
186                                     .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
187                                     .build())
188                                     .build())
189             .build())
190             .setSectionEltNumber(Integer.valueOf(1)).build();
191         amplifiedLinkValues.add(al);
192         amplifiedLinkValues.add(al2);
193         Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
194         Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
195             .setAdministrativeState(State.InService)
196             .setAmplified(true)
197             .setLinkLatency(Long.valueOf(123))
198             .setLinkLength(BigDecimal.valueOf(123))
199             .setLinkType(OpenroadmLinkType.ROADMTOROADM)
200             .setOMSAttributes(new OMSAttributesBuilder()
201                 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
202                 .setOppositeLink(new LinkId("link 1"))
203                 .setSpan(new SpanBuilder().build())
204                 .setTEMetric(Long.valueOf(123)).build())
205             .setOperationalState(State.InService).build();
206         Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
207             .setAdministrativeState(State.InService)
208             .setAmplified(true)
209             .setLinkLatency(Long.valueOf(123))
210             .setLinkLength(BigDecimal.valueOf(123))
211             .setLinkType(OpenroadmLinkType.ROADMTOROADM)
212             .setOMSAttributes(new OMSAttributesBuilder()
213                 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
214                 .setOppositeLink(new LinkId("link 1"))
215                 .setSpan(new SpanBuilder().build())
216                 .setTEMetric(Long.valueOf(123)).build())
217             .setOperationalState(State.InService).build();
218
219         List<SupportingLink> supportingLinks = new ArrayList<>();
220         SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
221             .setNetworkRef(new NetworkId("net1")).build();
222         SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
223             .setNetworkRef(new NetworkId("net1")).build();
224         supportingLinks.add(supportingLink);
225         supportingLinks.add(supportingLink2);
226         List<Link> links = new ArrayList<>();
227         Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
228             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
229                 .setDestTp("dest tp").build())
230             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
231                 .setSourceTp("src tp").build())
232             .setSupportingLink(supportingLinks)
233             .addAugmentation(Link1.class, aug1)
234             .addAugmentation(Link1.class, aug2).build();
235
236         Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
237             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
238                 .setDestTp("dest tp").build())
239             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
240                 .setSourceTp("src tp").build())
241             .setSupportingLink(supportingLinks).build();
242         links.add(link1);
243         links.add(link2);
244         Network1 network = new Network1Builder().setLink(links).build();
245         Optional.of(network);
246         return network;
247     }
248
249     public static List<NodeId> getNodeIds() {
250         List<NodeId> nodes = new ArrayList<>();
251         NodeId node = new NodeId("node 1");
252         NodeId node2 = new NodeId("node 1");
253         NodeId node3 = new NodeId("node 1");
254         NodeId node4 = new NodeId("node 1");
255         nodes.add(node);
256         nodes.add(node2);
257         nodes.add(node3);
258         nodes.add(node4);
259         return nodes;
260     }
261
262     public static Nodes getNodes(String nodeId, String mappingKey) {
263         List<CpToDegree> cpList = new ArrayList<>();
264         CpToDegree cp1 = new CpToDegreeBuilder()
265             .setCircuitPackName("circuit name")
266             .setDegreeNumber(Long.valueOf(123))
267             .build();
268         CpToDegree cp2 = new CpToDegreeBuilder()
269             .setCircuitPackName("circuit name")
270             .setDegreeNumber(Long.valueOf(123))
271             .build();
272         cpList.add(cp1);
273         cpList.add(cp2);
274         List<Mapping> mappingList = new ArrayList<>();
275         Mapping map1 = new MappingBuilder()
276             .setLogicalConnectionPoint("point")
277             .setSupportingCircuitPackName("circuit name")
278             .setSupportingOms("oms")
279             .setSupportingOts("ots")
280             .setSupportingPort("port")
281             .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
282             .build();
283         mappingList.add(map1);
284         Nodes nodes = new NodesBuilder()
285             .setNodeId(nodeId)
286             .setNodeType(NodeTypes.Xpdr)
287             .setCpToDegree(cpList)
288             .setMapping(mappingList)
289             .build();
290         return nodes;
291     }
292
293     public static Nodes getNodes2(String nodeId, String mappingKey) {
294         List<CpToDegree> cpList = new ArrayList<>();
295         CpToDegree cp1 = new CpToDegreeBuilder()
296             .setCircuitPackName("circuit name")
297             .setDegreeNumber(Long.valueOf(123))
298             .build();
299         CpToDegree cp2 = new CpToDegreeBuilder()
300             .setCircuitPackName("circuit name")
301             .setDegreeNumber(Long.valueOf(123))
302             .build();
303         cpList.add(cp1);
304         cpList.add(cp2);
305         List<Mapping> mappingList = new ArrayList<>();
306         Mapping map1 = new MappingBuilder()
307             .setLogicalConnectionPoint("point")
308             .setSupportingCircuitPackName("circuit name")
309             .setSupportingOms("oms")
310             .setSupportingOts("ots")
311             .setSupportingPort("port")
312             .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
313             .build();
314         mappingList.add(map1);
315         Nodes nodes = new NodesBuilder()
316             .setNodeId(nodeId)
317             .setNodeType(null)
318             .setCpToDegree(cpList)
319             .setMapping(mappingList)
320             .build();
321         return nodes;
322     }
323
324     public static Nodes getNodes3(String nodeId, String mappingKey) {
325         List<CpToDegree> cpList = new ArrayList<>();
326         CpToDegree cp1 = new CpToDegreeBuilder()
327             .setCircuitPackName("circuit name")
328             .setDegreeNumber(Long.valueOf(123))
329             .build();
330         CpToDegree cp2 = new CpToDegreeBuilder()
331             .setCircuitPackName("circuit name")
332             .setDegreeNumber(Long.valueOf(123))
333             .build();
334         cpList.add(cp1);
335         cpList.add(cp2);
336         List<Mapping> mappingList = new ArrayList<>();
337         Mapping map1 = new MappingBuilder()
338             .setLogicalConnectionPoint("point")
339             .setSupportingCircuitPackName("circuit name")
340             .setSupportingOms("oms")
341             .setSupportingOts("ots")
342             .setSupportingPort("port")
343             .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
344             .build();
345         mappingList.add(map1);
346         Nodes nodes = new NodesBuilder()
347             .setNodeId(nodeId)
348             .setNodeType(NodeTypes.Rdm)
349             .setCpToDegree(cpList)
350             .setMapping(mappingList)
351             .build();
352         return nodes;
353     }
354
355     public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
356         InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
357             .child(Nodes.class, new NodesKey(nodeId));
358         Nodes nodes = getNodes(nodeId, mappingKey);
359         writeTransaction(dataBroker, nodesIID, nodes);
360     }
361
362     public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
363         InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
364             .child(Nodes.class, new NodesKey(nodeId));
365         Nodes nodes = getNodes2(nodeId, mappingKey);
366         writeTransaction(dataBroker, nodesIID, nodes);
367     }
368
369     public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
370         InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
371             .child(Nodes.class, new NodesKey(nodeId));
372         Nodes nodes = getNodes3(nodeId, mappingKey);
373         writeTransaction(dataBroker, nodesIID, nodes);
374     }
375
376 }