2 * Copyright © 2020 Orange, Inc. and others. All rights reserved.
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
9 package org.opendaylight.transportpce.pce;
11 import com.google.common.collect.ImmutableList;
12 import java.math.BigDecimal;
13 import java.util.ArrayList;
14 import java.util.List;
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;
68 public class PcePathDescriptionTests extends AbstractTest {
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;
81 link = createRoadmToRoadm("OpenROADM-3-2-DEG1",
83 "DEG1-TTP-TX", "DEG1-TTP-RX").build();
85 // Link link=genereateLinkBuilder();
87 NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
88 node = node1Builder.build();
90 PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
91 OpenroadmNodeType.SRG, new NodeId("OpenROADM-3-2-DEG1"), ServiceFormat.Ethernet,
93 PceOpticalNode pceOpticalNode2 = new PceOpticalNode(node,
94 OpenroadmNodeType.SRG, new NodeId("OpenROADM-3-1-DEG1"), ServiceFormat.Ethernet,
97 pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
98 pceLink.setClient("XPONDER-CLIENT");
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),
109 // TODO fix opposite link
110 @Test(expected = Exception.class)
111 public void buildDescriptionsTest() {
113 pcePathDescription.buildDescriptions();
114 Assert.assertEquals(pcePathDescription.getReturnStructure().getMessage(), "No path available by PCE");
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);
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))
136 LinkId linkId = new LinkId(String.format(LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp));
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);
144 Augmentation<Link> aug11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130
146 .setAdministrativeGroup(Long.valueOf(123))
147 .setAdministrativeState(State.InService)
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();
157 LinkBuilder linkBuilder = new LinkBuilder()
158 .setSource(ietfSrcLinkBldr.build())
159 .setDestination(ietfDestLinkBldr.build())
161 .addAugmentation(Link1.class, aug11)
162 .withKey(new LinkKey(linkId));
164 linkBuilder.addAugmentation(
165 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class,
166 link1Builder.build());
170 private static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) {
171 Link1Builder link1Builder = new Link1Builder()
173 .setLinkType(OpenroadmLinkType.ROADMTOROADM);
174 return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
178 private List<SupportingNode> geSupportingNodes() {
179 List<SupportingNode> supportingNodes1 = new ArrayList<>();
182 .add(new SupportingNodeBuilder()
183 .setNodeRef(new NodeId("node 1"))
184 .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
188 .add(new SupportingNodeBuilder()
189 .setNodeRef(new NodeId("node 2"))
190 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
192 return supportingNodes1;
195 private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1) {
199 TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder();
200 TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder();
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();
208 return new NodeBuilder()
209 .setNodeId(new NodeId("node 1"))
210 .withKey(new NodeKey(new NodeId("node 1")))
213 .setSupportingNode(supportingNodes1);
216 private Link genereateLinkBuilder() {
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))
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))
231 linkConcentationValues.add(linkConcatenation);
232 linkConcentationValues.add(linkConcatenation2);
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
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)
249 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
250 .setLinkConcatenation(linkConcentationValues)
251 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
252 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
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()
261 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
262 .attributes.amplified.link.section.element.section.element.SpanBuilder()
264 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130
266 .attributes.amplified.link.section.element.section.element.span
268 .setAdministrativeState(AdminStates.InService)
269 .setAutoSpanloss(true)
271 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
272 .setLinkConcatenation(linkConcentationValues)
273 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
274 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
278 .setSectionEltNumber(Integer.valueOf(1)).build();
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)
287 .setLinkLatency(Long.valueOf(123))
288 .setLinkLength(BigDecimal.valueOf(123))
289 .setOMSAttributes(new OMSAttributesBuilder()
290 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues)
292 .setOppositeLink(new LinkId("link 1"))
293 .setSpan(new SpanBuilder().build())
294 .setTEMetric(Long.valueOf(123)).build())
295 .setOperationalState(State.InService).build();
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())
302 new DestinationBuilder().setDestNode(new NodeId("OpenROADM-3-1-DEG1"))
303 .setDestTp("DEG1-TTP-RX").build())
304 .addAugmentation(Link1.class, aug11)