From fe91cf1009219e342adbe463e31346935ef4bb31 Mon Sep 17 00:00:00 2001 From: manuedelf Date: Fri, 11 Dec 2020 16:21:45 +0100 Subject: [PATCH] Network model add enable wavelength unit test - Enable and fix NetworkModelWavelengthServiceTest. - Remove no more used PathDescriptionUtils test class - Add a stub yang model for path-description in test-common to define path description as a container and use it to parse path_description.json test file. Using a json file avoid to have big test classes to instantiate yang object. JIRA: TRNSPRTPCE-230 Signed-off-by: manuedelf Change-Id: If843edb8116cb7ac60cffa3cd25544e9a251c88a --- .../NetworkModelWavelengthServiceTest.java | 133 +++++- .../util/test/PathDescriptionUtils.java | 115 ----- .../src/test/resources/path_description.json | 442 +++++++++--------- .../path-description-stub@2020-12-11.yang | 24 + 4 files changed, 364 insertions(+), 350 deletions(-) delete mode 100644 networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/PathDescriptionUtils.java create mode 100644 test-common/src/main/yang/path-description-stub@2020-12-11.yang diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelWavelengthServiceTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelWavelengthServiceTest.java index c861e9384..6b836ed7b 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelWavelengthServiceTest.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelWavelengthServiceTest.java @@ -8,6 +8,8 @@ package org.opendaylight.transportpce.networkmodel.service; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.io.FileNotFoundException; @@ -15,44 +17,147 @@ import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.nio.charset.StandardCharsets; +import java.util.BitSet; +import java.util.Optional; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; +import org.opendaylight.mdsal.binding.api.ReadTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.Timeouts; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.transportpce.test.converter.DataObjectConverter; import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter; import org.opendaylight.transportpce.test.utils.TopologyDataUtils; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.service.path.rpc.result.PathDescription; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsKey; +import org.opendaylight.yang.gen.v1.pathdescription.stub.rev201211.PathDescription; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Ignore -//FIXME: disabled because some updates are needed on test-common public class NetworkModelWavelengthServiceTest extends AbstractTest { private static final Logger LOG = LoggerFactory.getLogger(NetworkModelWavelengthServiceTest.class); private static final String OPENROADM_TOPOLOGY_FILE = "src/test/resources/openroadm-topology.xml"; private static final String PATH_DESCRIPTION_FILE = "src/test/resources/path_description.json"; - private static DataObjectConverter dataObjectConverter; + private static PathDescription pathDescription; + private final AvailFreqMapsKey availFreqMapKey = new AvailFreqMapsKey(GridConstant.C_BAND); + private final BitSet usedBits = new BitSet(8); + private static BitSet availableBits = new BitSet(8); @BeforeClass public static void setUp() throws InterruptedException, ExecutionException, FileNotFoundException { + availableBits.set(0, 8, true); TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(), OPENROADM_TOPOLOGY_FILE, InstanceIdentifiers.OVERLAY_NETWORK_II); - dataObjectConverter = JSONDataObjectConverter.createWithDataStoreUtil(getDataStoreContextUtil()); - } - - @Test - public void allocateFrequenciesTest() throws IOException { + DataObjectConverter dataObjectConverter = JSONDataObjectConverter + .createWithDataStoreUtil(getDataStoreContextUtil()); try (Reader reader = new FileReader(PATH_DESCRIPTION_FILE, StandardCharsets.UTF_8)) { - PathDescription pathDescription = (PathDescription) dataObjectConverter.transformIntoNormalizedNode(reader) - .get().getValue(); - NetworkModelWavelengthService service = new NetworkModelWavelengthServiceImpl(getDataBroker()); - service.allocateFrequencies(pathDescription.getAToZDirection(), pathDescription.getZToADirection()); + NormalizedNode normalizedNode = dataObjectConverter + .transformIntoNormalizedNode(reader).get(); + pathDescription = (PathDescription) getDataStoreContextUtil() + .getBindingDOMCodecServices().fromNormalizedNode(YangInstanceIdentifier + .of(PathDescription.QNAME), normalizedNode).getValue(); } catch (IOException e) { LOG.error("Cannot load path description ", e); fail("Cannot load path description "); } } + + @Test + public void allocateFrequenciesTest() throws IOException { + NetworkModelWavelengthService service = new NetworkModelWavelengthServiceImpl(getDataBroker()); + service.allocateFrequencies(pathDescription.getAToZDirection(), pathDescription.getZToADirection()); + TerminationPoint1 terminationPoint = getNetworkTerminationPointFromDatastore("ROADM-A1-DEG2", "DEG2-CTP-TXRX"); + assertEquals("Lambda 1 should not be available for ctp-attributes", + BitSet.valueOf(terminationPoint.getCtpAttributes().getAvailFreqMaps().get(availFreqMapKey) + .getFreqMap()).get(760, 768),usedBits); + assertNull("cp-attributes should be null", terminationPoint.getCpAttributes()); + terminationPoint = getNetworkTerminationPointFromDatastore("ROADM-A1-SRG1", "SRG1-PP1-TXRX"); + assertEquals("Lambda 1 should not be available for pp-attributes", + BitSet.valueOf(terminationPoint.getPpAttributes().getAvailFreqMaps().get(availFreqMapKey) + .getFreqMap()).get(760, 768),usedBits); + Node1 node = getNetworkNodeFromDatastore("ROADM-A1-SRG1"); + assertEquals("Lambda 1 should not be available for srg-attributes", + BitSet.valueOf(node.getSrgAttributes().getAvailFreqMaps().get(availFreqMapKey) + .getFreqMap()).get(760, 768),usedBits); + } + + @Test + public void releaseFrequenciesTest() throws IOException { + NetworkModelWavelengthService service = new NetworkModelWavelengthServiceImpl(getDataBroker()); + service.allocateFrequencies(pathDescription.getAToZDirection(), pathDescription.getZToADirection()); + service.releaseFrequencies(pathDescription.getAToZDirection(), pathDescription.getZToADirection()); + TerminationPoint1 terminationPoint = getNetworkTerminationPointFromDatastore("ROADM-A1-DEG2", "DEG2-CTP-TXRX"); + assertEquals("Lambda 1 should be available for ctp-attributes", + BitSet.valueOf(terminationPoint.getCtpAttributes().getAvailFreqMaps().get(availFreqMapKey) + .getFreqMap()).get(760, 768),availableBits); + terminationPoint = getNetworkTerminationPointFromDatastore("ROADM-A1-SRG1", "SRG1-PP1-TXRX"); + assertEquals("Lambda 1 should be available for pp-attributes", + BitSet.valueOf(terminationPoint.getPpAttributes().getAvailFreqMaps().get(availFreqMapKey) + .getFreqMap()).get(760, 768),availableBits); + Node1 node = getNetworkNodeFromDatastore("ROADM-A1-SRG1"); + assertEquals("Lambda 1 should be available for srg-attributes", + BitSet.valueOf(node.getSrgAttributes().getAvailFreqMaps().get(availFreqMapKey) + .getFreqMap()).get(760, 768),availableBits); + } + + private TerminationPoint1 getNetworkTerminationPointFromDatastore(String nodeId, String tpId) { + InstanceIdentifier tpIID = OpenRoadmTopology + .createNetworkTerminationPointIIDBuilder(nodeId, tpId).build(); + try (ReadTransaction readTx = getDataBroker().newReadOnlyTransaction()) { + Optional optionalTerminationPoint = readTx + .read(LogicalDatastoreType.CONFIGURATION, tpIID) + .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS); + if (optionalTerminationPoint.isPresent()) { + return optionalTerminationPoint.get(); + } else { + return null; + } + } catch (ExecutionException | TimeoutException e) { + LOG.warn("Exception while getting termination {} for node id {} point from {} topology", tpId, nodeId, + NetworkUtils.OVERLAY_NETWORK_ID, e); + return null; + } catch (InterruptedException e) { + LOG.warn("Getting termination {} for node id {} point from {} topology was interrupted", tpId, nodeId, + NetworkUtils.OVERLAY_NETWORK_ID, e); + Thread.currentThread().interrupt(); + return null; + } + } + + private Node1 getNetworkNodeFromDatastore(String nodeId) { + InstanceIdentifier nodeIID = OpenRoadmTopology.createNetworkNodeIID(nodeId); + try (ReadTransaction nodeReadTx = getDataBroker().newReadOnlyTransaction()) { + Optional optionalNode = nodeReadTx.read(LogicalDatastoreType.CONFIGURATION, nodeIID) + .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS); + if (optionalNode.isPresent()) { + return optionalNode.get(); + } else { + LOG.error("Unable to get network node for node id {}from topology {}", nodeId, + NetworkUtils.OVERLAY_NETWORK_ID); + return null; + } + } catch (ExecutionException | TimeoutException e) { + LOG.warn("Exception while getting network node for node id {} from {} topology", nodeId, + NetworkUtils.OVERLAY_NETWORK_ID, e); + return null; + } catch (InterruptedException e) { + LOG.warn("Getting network node for node id {} from {} topology was interrupted", nodeId, + NetworkUtils.OVERLAY_NETWORK_ID, e); + Thread.currentThread().interrupt(); + return null; + } + } + } diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/PathDescriptionUtils.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/PathDescriptionUtils.java deleted file mode 100644 index 615fe2e8d..000000000 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/PathDescriptionUtils.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2018 Orange Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.transportpce.networkmodel.util.test; - -import java.util.HashMap; -import java.util.Map; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.port.PortBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.AToZDirection; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.AToZDirectionBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ZToADirection; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ZToADirectionBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.atoz.direction.AToZ; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.atoz.direction.AToZBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.atoz.direction.AToZKey; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ztoa.direction.ZToA; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ztoa.direction.ZToABuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ztoa.direction.ZToAKey; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.pce.resource.ResourceBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.pce.resource.resource.resource.TerminationPoint; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.pce.resource.resource.resource.TerminationPointBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.path.PathDescription; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.path.PathDescriptionBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.path.ServiceAEndBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.path.ServiceZEndBuilder; -import org.opendaylight.yangtools.yang.common.Uint32; - -public final class PathDescriptionUtils { - - private PathDescriptionUtils() { - - } - - public static PathDescription createTransactionPathDescription(String tpId) { - Map atoZMap = new HashMap<>(); - TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(); - TerminationPoint terminationPoint = terminationPointBuilder.setTpNodeId("node2" + tpId) - .setTpId(tpId).build(); - TerminationPoint terminationPoint2 = terminationPointBuilder.setTpNodeId("node1" + tpId) - .setTpId(tpId).build(); - AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder() - .setResource(terminationPoint).build()).build(); - AToZ atoZ2 = new AToZBuilder().setId("2").withKey(new AToZKey("2")).setResource(new ResourceBuilder() - .setResource(terminationPoint2).build()).build(); - atoZMap.put(atoZ.key(),atoZ); - atoZMap.put(atoZ2.key(),atoZ2); - AToZDirection atozDirection = new AToZDirectionBuilder() - .setRate(Uint32.valueOf(20)) - .setAToZWavelengthNumber(Uint32.valueOf(20)) - .setAToZ(atoZMap) - .setModulationFormat("OC") - .build(); - Map ztoAMap = new HashMap<>(); - ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder() - .setResource(terminationPoint).build()).build(); - ZToA ztoA2 = new ZToABuilder().setId("2").withKey(new ZToAKey("2")).setResource(new ResourceBuilder() - .setResource(terminationPoint).build()).build(); - ztoAMap.put(ztoA.key(),ztoA); - ztoAMap.put(ztoA2.key(),ztoA2); - ZToADirection ztoaDirection = new ZToADirectionBuilder() - .setRate(Uint32.valueOf(20)) - .setZToAWavelengthNumber(Uint32.valueOf(20)) - .setZToA(ztoAMap) - .setModulationFormat("OC") - .build(); - PathDescriptionBuilder pathDescriptionBuilder = new PathDescriptionBuilder(); - pathDescriptionBuilder.setAToZDirection(atozDirection); - pathDescriptionBuilder.setZToADirection(ztoaDirection); - return pathDescriptionBuilder.build(); - } - - public static ServiceAEndBuilder getServiceAEndBuild() { - return new ServiceAEndBuilder() - .setClli("clli").setServiceFormat(ServiceFormat.OC) - .setServiceRate(Uint32.valueOf(1)).setNodeId("XPONDER-1-2") - .setTxDirection( - new TxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name") - .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot") - .setPortSubSlot("port subslot").setPortType("port type").build()) - .build()) - .setRxDirection( - new RxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name") - .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot") - .setPortSubSlot("port subslot").setPortType("port type").build()) - .build()); - } - - public static ServiceZEndBuilder getServiceZEndBuild() { - return new ServiceZEndBuilder() - .setClli("clli").setServiceFormat(ServiceFormat.OC) - .setServiceRate(Uint32.valueOf(1)).setNodeId("XPONDER-2-3") - .setTxDirection( - new TxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name") - .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot") - .setPortSubSlot("port subslot").setPortType("port type").build()) - .build()) - .setRxDirection( - new RxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name") - .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot") - .setPortSubSlot("port subslot").setPortType("port type").build()) - .build()); - } -} diff --git a/networkmodel/src/test/resources/path_description.json b/networkmodel/src/test/resources/path_description.json index 816f6fa58..5b9ff1ba2 100644 --- a/networkmodel/src/test/resources/path_description.json +++ b/networkmodel/src/test/resources/path_description.json @@ -1,225 +1,225 @@ { - "transportpce-pathDescription:path-description": { - "zToA-direction": { - "rate": 100, - "zToA": [ - { - "id": "0", - "resource": { - "tp-node-id": "ROADM-C1-SRG1", - "tp-id": "SRG1-PP1-TXRX" - } - }, - { - "id": "1", - "resource": { - "node-id": "ROADM-C1-SRG1" - } - }, - { - "id": "2", - "resource": { - "tp-node-id": "ROADM-C1-SRG1", - "tp-id": "SRG1-CP-TXRX" - } - }, - { - "id": "3", - "resource": { - "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX" - } - }, - { - "id": "4", - "resource": { - "tp-node-id": "ROADM-C1-DEG1", - "tp-id": "DEG1-CTP-TXRX" - } - }, - { - "id": "5", - "resource": { - "node-id": "ROADM-C1-DEG1" - } - }, - { - "id": "6", - "resource": { - "tp-node-id": "ROADM-C1-DEG1", - "tp-id": "DEG1-TTP-TXRX" - } - }, - { - "id": "7", - "resource": { - "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX" - } - }, - { - "id": "8", - "resource": { - "tp-node-id": "ROADM-A1-DEG2", - "tp-id": "DEG2-TTP-TXRX" - } - }, - { - "id": "9", - "resource": { - "node-id": "ROADM-A1-DEG2" - } - }, - { - "id": "10", - "resource": { - "tp-node-id": "ROADM-A1-DEG2", - "tp-id": "DEG2-CTP-TXRX" - } - }, - { - "id": "11", - "resource": { - "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX" - } - }, - { - "id": "12", - "resource": { - "tp-node-id": "ROADM-A1-SRG1", - "tp-id": "SRG1-CP-TXRX" - } - }, - { - "id": "13", - "resource": { - "node-id": "ROADM-A1-SRG1" - } - }, - { - "id": "14", - "resource": { - "tp-node-id": "ROADM-A1-SRG1", - "tp-id": "SRG1-PP1-TXRX" - } - } - ], - "zToA-wavelength-number": 3, - "zToA-min-frequency": 195.975, - "zToA-max-frequency": 196.02499999999998, - "modulation-format": "dp-qpsk" + "pathdescription-stub:path-description": { + "zToA-direction": { + "rate": 100, + "zToA": [ + { + "id": "0", + "resource": { + "tp-node-id": "ROADM-C1-SRG1", + "tp-id": "SRG1-PP1-TXRX" + } }, - "aToZ-direction": { - "aToZ": [ - { - "id": "0", - "resource": { - "tp-node-id": "ROADM-A1-SRG1", - "tp-id": "SRG1-PP1-RX" - } - }, - { - "id": "1", - "resource": { - "node-id": "ROADM-A1-SRG1" - } - }, - { - "id": "2", - "resource": { - "tp-node-id": "ROADM-A1-SRG1", - "tp-id": "SRG1-CP-TX" - } - }, - { - "id": "14", - "resource": { - "tp-node-id": "OpenROADM-2-2-SRG1", - "tp-id": "SRG1-PP1-TX" - } - }, - { - "id": "10", - "resource": { - "tp-node-id": "ROADM-C1-DEG1", - "tp-id": "DEG1-CTP-TXRX" - } - }, - { - "id": "11", - "resource": { - "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX" - } - }, - { - "id": "12", - "resource": { - "tp-node-id": "ROADM-C1-SRG1", - "tp-id": "SRG1-CP-TXRX" - } - }, - { - "id": "13", - "resource": { - "node-id": "ROADM-C1-SRG1" - } - }, - { - "id": "14", - "resource": { - "tp-node-id": "ROADM-C1-SRG1", - "tp-id": "SRG1-PP1-TXRX" - } - }, - { - "id": "3", - "resource": { - "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX" - } - }, - { - "id": "4", - "resource": { - "tp-node-id": "ROADM-A1-DEG2", - "tp-id": "DEG2-CTP-TXRX" - } - }, - { - "id": "5", - "resource": { - "node-id": "ROADM-A1-DEG2" - } - }, - { - "id": "6", - "resource": { - "tp-node-id": "ROADM-A1-DEG2", - "tp-id": "DEG2-TTP-TXRX" - } - }, - { - "id": "7", - "resource": { - "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX" - } - }, - { - "id": "8", - "resource": { - "tp-node-id": "ROADM-C1-DEG1", - "tp-id": "DEG1-TTP-TXRX" - } - }, - { - "id": "9", - "resource": { - "node-id": "ROADM-C1-DEG1" - } - } - ], - "aToZ-min-frequency": 195.075, - "aToZ-max-frequency": 196.125, - "rate": 100, - "aToZ-wavelength-number": 1, - "modulation-format": "dp-qpsk" + { + "id": "1", + "resource": { + "node-id": "ROADM-C1-SRG1" + } + }, + { + "id": "2", + "resource": { + "tp-node-id": "ROADM-C1-SRG1", + "tp-id": "SRG1-CP-TXRX" + } + }, + { + "id": "3", + "resource": { + "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX" + } + }, + { + "id": "4", + "resource": { + "tp-node-id": "ROADM-C1-DEG1", + "tp-id": "DEG1-CTP-TXRX" + } + }, + { + "id": "5", + "resource": { + "node-id": "ROADM-C1-DEG1" + } + }, + { + "id": "6", + "resource": { + "tp-node-id": "ROADM-C1-DEG1", + "tp-id": "DEG1-TTP-TXRX" + } + }, + { + "id": "7", + "resource": { + "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX" + } + }, + { + "id": "8", + "resource": { + "tp-node-id": "ROADM-A1-DEG2", + "tp-id": "DEG2-TTP-TXRX" + } + }, + { + "id": "9", + "resource": { + "node-id": "ROADM-A1-DEG2" + } + }, + { + "id": "10", + "resource": { + "tp-node-id": "ROADM-A1-DEG2", + "tp-id": "DEG2-CTP-TXRX" + } + }, + { + "id": "11", + "resource": { + "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX" + } + }, + { + "id": "12", + "resource": { + "tp-node-id": "ROADM-A1-SRG1", + "tp-id": "SRG1-CP-TXRX" + } + }, + { + "id": "13", + "resource": { + "node-id": "ROADM-A1-SRG1" + } + }, + { + "id": "14", + "resource": { + "tp-node-id": "ROADM-A1-SRG1", + "tp-id": "SRG1-PP1-TXRX" + } } + ], + "zToA-wavelength-number": 1, + "zToA-min-frequency": 196.075, + "zToA-max-frequency": 196.125, + "modulation-format": "dp-qpsk" + }, + "aToZ-direction": { + "aToZ": [ + { + "id": "0", + "resource": { + "tp-node-id": "ROADM-A1-SRG1", + "tp-id": "SRG1-PP1-TXRX" + } + }, + { + "id": "1", + "resource": { + "node-id": "ROADM-A1-SRG1" + } + }, + { + "id": "2", + "resource": { + "tp-node-id": "ROADM-A1-SRG1", + "tp-id": "SRG1-CP-TXRX" + } + }, + { + "id": "14", + "resource": { + "tp-node-id": "OpenROADM-2-2-SRG1", + "tp-id": "SRG1-PP1-TX" + } + }, + { + "id": "10", + "resource": { + "tp-node-id": "ROADM-C1-DEG1", + "tp-id": "DEG1-CTP-TXRX" + } + }, + { + "id": "11", + "resource": { + "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX" + } + }, + { + "id": "12", + "resource": { + "tp-node-id": "ROADM-C1-SRG1", + "tp-id": "SRG1-CP-TXRX" + } + }, + { + "id": "13", + "resource": { + "node-id": "ROADM-C1-SRG1" + } + }, + { + "id": "14", + "resource": { + "tp-node-id": "ROADM-C1-SRG1", + "tp-id": "SRG1-PP1-TXRX" + } + }, + { + "id": "3", + "resource": { + "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX" + } + }, + { + "id": "4", + "resource": { + "tp-node-id": "ROADM-A1-DEG2", + "tp-id": "DEG2-CTP-TXRX" + } + }, + { + "id": "5", + "resource": { + "node-id": "ROADM-A1-DEG2" + } + }, + { + "id": "6", + "resource": { + "tp-node-id": "ROADM-A1-DEG2", + "tp-id": "DEG2-TTP-TXRX" + } + }, + { + "id": "7", + "resource": { + "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX" + } + }, + { + "id": "8", + "resource": { + "tp-node-id": "ROADM-C1-DEG1", + "tp-id": "DEG1-TTP-TXRX" + } + }, + { + "id": "9", + "resource": { + "node-id": "ROADM-C1-DEG1" + } + } + ], + "aToZ-min-frequency": 196.075, + "aToZ-max-frequency": 196.125, + "rate": 100, + "aToZ-wavelength-number": 1, + "modulation-format": "dp-qpsk" } - } + } +} \ No newline at end of file diff --git a/test-common/src/main/yang/path-description-stub@2020-12-11.yang b/test-common/src/main/yang/path-description-stub@2020-12-11.yang new file mode 100644 index 000000000..60cad83b4 --- /dev/null +++ b/test-common/src/main/yang/path-description-stub@2020-12-11.yang @@ -0,0 +1,24 @@ +module pathdescription-stub { + yang-version 1; + namespace "pathdescription-stub"; + prefix pathdescription-stub; + + import transportpce-pathDescription { + prefix transportpce-pathDescription; + revision-date 2020-11-26; + } + + description + "YANG model for providing path-description through data container for testing purpose"; + + revision 2020-12-11 { + description + "first version"; + reference + "YANG model for providing path-description through data container for testing purpose"; + } + + container path-description { + uses transportpce-pathDescription:path-description; + } +} -- 2.36.6