From d609ca3b1012e9d52ff6cd1ed9376425d22e6246 Mon Sep 17 00:00:00 2001 From: "doha.khaled" Date: Wed, 1 Aug 2018 13:50:13 +0200 Subject: [PATCH] Update unit testing - Renderer JIRA: TRNSPRTPCE-11 Change-Id: I42f760cdd39ed0a7585965a506ba05070b370529 Signed-off-by: doha.khaled --- deploy-site.iml | 6 - .../OpenRoadmInterfaceFactory.java | 16 +- .../DeviceRendererServiceImpl.java | 16 +- .../renderer/rpcs/DeviceRendererRPCImpl.java | 4 +- ...NetworkModelWaveLengthServiceFreeTest.java | 258 +++++++++++++++ .../NetworkModelWaveLengthServiceUseTest.java | 246 ++++++++++++++ .../transportpce/renderer/NodeIdPairTest.java | 57 ++++ .../DeviceRendererServiceImplDeleteTest.java | 218 ++++++++++++ ...DeviceRendererServiceImplRollbackTest.java | 193 +++++++++++ ...> DeviceRendererServiceImplSetupTest.java} | 148 +++++---- ...ndererServiceOperationsImplDeleteTest.java | 180 ++++++++++ .../RendererServiceOperationsImplTest.java | 313 ++++++++++++++---- .../renderer/stub/OlmServiceStub.java | 4 +- .../renderer/utils/MountPointUtils.java | 76 +---- .../renderer/utils/ServiceDataUtils.java | 60 ++-- .../utils/ServiceDeleteDataUtils.java | 118 +++++++ .../utils/ServiceImplementationDataUtils.java | 260 +++++++++++++++ .../renderer/utils/TransactionUtils.java | 63 ++++ .../utils/WaveLengthServiceUtils.java | 90 +++++ 19 files changed, 2092 insertions(+), 234 deletions(-) delete mode 100644 deploy-site.iml create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceFreeTest.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceUseTest.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/NodeIdPairTest.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplDeleteTest.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplRollbackTest.java rename renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/{DeviceRendererServiceImplTest.java => DeviceRendererServiceImplSetupTest.java} (51%) create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDeleteDataUtils.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceImplementationDataUtils.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/TransactionUtils.java create mode 100644 renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/WaveLengthServiceUtils.java diff --git a/deploy-site.iml b/deploy-site.iml deleted file mode 100644 index 7f43ada9d..000000000 --- a/deploy-site.iml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java index 40be47d71..734c6e581 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java @@ -114,9 +114,9 @@ public class OpenRoadmInterfaceFactory { } // Create Interface1 type object required for adding as augmentation // TODO look at imports of different versions of class - org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1Builder - ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014 - .Interface1Builder(); + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014 + .Interface1Builder ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel + .interfaces.rev161014.Interface1Builder(); ochInterfaceBldr.addAugmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1.class, ochIf1Builder.setOch(ocIfBuilder.build()).build()); @@ -148,9 +148,9 @@ public class OpenRoadmInterfaceFactory { // Create Interface1 type object required for adding as augmentation // TODO look at imports of different versions of class - org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1Builder - ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces - .rev161014.Interface1Builder(); + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014 + .Interface1Builder ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel + .interfaces.rev161014.Interface1Builder(); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber)); @@ -263,8 +263,8 @@ public class OpenRoadmInterfaceFactory { // Create Interface1 type object required for adding as // augmentation org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014 - .Interface1Builder otsIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical - .transport.interfaces.rev161014.Interface1Builder(); + .Interface1Builder otsIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport + .interfaces.rev161014.Interface1Builder(); otsInterfaceBldr.addAugmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1.class, otsIf1Builder.setOts(otsIfBuilder.build()).build()); diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java index e247ba119..f2f47f415 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java @@ -420,12 +420,12 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { nodeListBuilder.withKey(new NodelistKey(input.getServiceName())); nodeListBuilder.setServiceName(input.getServiceName()); List< - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102.service.nodelist - .nodelist.Nodes> nodeList = new ArrayList<>(); + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102.service + .nodelist.nodelist.Nodes> nodeList = new ArrayList<>(); for (Nodes node : input.getNodes()) { nodeList.add( - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102.service - .nodelist.nodelist.NodesBuilder().setNodeId(node.getNodeId()).build()); + new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102 + .service.nodelist.nodelist.NodesBuilder().setNodeId(node.getNodeId()).build()); } nodeListBuilder.setNodes(nodeList); InstanceIdentifier< @@ -449,10 +449,10 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { private boolean alarmSuppressionNodeRemoval(String serviceName) { InstanceIdentifier< - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102.service - .nodelist.Nodelist> nodeListIID = InstanceIdentifier.create(ServiceNodelist.class).child( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102 - .service.nodelist.Nodelist.class, new NodelistKey(serviceName)); + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102.service.nodelist + .Nodelist> nodeListIID = InstanceIdentifier.create(ServiceNodelist.class).child(org.opendaylight.yang + .gen.v1.urn.opendaylight.params.xml.ns.yang.alarmsuppression.rev171102.service.nodelist + .Nodelist.class, new NodelistKey(serviceName)); final WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction(); writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, nodeListIID); Future submit = writeTransaction.submit(); diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java index 636c9fe32..a5060820a 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java @@ -88,8 +88,8 @@ public class DeviceRendererRPCImpl implements RendererService { try { return RpcResultBuilder.success(deviceRenderer.createOtsOms(input)).buildFuture(); } catch (OpenRoadmInterfaceException e) { - LOG.error("failed to create oms and ots interfaces on {}: {}", input.getNodeId(), input - .getLogicalConnectionPoint(),e); + LOG.error("failed to send request to create oms and ots interfaces on {}: {}", input.getNodeId(), + input.getLogicalConnectionPoint(),e); } return null; } diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceFreeTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceFreeTest.java new file mode 100644 index 000000000..ce7aa0f50 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceFreeTest.java @@ -0,0 +1,258 @@ +/* + * 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.renderer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; +import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub; +import org.opendaylight.transportpce.renderer.stub.MountPointStub; +import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils; +import org.opendaylight.transportpce.renderer.utils.WaveLengthServiceUtils; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.used.wavelengths.UsedWavelengthsBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CtpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.PpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.RxTtpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.TxTtpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrClientAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrNetworkAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrPortAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.pp.attributes.UsedWavelengthBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev170929.xpdr.port.connection.attributes.WavelengthBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.PathDescription; + +@RunWith(Parameterized.class) +public class NetworkModelWaveLengthServiceFreeTest extends AbstractTest { + + private static final Long WAVE_LENGTH = 20L; + private NetworkModelWavelengthService networkModelWavelengthService; + private DeviceTransactionManager deviceTransactionManager; + private TerminationPoint1 terminationPoint1; + private PathDescription pathDescription; + private Node1 node1; + + public NetworkModelWaveLengthServiceFreeTest(PathDescription pathDescription, TerminationPoint1 terminationPoint1, + Node1 node1) { + this.pathDescription = pathDescription; + this.terminationPoint1 = terminationPoint1; + this.node1 = node1; + } + + @Parameterized.Parameters + public static Collection primeNumbers() { + List parameters = new ArrayList<>(); + + PathDescription pathDescription = + ServiceDeleteDataUtils.createTransactionPathDescription(OpenRoadmInterfacesImpl.TTP_TOKEN); + + TerminationPoint1Builder terminationPoint1Builder = new TerminationPoint1Builder(); + terminationPoint1Builder.setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(Collections + .singletonList((new UsedWavelengthsBuilder()).setIndex(WAVE_LENGTH).build())).build()); + terminationPoint1Builder.setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(Collections + .singletonList((new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network + .node.termination.point.cp.attributes.UsedWavelengthsBuilder()) + .setIndex(WAVE_LENGTH).build())).build()); + terminationPoint1Builder.setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Collections + .singletonList((new UsedWavelengthsBuilder()).setIndex(WAVE_LENGTH).build())).build()); + terminationPoint1Builder.setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(Collections + .singletonList((new UsedWavelengthsBuilder()).setIndex(WAVE_LENGTH).build())).build()); + terminationPoint1Builder.setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(Collections + .singletonList((new UsedWavelengthBuilder()).setIndex(WAVE_LENGTH).build())).build()); + terminationPoint1Builder.setXpdrClientAttributes((new XpdrClientAttributesBuilder()) + .setWavelength((new WavelengthBuilder()).setIndex(WAVE_LENGTH).build()).build()); + terminationPoint1Builder.setXpdrNetworkAttributes((new XpdrNetworkAttributesBuilder()) + .setWavelength((new WavelengthBuilder()).setIndex(WAVE_LENGTH).build()).build()); + terminationPoint1Builder.setXpdrPortAttributes((new XpdrPortAttributesBuilder()) + .setWavelength((new WavelengthBuilder()).setIndex(WAVE_LENGTH).build()).build()); + + Node1Builder node1Builder = new Node1Builder(); + node1Builder.setDegreeAttributes((new DegreeAttributesBuilder()).setAvailableWavelengths(new ArrayList<>()) + .build()); + node1Builder.setSrgAttributes((new SrgAttributesBuilder()).setAvailableWavelengths(new ArrayList<>()).build()); + + for (OpenroadmNodeType nodeType : Arrays.asList(OpenroadmNodeType.XPONDER, OpenroadmNodeType.DEGREE, + OpenroadmNodeType.SRG)) { + node1Builder.setNodeType(nodeType); + terminationPoint1Builder.setTpType(OpenroadmTpType.DEGREETXTTP); + parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build() }); + } + + for (OpenroadmTpType tpType : OpenroadmTpType.values()) { + node1Builder.setNodeType(OpenroadmNodeType.DEGREE); + node1Builder.setDegreeAttributes(null); + terminationPoint1Builder.setTpType(tpType); + parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build() }); + } + + node1Builder.setNodeType(OpenroadmNodeType.SRG); + node1Builder.setDegreeAttributes((new DegreeAttributesBuilder()).setAvailableWavelengths(new ArrayList<>()) + .build()); + node1Builder.setSrgAttributes(null); + terminationPoint1Builder.setTpType(OpenroadmTpType.DEGREETXTTP); + parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build() }); + + return parameters; + } + + @Before + public void setMountPoint() { + MountPointService mountPointService = new MountPointServiceStub(new MountPointStub(this.getDataBroker())); + this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); + networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(this.getDataBroker()); + } + + @Test + public void freeWavelengthsTest() throws ExecutionException, InterruptedException { + WaveLengthServiceUtils.putTerminationPoint1ToDatastore("node1", "node1-" + OpenRoadmInterfacesImpl.TTP_TOKEN, + this.terminationPoint1, this.deviceTransactionManager); + WaveLengthServiceUtils.putNode1ToDatastore("node1", this.node1, this.deviceTransactionManager); + this.networkModelWavelengthService.freeWavelengths(this.pathDescription); + Node1 updatedNode1 = WaveLengthServiceUtils.getNode1FromDatastore("node1", this.deviceTransactionManager); + TerminationPoint1 updatedTerminationPoint1 = WaveLengthServiceUtils.getTerminationPoint1FromDatastore("node1", + "node1-" + OpenRoadmInterfacesImpl.TTP_TOKEN, this.deviceTransactionManager); + switch (updatedTerminationPoint1.getTpType()) { + case DEGREETXRXCTP: + case DEGREETXCTP: + case DEGREERXCTP: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case SRGTXCP: + case SRGRXCP: + case SRGTXRXCP: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case DEGREETXRXTTP: + case DEGREETXTTP: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case DEGREERXTTP: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case SRGRXPP: + case SRGTXPP: + case SRGTXRXPP: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case XPONDERCLIENT: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case XPONDERNETWORK: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case XPONDERPORT: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes()); + break; + default: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + } + switch (updatedNode1.getNodeType()) { + case DEGREE: + Assert.assertEquals(1, updatedNode1.getDegreeAttributes().getAvailableWavelengths().size()); + Assert.assertEquals(WAVE_LENGTH, + updatedNode1.getDegreeAttributes().getAvailableWavelengths().get(0).getIndex()); + Assert.assertTrue(updatedNode1.getSrgAttributes().getAvailableWavelengths().isEmpty()); + break; + case SRG: + Assert.assertEquals(1, updatedNode1.getSrgAttributes().getAvailableWavelengths().size()); + Assert.assertEquals(WAVE_LENGTH, + updatedNode1.getSrgAttributes().getAvailableWavelengths().get(0).getIndex()); + Assert.assertTrue(updatedNode1.getDegreeAttributes().getAvailableWavelengths().isEmpty()); + break; + default: + Assert.assertTrue(updatedNode1.getDegreeAttributes().getAvailableWavelengths().isEmpty()); + Assert.assertTrue(updatedNode1.getSrgAttributes().getAvailableWavelengths().isEmpty()); + break; + } + } +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceUseTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceUseTest.java new file mode 100644 index 000000000..3f0c1f3cf --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceUseTest.java @@ -0,0 +1,246 @@ +/* + * 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.renderer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; +import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub; +import org.opendaylight.transportpce.renderer.stub.MountPointStub; +import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils; +import org.opendaylight.transportpce.renderer.utils.WaveLengthServiceUtils; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengthsBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CtpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.PpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.RxTtpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.TxTtpAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrClientAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrNetworkAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrPortAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.PathDescription; + +@RunWith(Parameterized.class) +public class NetworkModelWaveLengthServiceUseTest extends AbstractTest { + + private NetworkModelWavelengthService networkModelWavelengthService; + private DeviceTransactionManager deviceTransactionManager; + + private TerminationPoint1 terminationPoint1; + private PathDescription pathDescription; + private Node1 node1; + + @Before + public void setMountPoint() { + MountPointService mountPointService = new MountPointServiceStub(new MountPointStub(this.getDataBroker())); + this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); + networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(this.getDataBroker()); + } + + public NetworkModelWaveLengthServiceUseTest(PathDescription pathDescription, TerminationPoint1 terminationPoint1, + Node1 node1) { + this.pathDescription = pathDescription; + this.terminationPoint1 = terminationPoint1; + this.node1 = node1; + } + + @Parameterized.Parameters + public static Collection primeNumbers() { + List parameters = new ArrayList<>(); + + PathDescription pathDescription = + ServiceDeleteDataUtils.createTransactionPathDescription(OpenRoadmInterfacesImpl.TTP_TOKEN); + + TerminationPoint1Builder terminationPoint1Builder = new TerminationPoint1Builder(); + terminationPoint1Builder + .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()); + terminationPoint1Builder + .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()); + terminationPoint1Builder + .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()); + terminationPoint1Builder + .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()); + terminationPoint1Builder.setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()) + .build()); + terminationPoint1Builder.setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build()); + terminationPoint1Builder.setXpdrNetworkAttributes((new XpdrNetworkAttributesBuilder()).build()); + terminationPoint1Builder.setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build()); + + Node1Builder node1Builder = new Node1Builder(); + node1Builder.setDegreeAttributes((new DegreeAttributesBuilder()) + .setAvailableWavelengths(Collections.singletonList(new AvailableWavelengthsBuilder().setIndex(20L).build())) + .build()); + node1Builder.setSrgAttributes((new SrgAttributesBuilder()).setAvailableWavelengths(Collections.singletonList( + new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes + .AvailableWavelengthsBuilder().setIndex(20L).build())).build()); + + for (OpenroadmNodeType nodeType : Arrays + .asList(OpenroadmNodeType.XPONDER, OpenroadmNodeType.DEGREE, OpenroadmNodeType.SRG)) { + node1Builder.setNodeType(nodeType); + terminationPoint1Builder.setTpType(OpenroadmTpType.DEGREETXTTP); + parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build() }); + } + + for (OpenroadmTpType tpType : OpenroadmTpType.values()) { + node1Builder.setNodeType(OpenroadmNodeType.DEGREE); + terminationPoint1Builder.setTpType(tpType); + parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build() }); + } + + return parameters; + } + + @Test + public void freeWavelengthsTest() throws ExecutionException, InterruptedException { + WaveLengthServiceUtils + .putTerminationPoint1ToDatastore("node1", "node1-" + OpenRoadmInterfacesImpl.TTP_TOKEN, + this.terminationPoint1, this.deviceTransactionManager); + WaveLengthServiceUtils.putNode1ToDatastore("node1", this.node1, this.deviceTransactionManager); + this.networkModelWavelengthService.useWavelengths(this.pathDescription); + Node1 updatedNode1 = WaveLengthServiceUtils.getNode1FromDatastore("node1", this.deviceTransactionManager); + TerminationPoint1 updatedTerminationPoint1 = WaveLengthServiceUtils + .getTerminationPoint1FromDatastore("node1", "node1-" + OpenRoadmInterfacesImpl.TTP_TOKEN, + this.deviceTransactionManager); + + switch (updatedTerminationPoint1.getTpType()) { + case DEGREETXRXCTP: + case DEGREETXCTP: + case DEGREERXCTP: + Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case SRGTXCP: + case SRGRXCP: + case SRGTXRXCP: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case DEGREETXRXTTP: + case DEGREETXTTP: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case DEGREERXTTP: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case SRGRXPP: + case SRGTXPP: + case SRGTXRXPP: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case XPONDERCLIENT: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case XPONDERNETWORK: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + case XPONDERPORT: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes()); + break; + default: + Assert.assertTrue(updatedTerminationPoint1.getCtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getCpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty()); + Assert.assertTrue(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty()); + Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength()); + Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength()); + break; + } + switch (updatedNode1.getNodeType()) { + case DEGREE: + Assert.assertTrue(updatedNode1.getDegreeAttributes().getAvailableWavelengths().isEmpty()); + Assert.assertFalse(updatedNode1.getSrgAttributes().getAvailableWavelengths().isEmpty()); + break; + case SRG: + Assert.assertTrue(updatedNode1.getSrgAttributes().getAvailableWavelengths().isEmpty()); + Assert.assertFalse(updatedNode1.getDegreeAttributes().getAvailableWavelengths().isEmpty()); + break; + default: + Assert.assertFalse(updatedNode1.getDegreeAttributes().getAvailableWavelengths().isEmpty()); + Assert.assertFalse(updatedNode1.getSrgAttributes().getAvailableWavelengths().isEmpty()); + break; + } + + } +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/NodeIdPairTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/NodeIdPairTest.java new file mode 100644 index 000000000..41d07df37 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/NodeIdPairTest.java @@ -0,0 +1,57 @@ +/* + * 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.renderer; + +import java.util.Arrays; +import java.util.Collection; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class NodeIdPairTest { + + private NodeIdPair firstPair; + private Object secondPair; + private boolean equality; + + public NodeIdPairTest(NodeIdPair firstPair, Object secondPair, boolean equality) { + this.firstPair = firstPair; + this.secondPair = secondPair; + this.equality = equality; + } + + @Parameterized.Parameters + public static Collection primeNumbers() { + NodeIdPair same = new NodeIdPair("nodeS", "CLIENT"); + return Arrays.asList(new Object[][] { + { new NodeIdPair("",""), null, false }, + { new NodeIdPair("",""), "", false }, + { new NodeIdPair("node1","PP"), new NodeIdPair("node2","PP"), false }, + { new NodeIdPair("node1","PP"), new NodeIdPair("node1","TTP"), false }, + { new NodeIdPair(null,"PP"), new NodeIdPair(null,"TTP"), false }, + { new NodeIdPair(null,"PP"), new NodeIdPair("node2","TTP"), false }, + { new NodeIdPair("node1",null), new NodeIdPair("node1","NETWORK"), false }, + { new NodeIdPair("node1",null), new NodeIdPair("node1",null), true }, + { new NodeIdPair("node1","TTP"), new NodeIdPair("node1","TTP"), true }, + { new NodeIdPair(null,null), new NodeIdPair(null,null), true }, + {same, same, true} + }); + } + + @Test + public void equalityTest() { + Assert.assertEquals(this.equality, firstPair.equals(this.secondPair)); + if (this.secondPair != null && this.firstPair.getClass().equals(this.secondPair.getClass())) { + Assert.assertEquals(this.equality, this.firstPair.hashCode() == this.secondPair.hashCode()); + } + } + +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplDeleteTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplDeleteTest.java new file mode 100644 index 000000000..46365bd48 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplDeleteTest.java @@ -0,0 +1,218 @@ +/* + * 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.renderer.provisiondevice; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.controller.md.sal.binding.api.MountPoint; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.transportpce.common.crossconnect.CrossConnect; +import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.mapping.PortMapping; +import org.opendaylight.transportpce.common.mapping.PortMappingImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; +import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; +import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub; +import org.opendaylight.transportpce.renderer.utils.MountPointUtils; +import org.opendaylight.transportpce.renderer.utils.ServiceImplementationDataUtils; +import org.opendaylight.transportpce.renderer.utils.TransactionUtils; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.DestinationBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.SourceBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.Nodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathOutput; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class DeviceRendererServiceImplDeleteTest extends AbstractTest { + + private DeviceRendererService deviceRendererService; + private CrossConnect crossConnect; + private OpenRoadmInterfaces openRoadmInterfaces; + private OpenRoadmInterfaceFactory openRoadmInterfaceFactory; + private DeviceTransactionManager deviceTransactionManager; + + private void setMountPoint(MountPoint mountPoint) { + MountPointService mountPointService = new MountPointServiceStub(mountPoint); + this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); + this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(this.deviceTransactionManager); + this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces); + PortMapping portMapping = new PortMappingImpl(this.getDataBroker(), this.deviceTransactionManager, + this.openRoadmInterfaces); + this.openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping, + this.openRoadmInterfaces); + this.crossConnect = new CrossConnectImpl(this.deviceTransactionManager); + this.crossConnect = Mockito.spy(this.crossConnect); + this.deviceRendererService = new DeviceRendererServiceImpl(this.getDataBroker(), + this.deviceTransactionManager, this.openRoadmInterfaceFactory, this.openRoadmInterfaces, + this.crossConnect, portMapping); + } + + @Test + public void testSetupServiceWhenDeviceIsNotMounted() { + setMountPoint(null); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(); + ServicePathOutput servicePathOutput = deviceRendererService.deleteServicePath(servicePathInput); + Assert.assertFalse(servicePathOutput.isSuccess()); + Assert.assertEquals("node1 is not mounted on the controller", + servicePathOutput.getResult()); + } + + @Test + public void testDeleteServiceSuccess() throws OpenRoadmInterfaceException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + String [] interfaceTokens = { + OpenRoadmInterfacesImpl.NETWORK_TOKEN, + OpenRoadmInterfacesImpl.CLIENT_TOKEN, + OpenRoadmInterfacesImpl.TTP_TOKEN, + OpenRoadmInterfacesImpl.PP_TOKEN + }; + + String nodeId = "node1"; + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect(Mockito.eq(nodeId), Mockito.anyString()); + Mockito.doNothing().when(this.openRoadmInterfaces).deleteInterface(Mockito.eq(nodeId), Mockito.anyString()); + + for (String srcToken : interfaceTokens) { + String srcTP = "src-" + srcToken; + for (String dstToken : interfaceTokens) { + String dstTp = "dst-" + dstToken; + + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + + ServicePathOutput servicePathOutput = deviceRendererService.deleteServicePath(servicePathInput); + Assert.assertTrue(servicePathOutput.isSuccess()); + Assert.assertEquals("Request processed", servicePathOutput.getResult()); + } + } + } + + @Test + public void testDeleteServiceFailure() throws OpenRoadmInterfaceException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + String [] interfaceTokens = { + OpenRoadmInterfacesImpl.NETWORK_TOKEN, + OpenRoadmInterfacesImpl.CLIENT_TOKEN, + OpenRoadmInterfacesImpl.TTP_TOKEN, + OpenRoadmInterfacesImpl.PP_TOKEN + }; + + String nodeId = "node1"; + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect(Mockito.eq(nodeId), Mockito.anyString()); + Mockito.doThrow(OpenRoadmInterfaceException.class).when(this.openRoadmInterfaces) + .deleteInterface(Mockito.eq(nodeId), Mockito.anyString()); + + for (String srcToken : interfaceTokens) { + String srcTP = "src-" + srcToken; + for (String dstToken : interfaceTokens) { + String dstTp = "dst-" + dstToken; + + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + + ServicePathOutput servicePathOutput = deviceRendererService.deleteServicePath(servicePathInput); + Assert.assertFalse(servicePathOutput.isSuccess()); + Assert.assertNotEquals("Request processed", servicePathOutput.getResult()); + } + } + } + + @Test + public void testDeleteServiceNulls() throws OpenRoadmInterfaceException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + + String nodeId = "node1"; + Mockito.doReturn(false).when(this.crossConnect).deleteCrossConnect(Mockito.eq(nodeId), Mockito.anyString()); + Mockito.doThrow(OpenRoadmInterfaceException.class).when(this.openRoadmInterfaces) + .deleteInterface(Mockito.eq(nodeId), Mockito.anyString()); + + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, null, null)); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, "src-" + OpenRoadmInterfacesImpl.PP_TOKEN, null)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + + ServicePathOutput servicePathOutput = deviceRendererService.deleteServicePath(servicePathInput); + Assert.assertTrue(servicePathOutput.isSuccess()); + Assert.assertEquals("Request processed", servicePathOutput.getResult()); + } + + @Test + public void testDeleteServiceFailedCrossConnect() throws OpenRoadmInterfaceException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + + String nodeId = "node1"; + + Mockito.doReturn(false).when(this.crossConnect).deleteCrossConnect(Mockito.eq(nodeId), Mockito.anyString()); + Mockito.doNothing().when(this.openRoadmInterfaces).deleteInterface(Mockito.eq(nodeId), Mockito.anyString()); + + String srcTP = "src-" + OpenRoadmInterfacesImpl.TTP_TOKEN; + String dstTp = "dst-" + OpenRoadmInterfacesImpl.PP_TOKEN; + + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + + ServicePathOutput servicePathOutput = deviceRendererService.deleteServicePath(servicePathInput); + Assert.assertTrue(servicePathOutput.isSuccess()); + Assert.assertEquals("Request processed", servicePathOutput.getResult()); + } + + @Test + public void testDeleteServiceInterfacesUsedByXc() throws OpenRoadmInterfaceException, ExecutionException, + InterruptedException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + + String nodeId = "node1"; + + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect(Mockito.eq(nodeId), Mockito.anyString()); + Mockito.doThrow(OpenRoadmInterfaceException.class).when(this.openRoadmInterfaces) + .deleteInterface(Mockito.eq(nodeId), Mockito.anyString()); + + String srcTp = "src-" + OpenRoadmInterfacesImpl.PP_TOKEN; + String dstTp = "dst-" + OpenRoadmInterfacesImpl.TTP_TOKEN; + Long waveNumber = 20L; + + String connectionNumber = dstTp + "-" + srcTp + "-" + waveNumber; + RoadmConnectionsBuilder roadmConnectionsBuilder = new RoadmConnectionsBuilder(); + roadmConnectionsBuilder.setConnectionNumber(connectionNumber) + .withKey(new RoadmConnectionsKey(connectionNumber)); + String interfaceName = this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaceName(srcTp, waveNumber); + roadmConnectionsBuilder.setSource((new SourceBuilder()).setSrcIf(interfaceName).build()); + interfaceName = this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaceName(dstTp, waveNumber); + roadmConnectionsBuilder.setWavelengthNumber(20L); + roadmConnectionsBuilder.setDestination((new DestinationBuilder()).setDstIf(interfaceName).build()); + InstanceIdentifier xciid = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber)); + TransactionUtils.writeTransaction(this.deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION, + xciid, roadmConnectionsBuilder.build()); + + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTp, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + + ServicePathOutput servicePathOutput = deviceRendererService.deleteServicePath(servicePathInput); + Assert.assertTrue(servicePathOutput.isSuccess()); + Assert.assertEquals("Request processed", servicePathOutput.getResult()); + } +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplRollbackTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplRollbackTest.java new file mode 100644 index 000000000..d1a2db3a1 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplRollbackTest.java @@ -0,0 +1,193 @@ +/* + * 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.renderer.provisiondevice; + +import java.util.ArrayList; +import java.util.List; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.controller.md.sal.binding.api.MountPoint; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.transportpce.common.crossconnect.CrossConnect; +import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.mapping.PortMapping; +import org.opendaylight.transportpce.common.mapping.PortMappingImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; +import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; +import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub; +import org.opendaylight.transportpce.renderer.stub.MountPointStub; +import org.opendaylight.transportpce.renderer.utils.ServiceImplementationDataUtils; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterface; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackOutput; + +public class DeviceRendererServiceImplRollbackTest extends AbstractTest { + + private DeviceRendererService deviceRendererService; + private CrossConnect crossConnect; + private OpenRoadmInterfaces openRoadmInterfaces; + + private void setMountPoint(MountPoint mountPoint) { + MountPointService mountPointService = new MountPointServiceStub(mountPoint); + DeviceTransactionManager deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); + this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager); + this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces); + PortMapping portMapping = new PortMappingImpl(this.getDataBroker(), deviceTransactionManager, + this.openRoadmInterfaces); + OpenRoadmInterfaceFactory openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping, + this.openRoadmInterfaces); + this.crossConnect = new CrossConnectImpl(deviceTransactionManager); + this.crossConnect = Mockito.spy(this.crossConnect); + this.deviceRendererService = new DeviceRendererServiceImpl(this.getDataBroker(), + deviceTransactionManager, openRoadmInterfaceFactory, this.openRoadmInterfaces, this.crossConnect, + portMapping); + } + + + + @Test + public void testRollbackEmptyInterface() { + setMountPoint(new MountPointStub(getDataBroker())); + RendererRollbackInput rendererRollbackInput = ServiceImplementationDataUtils.buildRendererRollbackInput(); + RendererRollbackOutput rendererRollbackOutput = + this.deviceRendererService.rendererRollback(rendererRollbackInput); + Assert.assertTrue(rendererRollbackOutput.isSuccess()); + Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().isEmpty()); + } + + @Test + public void testRollbackConnectionIdNotExist() { + setMountPoint(new MountPointStub(getDataBroker())); + + NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder(); + nodeInterfaceBuilder.setNodeId("node1"); + nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1")); + List connectionID = new ArrayList<>(); + connectionID.add("node1-PP"); + nodeInterfaceBuilder.setConnectionId(connectionID); + List nodeInterfaces = new ArrayList<>(); + nodeInterfaces.add(nodeInterfaceBuilder.build()); + RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder(); + rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces); + + RendererRollbackOutput rendererRollbackOutput = + this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build()); + Assert.assertFalse(rendererRollbackOutput.isSuccess()); + Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size()); + Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId()); + } + + @Test + public void testRollbackConnectionId() { + setMountPoint(new MountPointStub(getDataBroker())); + + NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder(); + nodeInterfaceBuilder.setNodeId("node1"); + nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1")); + List connectionID = new ArrayList<>(); + connectionID.add("src-PP-dest-PP-20"); + nodeInterfaceBuilder.setConnectionId(connectionID); + List nodeInterfaces = new ArrayList<>(); + nodeInterfaces.add(nodeInterfaceBuilder.build()); + RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder(); + rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces); + + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect("node1", connectionID.get(0)); + RendererRollbackOutput rendererRollbackOutput = + this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build()); + Assert.assertTrue("Rollback must success when cross connect returns true", rendererRollbackOutput.isSuccess()); + Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size()); + Assert.assertTrue("There must not be any failed interfaces when cross connect returns true", + rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty()); + + Mockito.doReturn(false).when(this.crossConnect).deleteCrossConnect("node1", connectionID.get(0)); + rendererRollbackOutput = + this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build()); + Assert.assertFalse("Rollback must fail when cross connect returns false",rendererRollbackOutput.isSuccess()); + Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size()); + Assert.assertFalse(rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty()); + Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId()); + + Mockito.verify(this.crossConnect, Mockito.times(2)).deleteCrossConnect("node1", connectionID.get(0)); + } + + @Test + public void testRollbackInterfaces() throws OpenRoadmInterfaceException { + setMountPoint(new MountPointStub(getDataBroker())); + + NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder(); + nodeInterfaceBuilder.setNodeId("node1"); + nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1")); + nodeInterfaceBuilder.setConnectionId(new ArrayList<>()); + List oduInterfacesId = new ArrayList<>(); + oduInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-ODU"); + nodeInterfaceBuilder.setOduInterfaceId(oduInterfacesId); + List otuInterfacesId = new ArrayList<>(); + otuInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-OTU"); + nodeInterfaceBuilder.setOtuInterfaceId(otuInterfacesId); + List ochInterfacesId = new ArrayList<>(); + ochInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-20"); + nodeInterfaceBuilder.setOchInterfaceId(ochInterfacesId); + List nodeInterfaces = new ArrayList<>(); + nodeInterfaces.add(nodeInterfaceBuilder.build()); + RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder(); + rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces); + + Mockito.doNothing().when(this.openRoadmInterfaces).deleteInterface(Mockito.eq("node1"), Mockito.anyString()); + RendererRollbackOutput rendererRollbackOutput = + this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build()); + Assert.assertTrue(rendererRollbackOutput.isSuccess()); + Assert.assertFalse(rendererRollbackOutput.getFailedToRollback().isEmpty()); + Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty()); + Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.anyString(), + Mockito.anyString()); + Mockito.verify(this.openRoadmInterfaces, Mockito.times(3)).deleteInterface(Mockito.eq("node1"), + Mockito.anyString()); + } + + @Test + public void testRollbackInterfacesException() throws OpenRoadmInterfaceException { + setMountPoint(new MountPointStub(getDataBroker())); + + NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder(); + nodeInterfaceBuilder.setNodeId("node1"); + nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1")); + nodeInterfaceBuilder.setConnectionId(new ArrayList<>()); + List ethInterfacesId = new ArrayList<>(); + ethInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.CLIENT_TOKEN + "-ETHERNET"); + nodeInterfaceBuilder.setEthInterfaceId(ethInterfacesId); + List nodeInterfaces = new ArrayList<>(); + nodeInterfaces.add(nodeInterfaceBuilder.build()); + RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder(); + rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces); + + Mockito.doThrow(OpenRoadmInterfaceException.class).when(this.openRoadmInterfaces) + .deleteInterface(Mockito.eq("node1"), Mockito.anyString()); + RendererRollbackOutput rendererRollbackOutput = + this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build()); + Assert.assertFalse(rendererRollbackOutput.isSuccess()); + Assert.assertEquals(1,rendererRollbackOutput.getFailedToRollback().size()); + Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().get(0).getInterface().size()); + Assert.assertEquals(ethInterfacesId.get(0), rendererRollbackOutput.getFailedToRollback().get(0) + .getInterface().get(0)); + Mockito.verify(this.crossConnect, Mockito.times(0)) + .deleteCrossConnect(Mockito.anyString(), Mockito.anyString()); + Mockito.verify(this.openRoadmInterfaces, Mockito.times(1)) + .deleteInterface("node1",ethInterfacesId.get(0)); + } +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplSetupTest.java similarity index 51% rename from renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplTest.java rename to renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplSetupTest.java index f0a59bd79..bc69d17a0 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplTest.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplSetupTest.java @@ -10,9 +10,9 @@ package org.opendaylight.transportpce.renderer.provisiondevice; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutionException; import org.junit.Assert; import org.junit.Test; +import org.mockito.Mockito; import org.opendaylight.controller.md.sal.binding.api.MountPoint; import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.transportpce.common.crossconnect.CrossConnect; @@ -21,42 +21,41 @@ import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.mapping.PortMappingImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection; import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub; -import org.opendaylight.transportpce.renderer.stub.MountPointStub; import org.opendaylight.transportpce.renderer.utils.MountPointUtils; -import org.opendaylight.transportpce.renderer.utils.ServiceDataUtils; +import org.opendaylight.transportpce.renderer.utils.ServiceImplementationDataUtils; import org.opendaylight.transportpce.test.AbstractTest; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterface; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceKey; import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathOutput; -public class DeviceRendererServiceImplTest extends AbstractTest { - - private MountPointService mountPointService; +public class DeviceRendererServiceImplSetupTest extends AbstractTest { private DeviceTransactionManager deviceTransactionManager; private DeviceRendererService deviceRendererService; + private CrossConnect crossConnect; + private PortMapping portMapping; + private OpenRoadmInterfaces openRoadmInterfaces; + private void setMountPoint(MountPoint mountPoint) { - this.mountPointService = new MountPointServiceStub(mountPoint); - this.deviceTransactionManager = new DeviceTransactionManagerImpl(this.mountPointService, 3000); - OpenRoadmInterfaces openRoadmInterfaces = new OpenRoadmInterfacesImpl(this.deviceTransactionManager); - PortMapping portMapping = new PortMappingImpl(this.getDataBroker(), this.deviceTransactionManager, - openRoadmInterfaces); - OpenRoadmInterfaceFactory openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping, - openRoadmInterfaces); - CrossConnect crossConnect = new CrossConnectImpl(this.deviceTransactionManager); + MountPointService mountPointService = new MountPointServiceStub(mountPoint); + this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); + this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(this.deviceTransactionManager); + this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces); + this.portMapping = new PortMappingImpl(this.getDataBroker(), this.deviceTransactionManager, + this.openRoadmInterfaces); + this.portMapping = Mockito.spy(this.portMapping); + OpenRoadmInterfaceFactory openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(this.portMapping, + this.openRoadmInterfaces); + this.crossConnect = new CrossConnectImpl(this.deviceTransactionManager); + this.crossConnect = Mockito.spy(this.crossConnect); this.deviceRendererService = new DeviceRendererServiceImpl(this.getDataBroker(), this.deviceTransactionManager, openRoadmInterfaceFactory, openRoadmInterfaces, crossConnect, portMapping); @@ -65,7 +64,7 @@ public class DeviceRendererServiceImplTest extends AbstractTest { @Test public void testSetupServiceWhenDeviceIsNotMounted() { setMountPoint(null); - ServicePathInput servicePathInput = ServiceDataUtils.buildServicePathInputs(); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(); for (ServicePathDirection servicePathDirection : ServicePathDirection.values()) { ServicePathOutput servicePathOutput = deviceRendererService.setupServicePath(servicePathInput, servicePathDirection); @@ -76,31 +75,49 @@ public class DeviceRendererServiceImplTest extends AbstractTest { } @Test - public void testSetupServiceUsingCrossConnectEmptyPorts() throws ExecutionException, InterruptedException { + public void testSetupServicemptyPorts() { setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); - testSetupService(true); + String nodeId = "node1"; + String srcTP = OpenRoadmInterfacesImpl.TTP_TOKEN; + String dstTp = OpenRoadmInterfacesImpl.PP_TOKEN; + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + for (ServicePathDirection servicePathDirection : ServicePathDirection.values()) { + ServicePathOutput servicePathOutput = deviceRendererService.setupServicePath(servicePathInput, + servicePathDirection); + Assert.assertFalse(servicePathOutput.isSuccess()); + } } @Test - public void testSetupServiceUsingCrossConnectWithPorts() throws ExecutionException, InterruptedException { + public void testSetupServiceCannotCrossConnect() { setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); - testSetupService(true); + String nodeId = "node1"; + String srcTP = OpenRoadmInterfacesImpl.TTP_TOKEN; + String dstTp = OpenRoadmInterfacesImpl.PP_TOKEN; + MountPointUtils.writeMapping(nodeId, srcTP, this.deviceTransactionManager); + MountPointUtils.writeMapping(nodeId, dstTp, this.deviceTransactionManager); + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + Mockito.doReturn(java.util.Optional.empty()).when(this.crossConnect).postCrossConnect(nodeId, 20L, srcTP, + dstTp); + ServicePathOutput servicePathOutput = deviceRendererService.setupServicePath(servicePathInput, + ServicePathDirection.A_TO_Z); + Assert.assertFalse(servicePathOutput.isSuccess()); } -// @Test -// public void testSetupServiceWithoutCrossConnect() throws ExecutionException, InterruptedException { -// setMountPoint(new MountPointStub(getDataBroker())); -// -// testSetupService(false); -// } - - private void testSetupService(boolean crossConnect) throws ExecutionException, InterruptedException { + @Test + public void testSetupService() throws OpenRoadmInterfaceException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + Mockito.doNothing().when(this.openRoadmInterfaces).postEquipmentState(Mockito.anyString(), + Mockito.anyString(), Mockito.anyBoolean()); String [] interfaceTokens = { OpenRoadmInterfacesImpl.NETWORK_TOKEN, OpenRoadmInterfacesImpl.CLIENT_TOKEN, OpenRoadmInterfacesImpl.TTP_TOKEN, - OpenRoadmInterfacesImpl.PP_TOKEN, - "" + OpenRoadmInterfacesImpl.PP_TOKEN }; String nodeId = "node1"; @@ -122,59 +139,50 @@ public class DeviceRendererServiceImplTest extends AbstractTest { connectingUsingCrossConnect = false; } - if (connectingUsingCrossConnect != crossConnect) { - continue; - } - List nodes = new ArrayList<>(); - nodes.add(ServiceDataUtils.createNode(nodeId, srcTP, dstTp)); - ServicePathInput servicePathInput = ServiceDataUtils.buildServicePathInputs(nodes); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); for (ServicePathDirection servicePathDirection : ServicePathDirection.values()) { ServicePathOutput servicePathOutput = deviceRendererService.setupServicePath(servicePathInput, servicePathDirection); Assert.assertTrue(servicePathOutput.isSuccess()); String expectedResult = "Roadm-connection successfully created for nodes: "; - if (crossConnect) { + if (connectingUsingCrossConnect) { expectedResult = expectedResult + nodeId; } Assert.assertEquals(expectedResult, servicePathOutput.getResult()); Assert.assertEquals(1, servicePathOutput.getNodeInterface().size()); Assert.assertEquals(nodeId, servicePathOutput.getNodeInterface().get(0).getNodeId()); + if (!connectingUsingCrossConnect) { // No need to try both directions if not cross connect + break; + } } } } } @Test - public void testRollbackEmptyInterface() { - setMountPoint(new MountPointStub(getDataBroker())); - RendererRollbackInput rendererRollbackInput = ServiceDataUtils.buildRendererRollbackInput(); - RendererRollbackOutput rendererRollbackOutput = - this.deviceRendererService.rendererRollback(rendererRollbackInput); - Assert.assertTrue(rendererRollbackOutput.isSuccess()); - Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().isEmpty()); - } + public void testSetupServiceNulls() throws OpenRoadmInterfaceException { + setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker())); + String nodeId = "node1"; + String srcTP = null; + String dstTp = null; + boolean connectingUsingCrossConnect = true; - @Test - public void testRollbackConnectionIdNotExist() { - setMountPoint(new MountPointStub(getDataBroker())); - - NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder(); - nodeInterfaceBuilder.setNodeId("node1"); - nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1")); - List connectionID = new ArrayList<>(); - connectionID.add("node1-PP"); - nodeInterfaceBuilder.setConnectionId(connectionID); - List nodeInterfaces = new ArrayList<>(); - nodeInterfaces.add(nodeInterfaceBuilder.build()); - RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder(); - rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces); - - RendererRollbackOutput rendererRollbackOutput = - this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build()); - Assert.assertFalse(rendererRollbackOutput.isSuccess()); - Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size()); - Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId()); + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode(nodeId, srcTP, dstTp)); + ServicePathInput servicePathInput = ServiceImplementationDataUtils.buildServicePathInputs(nodes); + + for (ServicePathDirection servicePathDirection : ServicePathDirection.values()) { + ServicePathOutput servicePathOutput = deviceRendererService.setupServicePath(servicePathInput, + servicePathDirection); + Assert.assertTrue(servicePathOutput.isSuccess()); + String expectedResult = "Roadm-connection successfully created for nodes: "; + expectedResult = expectedResult + nodeId; + Assert.assertEquals(expectedResult, servicePathOutput.getResult()); + Assert.assertEquals(1, servicePathOutput.getNodeInterface().size()); + Assert.assertEquals(nodeId, servicePathOutput.getNodeInterface().get(0).getNodeId()); + } } } diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java new file mode 100644 index 000000000..b64b1bc20 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java @@ -0,0 +1,180 @@ +/* + * 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.renderer.provisiondevice; + +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.controller.md.sal.binding.api.MountPoint; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.transportpce.common.ResponseCodes; +import org.opendaylight.transportpce.common.crossconnect.CrossConnect; +import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.mapping.PortMapping; +import org.opendaylight.transportpce.common.mapping.PortMappingImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; +import org.opendaylight.transportpce.renderer.NetworkModelWavelengthService; +import org.opendaylight.transportpce.renderer.NetworkModelWavelengthServiceImpl; +import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; +import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub; +import org.opendaylight.transportpce.renderer.stub.MountPointStub; +import org.opendaylight.transportpce.renderer.stub.OlmServiceStub; +import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils; +import org.opendaylight.transportpce.renderer.utils.TransactionUtils; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.handler.header.ServiceHandlerHeaderBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceDeleteInputBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceDeleteOutput; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServicePathList; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.path.list.ServicePaths; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.path.list.ServicePathsBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.path.list.ServicePathsKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.OlmService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutputBuilder; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; + +public class RendererServiceOperationsImplDeleteTest extends AbstractTest { + + private static final int NUMBER_OF_THREADS = 4; + private DeviceTransactionManager deviceTransactionManager; + private RendererServiceOperationsImpl rendererServiceOperations; + private OpenRoadmInterfaces openRoadmInterfaces; + private DeviceRendererService deviceRenderer; + private PortMapping portMapping; + private CrossConnect crossConnect; + private NetworkModelWavelengthService networkModelWavelengthService; + private OlmService olmService; + + private void setMountPoint(MountPoint mountPoint) { + MountPointService mountPointService = new MountPointServiceStub(mountPoint); + this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); + this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(this.deviceTransactionManager); + this.portMapping = new PortMappingImpl(this.getDataBroker(), this.deviceTransactionManager, + openRoadmInterfaces); + OpenRoadmInterfaceFactory openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping, + openRoadmInterfaces); + this.crossConnect = new CrossConnectImpl(this.deviceTransactionManager); + this.crossConnect = Mockito.spy(crossConnect); + this.deviceRenderer = new DeviceRendererServiceImpl(this.getDataBroker(), + this.deviceTransactionManager, openRoadmInterfaceFactory, openRoadmInterfaces, crossConnect, + this.portMapping); + } + + @Before + public void setUp() { + setMountPoint(new MountPointStub(getDataBroker())); + this.olmService = new OlmServiceStub(); + this.olmService = Mockito.spy(this.olmService); + ListeningExecutorService executor = + MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUMBER_OF_THREADS)); + this.networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(getDataBroker()); + this.rendererServiceOperations = new RendererServiceOperationsImpl(this.deviceRenderer, olmService, + getDataBroker(), this.networkModelWavelengthService); + + } + + + @Test + public void serviceDeleteOperationPp() throws ExecutionException, InterruptedException { + writePathDescription(); + ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); + serviceDeleteInputBuilder.setServiceName("service 1"); + serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()) + .setRequestId("request1").build()); + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(), Mockito.anyString()); + ServiceDeleteOutput serviceDeleteOutput + = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build()); + Assert.assertEquals(ResponseCodes.RESPONSE_OK, + serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); + Mockito.verify(this.crossConnect, Mockito.times(1)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any()); + Mockito.verify(this.crossConnect, Mockito.times(1)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any()); + } + + @Test + public void serviceDeleteOperationNoDescription() { + ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); + serviceDeleteInputBuilder.setServiceName("service 1"); + ServiceDeleteOutput serviceDeleteOutput + = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build()); + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); + Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.any(), Mockito.any()); + } + + @Test + public void serviceDeleteOperationTearDownFailedAtoZ() throws ExecutionException, InterruptedException { + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(), Mockito.anyString()); + Mockito.doReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) + .setResult("Failed").build()).buildFuture()).when(this.olmService).servicePowerTurndown(Mockito.any()); + + writePathDescription(); + ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); + serviceDeleteInputBuilder.setServiceName("service 1"); + serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()) + .setRequestId("request1").build()); + ServiceDeleteOutput serviceDeleteOutput + = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build()); + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); + Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any()); + Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any()); + } + + @Test + public void serviceDeleteOperationTearDownFailedZtoA() throws ExecutionException, InterruptedException { + Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(), Mockito.anyString()); + Mockito.when(this.olmService.servicePowerTurndown(Mockito.any())) + .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) + .setResult("Success").build()).buildFuture()) + .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) + .setResult("Failed").build()).buildFuture()); + + writePathDescription(); + ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); + serviceDeleteInputBuilder.setServiceName("service 1"); + serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()) + .setRequestId("request1").build()); + ServiceDeleteOutput serviceDeleteOutput = + this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build()); + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); + Mockito.verify(this.olmService, Mockito.times(2)).servicePowerTurndown(Mockito.any()); + Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any()); + Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any()); + } + + private void writePathDescription() throws ExecutionException, InterruptedException { + ServicePathsBuilder servicePathsBuilder = new ServicePathsBuilder(); + servicePathsBuilder.setPathDescription(ServiceDeleteDataUtils + .createTransactionPathDescription(OpenRoadmInterfacesImpl.PP_TOKEN)); + servicePathsBuilder.setServiceAEnd(ServiceDeleteDataUtils.getServiceAEndBuild().build()) + .setServiceZEnd(ServiceDeleteDataUtils.getServiceZEndBuild().build()); + servicePathsBuilder.withKey(new ServicePathsKey("service 1")); + servicePathsBuilder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1") + .build()); + InstanceIdentifier servicePathsInstanceIdentifier = InstanceIdentifier.create( + ServicePathList.class).child(ServicePaths.class, new ServicePathsKey("service 1")); + TransactionUtils.writeTransaction( + this.deviceTransactionManager, + "node1", + LogicalDatastoreType.OPERATIONAL, + servicePathsInstanceIdentifier, + servicePathsBuilder.build()); + } +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java index 006a002bf..5b8b80d0e 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java @@ -5,15 +5,14 @@ * 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.renderer.provisiondevice; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import java.util.concurrent.Executors; +import java.util.ArrayList; +import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import org.opendaylight.controller.md.sal.binding.api.MountPoint; import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.transportpce.common.ResponseCodes; @@ -23,6 +22,7 @@ import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.mapping.PortMappingImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; import org.opendaylight.transportpce.renderer.NetworkModelWavelengthService; @@ -34,15 +34,22 @@ import org.opendaylight.transportpce.renderer.stub.OlmServiceStub; import org.opendaylight.transportpce.renderer.utils.MountPointUtils; import org.opendaylight.transportpce.renderer.utils.ServiceDataUtils; import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmGranularity; +import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestInput; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestOutput; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.get.pm.input.ResourceIdentifierBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.OlmService; - - +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.Measurements; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.MeasurementsBuilder; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; public class RendererServiceOperationsImplTest extends AbstractTest { - private static final int NUMBER_OF_THREADS = 4; private MountPointService mountPointService; private DeviceTransactionManager deviceTransactionManager; private RendererServiceOperationsImpl rendererServiceOperations; @@ -52,13 +59,13 @@ public class RendererServiceOperationsImplTest extends AbstractTest { private OpenRoadmInterfaceFactory openRoadmInterfaceFactory; private CrossConnect crossConnect; private OlmService olmService; - private ListeningExecutorService executor; private NetworkModelWavelengthService networkModelWavelengthService; private void setMountPoint(MountPoint mountPoint) { this.mountPointService = new MountPointServiceStub(mountPoint); this.deviceTransactionManager = new DeviceTransactionManagerImpl(this.mountPointService, 3000); this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(this.deviceTransactionManager); + this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces); this.portMapping = new PortMappingImpl(this.getDataBroker(), this.deviceTransactionManager, openRoadmInterfaces); this.openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping, @@ -69,14 +76,15 @@ public class RendererServiceOperationsImplTest extends AbstractTest { } @Before - public void setUp() { + public void setUp() throws OpenRoadmInterfaceException { setMountPoint(new MountPointStub(getDataBroker())); this.olmService = new OlmServiceStub(); - this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUMBER_OF_THREADS)); + this.olmService = Mockito.spy(this.olmService); this.networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(getDataBroker()); this.rendererServiceOperations = new RendererServiceOperationsImpl(this.deviceRenderer, this.olmService, getDataBroker(), this.networkModelWavelengthService); - + Mockito.doNothing().when(this.openRoadmInterfaces).postEquipmentState(Mockito.anyString(), + Mockito.anyString(), Mockito.anyBoolean()); } @@ -102,42 +110,48 @@ public class RendererServiceOperationsImplTest extends AbstractTest { } -// @Test -// public void serviceImplementationTerminationPointAsResourceNetwork() { -// -// ServiceImplementationRequestInput input = ServiceDataUtils -// .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); -// writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); -// ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); -// Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); -// -// } -// -// @Test -// public void serviceImplementationTerminationPointAsResourceClient() { -// ServiceImplementationRequestInput input = ServiceDataUtils -// .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.CLIENT_TOKEN); -// writePortMapping(input, OpenRoadmInterfacesImpl.CLIENT_TOKEN); -// ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); -// Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); -// } -// -// @Test -// public void serviceImplementationTerminationPointAsResourceNoMapping() { -// String[] interfaceTokens = { -// OpenRoadmInterfacesImpl.NETWORK_TOKEN, -// OpenRoadmInterfacesImpl.CLIENT_TOKEN, -// OpenRoadmInterfacesImpl.TTP_TOKEN, -// OpenRoadmInterfacesImpl.PP_TOKEN -// }; -// for (String tpToken : interfaceTokens) { -// ServiceImplementationRequestInput input = ServiceDataUtils -// .buildServiceImplementationRequestInputTerminationPointResource(tpToken); -// ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); -// Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, -// result.getConfigurationResponseCommon().getResponseCode()); -// } -// } + @Test + public void serviceImplementationTerminationPointAsResourceNetwork() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); + + } + + @Test + public void serviceImplementationTerminationPointAsResourceClient() { + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.CLIENT_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.CLIENT_TOKEN); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); + } + + @Test + public void serviceImplementationTerminationPointAsResourceNoMapping() { + String[] interfaceTokens = { + OpenRoadmInterfacesImpl.NETWORK_TOKEN, + OpenRoadmInterfacesImpl.CLIENT_TOKEN, + OpenRoadmInterfacesImpl.TTP_TOKEN, + OpenRoadmInterfacesImpl.PP_TOKEN + }; + + for (String tpToken : interfaceTokens) { + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(tpToken); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + if (tpToken.equals(OpenRoadmInterfacesImpl.CLIENT_TOKEN)) { + Assert.assertEquals(ResponseCodes.RESPONSE_OK, + result.getConfigurationResponseCommon().getResponseCode()); + } else { + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + result.getConfigurationResponseCommon().getResponseCode()); + } + } + } private void writePortMapping(ServiceImplementationRequestInput input, String tpToken) { MountPointUtils.writeMapping( @@ -145,6 +159,18 @@ public class RendererServiceOperationsImplTest extends AbstractTest { input.getServiceAEnd().getNodeId() + "-" + tpToken, this.deviceTransactionManager ); + MountPointUtils.writeMapping( + input.getServiceZEnd().getNodeId(), + input.getServiceZEnd().getNodeId() + "-" + + input.getServiceAEnd().getNodeId() + "-" + tpToken, + this.deviceTransactionManager + ); + MountPointUtils.writeMapping( + input.getServiceAEnd().getNodeId(), + input.getServiceAEnd().getNodeId() + "-" + + input.getServiceZEnd().getNodeId() + "-" + tpToken, + this.deviceTransactionManager + ); MountPointUtils.writeMapping( input.getServiceZEnd().getNodeId(), input.getServiceZEnd().getNodeId() + "-" + tpToken, @@ -152,21 +178,196 @@ public class RendererServiceOperationsImplTest extends AbstractTest { ); } - /*@Test - public void serviceImplementationLinkAsResource() { - ServiceImplementationRequestInput input = ServiceDataUtils.buildServiceImplementationRequestInputLinkResource(); + @Test + public void serviceImplementationRollbackAllNecessary() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + Mockito.doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService) + .servicePowerSetup(Mockito.any()); ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); - Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); - }*/ + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode()); + + } - /*@Test - public void serviceImplementtionInvalidResource() { + private GetPmInput createGetPmInput(String nodeId, String tp) { + GetPmInputBuilder getPmIpBldr = new GetPmInputBuilder(); + getPmIpBldr.setNodeId(nodeId); + getPmIpBldr.setGranularity(PmGranularity._15min); + ResourceIdentifierBuilder rsrcBldr = new ResourceIdentifierBuilder(); + rsrcBldr.setResourceName(tp + "-OTU"); + getPmIpBldr.setResourceIdentifier(rsrcBldr.build()); + getPmIpBldr.setResourceType(ResourceTypeEnum.Interface); + return getPmIpBldr.build(); + } + + @Test + public void serviceImplementationServiceInActive() { ServiceImplementationRequestInput input = ServiceDataUtils - .buildServiceImplementationRequestInputInvalidResource(); + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + Measurements measurements = new MeasurementsBuilder().setPmparameterName("FECUncorrectableBlocks") + .setPmparameterValue("1").build(); + List measurementsList = new ArrayList(); + measurementsList.add(measurements); + GetPmOutput getPmOutput = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(measurementsList).build(); + Mockito.doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService) + .getPm(Mockito.any()); ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode()); - }*/ + } + + @Test + public void serviceImplementationServiceInActive2() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + Measurements measurements = new MeasurementsBuilder().setPmparameterName("FECUncorrectableBlocks") + .setPmparameterValue("1").build(); + List measurementsList = new ArrayList(); + measurementsList.add(measurements); + GetPmOutput getPmOutput = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(measurementsList).build(); + GetPmOutput getPmOutput2 = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(new ArrayList<>()).build(); + + GetPmInput getPmInputZZ = createGetPmInput(input.getServiceZEnd().getNodeId(), + input.getServiceZEnd().getNodeId() + "-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmInput getPmInputAZ = createGetPmInput(input.getServiceAEnd().getNodeId(), + input.getServiceAEnd().getNodeId() + "-" + input.getServiceZEnd().getNodeId() + "-" + + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmInput getPmInputZA = createGetPmInput(input.getServiceZEnd().getNodeId(), + input.getServiceZEnd().getNodeId() + "-" + input.getServiceAEnd().getNodeId() + "-" + + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmInput getPmInputAA = createGetPmInput(input.getServiceAEnd().getNodeId(), + input.getServiceAEnd().getNodeId() + "-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputZZ))) + .thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture()); + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputAZ))) + .thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture()); + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputZA))) + .thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture()); + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputAA))) + .thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture()); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode()); + + } + + @Test + public void serviceImplementationServiceInActive3() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + Measurements measurements = new MeasurementsBuilder().setPmparameterName("FECUncorrectableBlocks") + .setPmparameterValue("1").build(); + List measurementsList = new ArrayList(); + measurementsList.add(measurements); + GetPmOutput getPmOutput = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(measurementsList).build(); + GetPmOutput getPmOutput2 = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(new ArrayList<>()).build(); + + GetPmInput getPmInputZZ = createGetPmInput(input.getServiceZEnd().getNodeId(), + input.getServiceZEnd().getNodeId() + "-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmInput getPmInputAZ = createGetPmInput(input.getServiceAEnd().getNodeId(), + input.getServiceAEnd().getNodeId() + "-" + input.getServiceZEnd().getNodeId() + "-" + + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + + GetPmInput getPmInputZA = createGetPmInput(input.getServiceZEnd().getNodeId(), + input.getServiceZEnd().getNodeId() + "-" + input.getServiceAEnd().getNodeId() + "-" + + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmInput getPmInputAA = createGetPmInput(input.getServiceAEnd().getNodeId(), + input.getServiceAEnd().getNodeId() + "-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN); + + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputZZ))) + .thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture()); + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputAZ))) + .thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture()); + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputZA))) + .thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture()); + Mockito.when(this.olmService.getPm(Mockito.eq(getPmInputAA))) + .thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture()); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode()); + + } + + @Test + public void serviceImplementationServiceActive() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmOutput getPmOutput = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(new ArrayList<>()).build(); + GetPmOutput getPmOutput1 = null; + Mockito.when(this.olmService.getPm(Mockito.any())).thenReturn(RpcResultBuilder.success(getPmOutput1) + .buildFuture()); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); + + } + + @Test + public void serviceImplementationServiceActive2() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + GetPmOutput getPmOutput = new GetPmOutputBuilder().setMeasurements(new ArrayList<>()).build(); + Mockito.when(this.olmService.getPm(Mockito.any())).thenReturn(RpcResultBuilder.success(getPmOutput) + .buildFuture()); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); + + } + + @Test + public void serviceImplementationServiceInActive4() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + Measurements measurements = new MeasurementsBuilder().setPmparameterName("preFECCorrectedErrors") + .setPmparameterValue("1").build(); + List measurementsList = new ArrayList(); + measurementsList.add(measurements); + GetPmOutput getPmOutput = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(measurementsList).build(); + + Mockito.doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService) + .getPm(Mockito.any()); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode()); + + } + + @Test + public void serviceImplementationServiceInActive5() { + + ServiceImplementationRequestInput input = ServiceDataUtils + .buildServiceImplementationRequestInputTerminationPointResource(OpenRoadmInterfacesImpl.NETWORK_TOKEN); + writePortMapping(input, OpenRoadmInterfacesImpl.NETWORK_TOKEN); + Measurements measurements = new MeasurementsBuilder().setPmparameterName("preFECCorrectedErrors") + .setPmparameterValue("112000000000d").build(); + List measurementsList = new ArrayList(); + measurementsList.add(measurements); + GetPmOutput getPmOutput = new GetPmOutputBuilder() + .setNodeId("node1").setMeasurements(measurementsList).build(); + + Mockito.doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService) + .getPm(Mockito.any()); + ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input); + Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode()); + + } } diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java index 70f71473c..91a3ca0e8 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java @@ -24,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev1 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -43,7 +44,8 @@ public class OlmServiceStub implements OlmService { @Override public ListenableFuture> servicePowerTurndown( ServicePowerTurndownInput input) { - return null; + return RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) + .setResult("Success").build()).buildFuture(); } @Override public ListenableFuture> calculateSpanlossBase( diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/MountPointUtils.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/MountPointUtils.java index 25e141597..5adc54bf9 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/MountPointUtils.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/MountPointUtils.java @@ -10,28 +10,17 @@ package org.opendaylight.transportpce.renderer.utils; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; -import java.util.Optional; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; import org.mockito.Mockito; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; -import org.opendaylight.transportpce.common.Timeouts; -import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.renderer.stub.MountPointStub; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailOutput; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailOutputBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceService; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.DestinationBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.SourceBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.get.connection.port.trail.output.Ports; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.Network; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.NodesKey; @@ -47,11 +36,11 @@ public final class MountPointUtils { public static MountPointStub getMountPoint(List ports, DataBroker dataBroker) { RpcConsumerRegistry rpcConsumerRegistry = Mockito.spy(RpcConsumerRegistry.class); OrgOpenroadmDeviceService orgOpenroadmDeviceService = Mockito.spy(OrgOpenroadmDeviceService.class); - GetConnectionPortTrailOutputBuilder getConnectionPortTrailOutputBuilder = - new GetConnectionPortTrailOutputBuilder(); - getConnectionPortTrailOutputBuilder.setPorts(ports); + GetConnectionPortTrailOutputBuilder getConnectionPortTrailOutputBldr + = new GetConnectionPortTrailOutputBuilder(); + getConnectionPortTrailOutputBldr.setPorts(ports); ListenableFuture> rpcResultFuture = - RpcResultBuilder.success(getConnectionPortTrailOutputBuilder.build()).buildFuture(); + RpcResultBuilder.success(getConnectionPortTrailOutputBldr.build()).buildFuture(); Mockito.doReturn(rpcResultFuture).when(orgOpenroadmDeviceService).getConnectionPortTrail(Mockito.any()); Mockito.doReturn(orgOpenroadmDeviceService).when(rpcConsumerRegistry).getRpcService(Mockito.any()); MountPointStub mountPoint = new MountPointStub(dataBroker); @@ -61,56 +50,21 @@ public final class MountPointUtils { public static boolean writeMapping(String nodeId, String logicalConnPoint, DeviceTransactionManager deviceTransactionManager) { + MappingBuilder mappingBuilder = new MappingBuilder(); + mappingBuilder.withKey(new MappingKey(logicalConnPoint)); + mappingBuilder.setLogicalConnectionPoint(logicalConnPoint); + mappingBuilder.setSupportingOms("OMS"); + mappingBuilder.setSupportingPort("8080"); + mappingBuilder.setSupportingCircuitPackName("circuit1"); + InstanceIdentifier portMappingIID = + InstanceIdentifier.builder(Network.class).child(Nodes.class, new NodesKey(nodeId)) + .child(Mapping.class, new MappingKey(logicalConnPoint)).build(); try { - MappingBuilder mappingBuilder = new MappingBuilder(); - mappingBuilder.withKey(new MappingKey(logicalConnPoint)); - mappingBuilder.setLogicalConnectionPoint(logicalConnPoint); - mappingBuilder.setSupportingOms("OMS"); - mappingBuilder.setSupportingPort("8080"); - mappingBuilder.setSupportingCircuitPackName("circuit1"); - Future> deviceTxFuture = - deviceTransactionManager.getDeviceTransaction(nodeId); - if (!deviceTxFuture.get().isPresent()) { - return false; - } - InstanceIdentifier portMappingIID = - InstanceIdentifier.builder(Network.class).child(Nodes.class, new NodesKey(nodeId)) - .child(Mapping.class, new MappingKey(logicalConnPoint)).build(); - DeviceTransaction deviceTx = deviceTxFuture.get().get(); - deviceTx.put(LogicalDatastoreType.CONFIGURATION, portMappingIID, mappingBuilder.build(), true); - deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get(); + return TransactionUtils.writeTransaction(deviceTransactionManager, + nodeId, LogicalDatastoreType.CONFIGURATION, portMappingIID, mappingBuilder.build()); } catch (ExecutionException | InterruptedException e) { return false; } - return true; - } - - public static boolean writeConnection(String nodeId, String srcTp, String destTp, Long waveNumber, - DeviceTransactionManager deviceTransactionManager) { - try { - RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(); - String connectionNumber = srcTp + "-" + destTp + "-" + waveNumber; - rdmConnBldr.setConnectionNumber(connectionNumber); - rdmConnBldr.setWavelengthNumber(waveNumber); - rdmConnBldr.setOpticalControlMode(OpticalControlMode.Off); - rdmConnBldr.setSource(new SourceBuilder().setSrcIf(srcTp + "-" + waveNumber.toString()).build()); - rdmConnBldr.setDestination(new DestinationBuilder().setDstIf(destTp + "-" + waveNumber.toString()).build()); - - Future> deviceTxFuture = - deviceTransactionManager.getDeviceTransaction(nodeId); - if (!deviceTxFuture.get().isPresent()) { - return false; - } - DeviceTransaction deviceTx = deviceTxFuture.get().get(); - InstanceIdentifier connectionID = - InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber)); - deviceTx.put(LogicalDatastoreType.CONFIGURATION, connectionID, rdmConnBldr.build(), true); - deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get(); - } catch (ExecutionException | InterruptedException e) { - return false; - } - return true; } private MountPointUtils() { diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java index 99c65da5d..b2980baea 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java @@ -8,6 +8,8 @@ package org.opendaylight.transportpce.renderer.utils; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceFormat; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.PortBuilder; @@ -50,6 +52,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer public final class ServiceDataUtils { + private ServiceDataUtils() { + + } + public static Nodes createNode(String nodeId, String srcTp, String dstTp) { return new NodesBuilder().setNodeId(nodeId).withKey(new NodesKey(nodeId)).setSrcTp(srcTp) .setDestTp(dstTp).build(); @@ -147,30 +153,43 @@ public final class ServiceDataUtils { public static PathDescription createPathDescriptionTerminationPointResource(String tpId) { List atoZList = new ArrayList(); TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(); - TerminationPoint terminationPoint = terminationPointBuilder - .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId("XPONDER-1-2") - .setTpId("XPONDER-1-2-" + tpId).build()).build(); - TerminationPoint terminationPoint2 = terminationPointBuilder - .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId("XPONDER-1-2") - .setTpId("XPONDER-1-2-" + tpId).build()).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(); - atoZList.add(atoZ); - atoZList.add(atoZ2); + List nodeIds = Arrays.asList("XPONDER-1-2", "XPONDER-2-3"); + Integer atozId = 1; + for (String nodeId : nodeIds) { + for (String otherNodeId : nodeIds) { + TerminationPoint terminationPoint = terminationPointBuilder + .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId(nodeId) + .setTpId((nodeId.equals(otherNodeId) ? "" : nodeId + "-") + otherNodeId + "-" + tpId).build()) + .build(); + AToZ atoZ = new AToZBuilder().setId(atozId.toString()) + .withKey(new AToZKey(atozId.toString())).setResource(new ResourceBuilder() + .setResource(terminationPoint).build()).build(); + atozId++; + atoZList.add(atoZ); + } + } AToZDirection atozDirection = new AToZDirectionBuilder() .setRate(20L) .setAToZWavelengthNumber(20L) .setAToZ(atoZList) .build(); + + Collections.reverse(nodeIds); List ztoAList = new ArrayList(); - 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(); - ztoAList.add(ztoA); - ztoAList.add(ztoA2); + Integer ztoaId = 1; + for (String nodeId : nodeIds) { + for (String otherNodeId : nodeIds) { + TerminationPoint terminationPoint = terminationPointBuilder + .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId(nodeId) + .setTpId((nodeId.equals(otherNodeId) ? "" : nodeId + "-") + otherNodeId + "-" + tpId).build()) + .build(); + ZToA ztoA = new ZToABuilder().setId(ztoaId.toString()) + .withKey(new ZToAKey(ztoaId.toString())).setResource(new ResourceBuilder() + .setResource(terminationPoint).build()).build(); + ztoaId++; + ztoAList.add(ztoA); + } + } ZToADirection ztoaDirection = new ZToADirectionBuilder() .setRate(20L) .setZToAWavelengthNumber(20L) @@ -238,7 +257,7 @@ public final class ServiceDataUtils { public static ServiceZEndBuilder getServiceZEndBuild() { return new ServiceZEndBuilder() - .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2") + .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-2-3") .setTxDirection( new TxDirectionBuilder() .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name") @@ -253,7 +272,4 @@ public final class ServiceDataUtils { .build()); } - private ServiceDataUtils() { - } - } diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDeleteDataUtils.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDeleteDataUtils.java new file mode 100644 index 000000000..a5a5a7421 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDeleteDataUtils.java @@ -0,0 +1,118 @@ +/* + * 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.renderer.utils; + +import java.util.ArrayList; +import java.util.List; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceFormat; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.PortBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZ; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToA; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToABuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToAKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.ResourceBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.TerminationPoint; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.TerminationPointBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.termination.point.TerminationPointIdentifierBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.path.PathDescription; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.path.PathDescriptionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.path.ServiceAEndBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.path.ServiceZEndBuilder; + +public final class ServiceDeleteDataUtils { + + private ServiceDeleteDataUtils() { + + } + + public static PathDescription createTransactionPathDescription(String tpId) { + List atoZList = new ArrayList(); + TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(); + TerminationPoint terminationPoint = terminationPointBuilder + .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId("node2") + .setTpId("node2-" + tpId).build()).build(); + TerminationPoint terminationPoint2 = terminationPointBuilder + .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId("node1") + .setTpId("node1-" + tpId).build()).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(); + atoZList.add(atoZ); + atoZList.add(atoZ2); + AToZDirection atozDirection = new AToZDirectionBuilder() + .setRate(20L) + .setAToZWavelengthNumber(20L) + .setAToZ(atoZList) + .setModulationFormat("OC") + .build(); + List ztoAList = new ArrayList(); + 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(); + ztoAList.add(ztoA); + ztoAList.add(ztoA2); + ZToADirection ztoaDirection = new ZToADirectionBuilder() + .setRate(20L) + .setZToAWavelengthNumber(20L) + .setZToA(ztoAList) + .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((long) 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((long) 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/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceImplementationDataUtils.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceImplementationDataUtils.java new file mode 100644 index 000000000..8995a6335 --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceImplementationDataUtils.java @@ -0,0 +1,260 @@ +/* + * 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.renderer.utils; + +import java.util.ArrayList; +import java.util.List; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceFormat; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.PortBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZ; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToA; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToABuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToAKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.ResourceBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.Link; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.LinkBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.NodeBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.TerminationPoint; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.TerminationPointBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.link.LinkIdentifierBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.node.NodeIdentifierBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.termination.point.TerminationPointIdentifierBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.handler.header.ServiceHandlerHeaderBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestInput; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestInputBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.implementation.request.input.PathDescription; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.implementation.request.input.PathDescriptionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.implementation.request.input.ServiceAEndBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.implementation.request.input.ServiceZEndBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.Nodes; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.NodesBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.NodesKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererRollbackInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInputBuilder; + + +public final class ServiceImplementationDataUtils { + + private ServiceImplementationDataUtils() { + + } + + public static Nodes createNode(String nodeId, String srcTp, String dstTp) { + return new NodesBuilder().setNodeId(nodeId).withKey(new NodesKey(nodeId)).setSrcTp(srcTp) + .setDestTp(dstTp).build(); + } + + public static ServicePathInput buildServicePathInputs(List nodes) { + ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder(); + servicePathInputBuilder.setNodes(nodes); + servicePathInputBuilder.setServiceName("Service 1").setWaveNumber(20L); + return servicePathInputBuilder.build(); + } + + public static ServicePathInput buildServicePathInputs() { + ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder(); + List nodes = new ArrayList<>(); + nodes.add(ServiceImplementationDataUtils.createNode("node1", "src", "dst")); + servicePathInputBuilder.setNodes(nodes); + servicePathInputBuilder.setServiceName("Service 1").setWaveNumber(20L); + return servicePathInputBuilder.build(); + } + + public static RendererRollbackInput buildRendererRollbackInput() { + RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder(); + rendererRollbackInputBuilder.setNodeInterface(new ArrayList<>()); + return rendererRollbackInputBuilder.build(); + } + + public static ServiceImplementationRequestInput buildServiceImplementationRequestInputTerminationPointResource( + String tpId) { + ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder() + .setServiceName("service 1").setPathDescription(createPathDescriptionTerminationPointResource(tpId)) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build()) + .setServiceAEnd(getServiceAEndBuild().build()) + .setServiceZEnd(getServiceZEndBuild().build()); + return builder.build(); + } + + public static ServiceImplementationRequestInput buildServiceImplementationRequestInputInvalidResource() { + ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder() + .setServiceName("service 1").setPathDescription(createPathDescriptionInvalidResource()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build()) + .setServiceAEnd(getServiceAEndBuild().build()) + .setServiceZEnd(getServiceZEndBuild().build()); + return builder.build(); + } + + public static ServiceImplementationRequestInput buildServiceImplementationRequestInputLinkResource() { + ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder() + .setServiceName("service 1").setPathDescription(createPathDescriptionLinkResource()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build()) + .setServiceAEnd(getServiceAEndBuild().build()) + .setServiceZEnd(getServiceZEndBuild().build()); + return builder.build(); + } + + private static PathDescription createPathDescriptionInvalidResource() { + List atoZList = new ArrayList(); + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource + .resource.resource.NodeBuilder nodesBuilder = new NodeBuilder(); + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource + .resource.resource.Node node1 = nodesBuilder.setNodeIdentifier(new NodeIdentifierBuilder() + .setNodeId("XPONDER-1-2").build()).build(); + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource + .resource.resource.Node node2 = nodesBuilder.setNodeIdentifier(new NodeIdentifierBuilder() + .setNodeId("XPONDER-1-2").build()).build(); + AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder() + .setResource(node1).build()).build(); + AToZ atoZ2 = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder() + .setResource(node2).build()).build(); + atoZList.add(atoZ); + atoZList.add(atoZ2); + AToZDirection atozDirection = new AToZDirectionBuilder() + .setRate(20L) + .setAToZWavelengthNumber(20L) + .setAToZ(atoZList) + .build(); + List ztoAList = new ArrayList(); + ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder() + .setResource(node1).build()).build(); + ZToA ztoA2 = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder() + .setResource(node2).build()).build(); + ztoAList.add(ztoA); + ztoAList.add(ztoA2); + ZToADirection ztoaDirection = new ZToADirectionBuilder() + .setRate(20L) + .setZToAWavelengthNumber(20L) + .setZToA(ztoAList) + .build(); + PathDescriptionBuilder builder = new PathDescriptionBuilder() + .setAToZDirection(atozDirection) + .setZToADirection(ztoaDirection); + return builder.build(); + } + + public static PathDescription createPathDescriptionTerminationPointResource(String tpId) { + List atoZList = new ArrayList(); + TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(); + TerminationPoint terminationPoint = terminationPointBuilder + .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId("XPONDER-1-2") + .setTpId("XPONDER-1-2-" + tpId).build()).build(); + TerminationPoint terminationPoint2 = terminationPointBuilder + .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder().setNodeId("XPONDER-1-2") + .setTpId("XPONDER-1-2-" + tpId).build()).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(); + atoZList.add(atoZ); + atoZList.add(atoZ2); + AToZDirection atozDirection = new AToZDirectionBuilder() + .setRate(20L) + .setAToZWavelengthNumber(20L) + .setAToZ(atoZList) + .build(); + List ztoAList = new ArrayList(); + 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(); + ztoAList.add(ztoA); + ztoAList.add(ztoA2); + ZToADirection ztoaDirection = new ZToADirectionBuilder() + .setRate(20L) + .setZToAWavelengthNumber(20L) + .setZToA(ztoAList) + .build(); + PathDescriptionBuilder builder = new PathDescriptionBuilder() + .setAToZDirection(atozDirection) + .setZToADirection(ztoaDirection); + return builder.build(); + } + + private static PathDescription createPathDescriptionLinkResource() { + List atoZList = new ArrayList(); + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource + .resource.resource.NodeBuilder nodesBuilder = new NodeBuilder(); + Link link1 = new LinkBuilder().setLinkIdentifier(new LinkIdentifierBuilder().setLinkId("link 1").build()) + .build(); + Link link2 = new LinkBuilder().setLinkIdentifier(new LinkIdentifierBuilder().setLinkId("link 2").build()) + .build(); + AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder() + .setResource(link1).build()).build(); + AToZ atoZ2 = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder() + .setResource(link2).build()).build(); + atoZList.add(atoZ); + atoZList.add(atoZ2); + AToZDirection atozDirection = new AToZDirectionBuilder() + .setRate(20L) + .setAToZWavelengthNumber(20L) + .setAToZ(atoZList) + .build(); + List ztoAList = new ArrayList(); + ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder() + .setResource(link1).build()).build(); + ZToA ztoA2 = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder() + .setResource(link2).build()).build(); + ztoAList.add(ztoA); + ztoAList.add(ztoA2); + ZToADirection ztoaDirection = new ZToADirectionBuilder() + .setRate(20L) + .setZToAWavelengthNumber(20L) + .setZToA(ztoAList) + .build(); + PathDescriptionBuilder builder = new PathDescriptionBuilder() + .setAToZDirection(atozDirection) + .setZToADirection(ztoaDirection); + return builder.build(); + } + + public static ServiceAEndBuilder getServiceAEndBuild() { + return new ServiceAEndBuilder() + .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 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((long) 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()); + } + +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/TransactionUtils.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/TransactionUtils.java new file mode 100644 index 000000000..49ff45b2c --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/TransactionUtils.java @@ -0,0 +1,63 @@ +/* + * 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.renderer.utils; + +import java.util.Optional; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.transportpce.common.Timeouts; +import org.opendaylight.transportpce.common.device.DeviceTransaction; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public final class TransactionUtils { + + private TransactionUtils() { + + } + + public static boolean writeTransaction(DeviceTransactionManager deviceTransactionManager, + String nodeId, + LogicalDatastoreType logicalDatastoreType, + InstanceIdentifier instanceIdentifier, + DataObject object) + throws ExecutionException, InterruptedException { + Future> deviceTxFuture = + deviceTransactionManager.getDeviceTransaction(nodeId); + if (!deviceTxFuture.get().isPresent()) { + return false; + } + DeviceTransaction deviceTx = deviceTxFuture.get().get(); + deviceTx.put(logicalDatastoreType, instanceIdentifier, object, true); + deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get(); + return true; + } + + public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager, + String nodeId, + LogicalDatastoreType logicalDatastoreType, + InstanceIdentifier instanceIdentifier) + throws ExecutionException, InterruptedException { + Future> deviceTxFuture = + deviceTransactionManager.getDeviceTransaction(nodeId); + if (!deviceTxFuture.get().isPresent()) { + return null; + } + DeviceTransaction deviceTx = deviceTxFuture.get().get(); + com.google.common.base.Optional readOpt + = deviceTx.read(logicalDatastoreType, instanceIdentifier).get(); + if (!readOpt.isPresent()) { + return null; + } + return readOpt.get(); + } + +} diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/WaveLengthServiceUtils.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/WaveLengthServiceUtils.java new file mode 100644 index 000000000..d02fc107b --- /dev/null +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/WaveLengthServiceUtils.java @@ -0,0 +1,90 @@ +/* + * 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.renderer.utils; + +import java.util.concurrent.ExecutionException; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.TpId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPointKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; + +public final class WaveLengthServiceUtils { + + private WaveLengthServiceUtils() { + + } + + private static InstanceIdentifierBuilder createTerminationPoint1IIDBuilder(String nodeId, + String tpId) { + return InstanceIdentifier + .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network + .Node.class, new NodeKey(new NodeId(nodeId))).augmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608 + .network.node.TerminationPoint.class, + new TerminationPointKey(new TpId(tpId))).augmentation(TerminationPoint1.class); + } + + public static void putTerminationPoint1ToDatastore(String nodeId, String tpId, TerminationPoint1 terminationPoint1, + DeviceTransactionManager deviceTransactionManager) + throws ExecutionException, InterruptedException { + TerminationPoint1Builder terminationPoint1Builder = new TerminationPoint1Builder(); + TransactionUtils + .writeTransaction(deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION, + createTerminationPoint1IIDBuilder(nodeId, tpId).build(), terminationPoint1); + } + + public static TerminationPoint1 getTerminationPoint1FromDatastore(String nodeId, String tpId, + DeviceTransactionManager deviceTransactionManager) + throws ExecutionException, InterruptedException { + InstanceIdentifier tpIID = createTerminationPoint1IIDBuilder(nodeId, tpId).build(); + return (TerminationPoint1) TransactionUtils + .readTransaction(deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION, tpIID); + } + + private static InstanceIdentifier createNode1IID(String nodeId) { + return InstanceIdentifier + .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608 + .network.Node.class, new NodeKey(new NodeId(nodeId))) + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929 + .Node1.class) + .build(); + } + + public static void putNode1ToDatastore(String nodeId, Node1 node1, + DeviceTransactionManager deviceTransactionManager) + throws ExecutionException, InterruptedException { + InstanceIdentifier + nodeIID = createNode1IID(nodeId); + TransactionUtils + .writeTransaction(deviceTransactionManager, nodeId, + LogicalDatastoreType.CONFIGURATION, nodeIID, node1); + } + + public static Node1 getNode1FromDatastore(String nodeId, DeviceTransactionManager deviceTransactionManager) + throws ExecutionException, InterruptedException { + InstanceIdentifier + nodeIID = createNode1IID(nodeId); + return (Node1) TransactionUtils + .readTransaction(deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION, nodeIID); + } +} -- 2.36.6