add PcePathDescription Test
[transportpce.git] / pce / src / test / java / org / opendaylight / transportpce / pce / PcePathDescriptionTests.java
1 /*
2  * Copyright © 2020 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
9 package org.opendaylight.transportpce.pce;
10
11 import com.google.common.collect.ImmutableList;
12 import java.math.BigDecimal;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.Map;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.transportpce.common.NetworkUtils;
20 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
21 import org.opendaylight.transportpce.common.network.RequestProcessor;
22 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
23 import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc;
24 import org.opendaylight.transportpce.pce.networkanalyzer.MapUtils;
25 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
26 import org.opendaylight.transportpce.pce.networkanalyzer.PceOpticalNode;
27 import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
28 import org.opendaylight.transportpce.pce.utils.PceTestData;
29 import org.opendaylight.transportpce.pce.utils.TransactionUtils;
30 import org.opendaylight.transportpce.test.AbstractTest;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.SpanBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
66 import org.opendaylight.yangtools.yang.binding.Augmentation;
67
68 public class PcePathDescriptionTests extends AbstractTest {
69
70     private PcePathDescription pcePathDescription;
71     private PceResult pceResult;
72     private static final String LINK_ID_FORMAT = "%1$s-%2$sto%3$s-%4$s";
73     private static final Long WAVE_LENGTH = 20L;
74     private PceLink pceLink = null;
75     private Link link = null;
76     private Node node = null;
77
78     @Before
79     public void setUp() {
80         // Build Link
81         link = createRoadmToRoadm("OpenROADM-3-2-DEG1",
82                 "OpenROADM-3-1-DEG1",
83                 "DEG1-TTP-TX", "DEG1-TTP-RX").build();
84
85         //  Link link=genereateLinkBuilder();
86
87         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
88         node = node1Builder.build();
89
90         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
91                 OpenroadmNodeType.SRG, new NodeId("OpenROADM-3-2-DEG1"), ServiceFormat.Ethernet,
92                 "DEGREE");
93         PceOpticalNode pceOpticalNode2 = new PceOpticalNode(node,
94                 OpenroadmNodeType.SRG, new NodeId("OpenROADM-3-1-DEG1"), ServiceFormat.Ethernet,
95                 "DEGREE");
96
97         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
98         pceLink.setClient("XPONDER-CLIENT");
99
100         pceResult = new PceResult();
101         pceResult.setRC("200");
102         pceResult.setRate(Long.valueOf(1));
103         Map<LinkId, PceLink> map = Map.of(new LinkId("OpenROADM-3-1-DEG1-to-OpenROADM-3-2-DEG1"), pceLink);
104         pcePathDescription = new PcePathDescription(List.of(pceLink),
105                 map, pceResult);
106
107     }
108
109     // TODO fix opposite link
110     @Test(expected = Exception.class)
111     public void buildDescriptionsTest() {
112
113         pcePathDescription.buildDescriptions();
114         Assert.assertEquals(pcePathDescription.getReturnStructure().getMessage(), "No path available by PCE");
115     }
116
117     @Test
118     public void mapUtil() {
119         PceConstraints pceConstraintsCalc = new PceConstraintsCalc(PceTestData
120                 .getPCERequest(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())))
121                 .getPceHardConstraints();
122         MapUtils.mapDiversityConstraints(List.of(node), List.of(link), pceConstraintsCalc);
123         MapUtils.getSupLink(link);
124         MapUtils.getAllSupNode(node);
125         MapUtils.getSRLGfromLink(link);
126     }
127
128     private static LinkBuilder createLinkBuilder(
129             String srcNode, String destNode, String srcTp, String destTp, Link1Builder link1Builder) {
130         SourceBuilder ietfSrcLinkBldr =
131                 new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp);
132         //create destination link
133         DestinationBuilder ietfDestLinkBldr =
134                 new DestinationBuilder().setDestNode(new NodeId(destNode))
135                         .setDestTp(destTp);
136         LinkId linkId = new LinkId(String.format(LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp));
137
138         LinkId oppositeLinkId = new LinkId("OpenROADM-3-2-DEG1-to-OpenROADM-3-1-DEG1");
139         //For setting up attributes for openRoadm augment
140         OMSAttributesBuilder omsAttributesBuilder =
141                 new OMSAttributesBuilder().setOppositeLink(oppositeLinkId);
142
143         // Augementation
144         Augmentation<Link> aug11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130
145                 .Link1Builder()
146                 .setAdministrativeGroup(Long.valueOf(123))
147                 .setAdministrativeState(State.InService)
148                 .setAmplified(true)
149                 .setLinkLatency(Long.valueOf(123))
150                 .setLinkLength(BigDecimal.valueOf(123))
151                 .setOMSAttributes(new OMSAttributesBuilder()
152                         .setOppositeLink(new LinkId("OpenROADM-3-2-DEG1-to-OpenROADM-3-1-DEG1"))
153                         .setSpan(new SpanBuilder().build())
154                         .setTEMetric(Long.valueOf(123)).build())
155                 .setOperationalState(State.InService).build();
156
157         LinkBuilder linkBuilder = new LinkBuilder()
158                 .setSource(ietfSrcLinkBldr.build())
159                 .setDestination(ietfDestLinkBldr.build())
160                 .setLinkId(linkId)
161                 .addAugmentation(Link1.class, aug11)
162                 .withKey(new LinkKey(linkId));
163
164         linkBuilder.addAugmentation(
165                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class,
166                 link1Builder.build());
167         return linkBuilder;
168     }
169
170     private static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) {
171         Link1Builder link1Builder = new Link1Builder()
172                 .setLinkLatency(30L)
173                 .setLinkType(OpenroadmLinkType.ROADMTOROADM);
174         return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
175
176     }
177
178     private List<SupportingNode> geSupportingNodes() {
179         List<SupportingNode> supportingNodes1 = new ArrayList<>();
180 //
181         supportingNodes1
182                 .add(new SupportingNodeBuilder()
183                         .setNodeRef(new NodeId("node 1"))
184                         .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
185                         .build());
186
187         supportingNodes1
188                 .add(new SupportingNodeBuilder()
189                         .setNodeRef(new NodeId("node 2"))
190                         .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
191                         .build());
192         return supportingNodes1;
193     }
194
195     private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1) {
196
197
198         //update tp of nodes
199         TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder();
200         TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder();
201
202         tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
203         xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
204         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 =
205                 new Node1Builder().setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())).build();
206
207
208         return new NodeBuilder()
209                 .setNodeId(new NodeId("node 1"))
210                 .withKey(new NodeKey(new NodeId("node 1")))
211                 .addAugmentation(
212                         Node1.class, node1)
213                 .setSupportingNode(supportingNodes1);
214     }
215
216     private Link genereateLinkBuilder() {
217
218         List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
219         LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
220                 .setFiberType(LinkConcatenation.FiberType.Truewave)
221                 .setPmd(new FiberPmd(BigDecimal.ONE))
222                 .setSRLGId(Long.valueOf(1))
223                 .setSRLGLength(Long.valueOf(1))
224                 .build();
225         LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
226                 .setFiberType(LinkConcatenation.FiberType.Truewave)
227                 .setPmd(new FiberPmd(BigDecimal.ONE))
228                 .setSRLGId(Long.valueOf(1))
229                 .setSRLGLength(Long.valueOf(1))
230                 .build();
231         linkConcentationValues.add(linkConcatenation);
232         linkConcentationValues.add(linkConcatenation2);
233
234         List<AmplifiedLink>
235                 amplifiedLinkValues = new ArrayList<>();
236         org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al =
237                 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
238                         .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
239                         .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130
240                                 .amplified.link.attributes.amplified.link.section.element.section.element
241                                 .SpanBuilder()
242                                 .setSpan(
243                                         new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified
244                                                 .link.attributes.amplified.link.section.element.section
245                                                 .element.span.SpanBuilder()
246                                                 .setAdministrativeState(AdminStates.InService)
247                                                 .setAutoSpanloss(true)
248                                                 .setClfi("clfi")
249                                                 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
250                                                 .setLinkConcatenation(linkConcentationValues)
251                                                 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
252                                                 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
253                                                 .build())
254                                 .build())
255                         .build())
256                         .setSectionEltNumber(Integer.valueOf(1)).build();
257         org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 =
258                 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
259                         .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
260                         .setSectionElement(
261                                 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
262                                         .attributes.amplified.link.section.element.section.element.SpanBuilder()
263                                         .setSpan(
264                                                 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130
265                                                         .amplified.link
266                                                         .attributes.amplified.link.section.element.section.element.span
267                                                         .SpanBuilder()
268                                                         .setAdministrativeState(AdminStates.InService)
269                                                         .setAutoSpanloss(true)
270                                                         .setClfi("clfi")
271                                                         .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
272                                                         .setLinkConcatenation(linkConcentationValues)
273                                                         .setSpanlossBase(new RatioDB(BigDecimal.ONE))
274                                                         .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
275                                                         .build())
276                                         .build())
277                         .build())
278                         .setSectionEltNumber(Integer.valueOf(1)).build();
279
280         amplifiedLinkValues.add(al);
281         amplifiedLinkValues.add(al2);
282         Augmentation<Link> aug11 =
283                 new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder()
284                         .setAdministrativeGroup(Long.valueOf(123))
285                         .setAdministrativeState(State.InService)
286                         .setAmplified(true)
287                         .setLinkLatency(Long.valueOf(123))
288                         .setLinkLength(BigDecimal.valueOf(123))
289                         .setOMSAttributes(new OMSAttributesBuilder()
290                                 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues)
291                                         .build())
292                                 .setOppositeLink(new LinkId("link 1"))
293                                 .setSpan(new SpanBuilder().build())
294                                 .setTEMetric(Long.valueOf(123)).build())
295                         .setOperationalState(State.InService).build();
296
297         TransactionUtils.getNetworkForSpanLoss();
298         return new LinkBuilder().setLinkId(new LinkId("OpenROADM-3-1-DEG1-to-OpenROADM-3-2-DEG1"))
299                 .setSource(new SourceBuilder().setSourceNode(new NodeId("OpenROADM-3-2-DEG1"))
300                         .setSourceTp("DEG1-TTP-TX").build())
301                 .setDestination(
302                         new DestinationBuilder().setDestNode(new NodeId("OpenROADM-3-1-DEG1"))
303                                 .setDestTp("DEG1-TTP-RX").build())
304                 .addAugmentation(Link1.class, aug11)
305                 .build();
306
307
308     }
309 }