Update unit testing - Renderer 54/74654/5
authordoha.khaled <dkhaled.ext@orange.com>
Wed, 1 Aug 2018 11:50:13 +0000 (13:50 +0200)
committerMartial COULIBALY <martial.coulibaly@gfi.fr>
Fri, 3 Aug 2018 23:49:39 +0000 (01:49 +0200)
JIRA: TRNSPRTPCE-11
Change-Id: I42f760cdd39ed0a7585965a506ba05070b370529
Signed-off-by: doha.khaled <dkhaled.ext@orange.com>
19 files changed:
deploy-site.iml [deleted file]
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceFreeTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/NetworkModelWaveLengthServiceUseTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/NodeIdPairTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplDeleteTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplRollbackTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplSetupTest.java [moved from renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplTest.java with 51% similarity]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/MountPointUtils.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDeleteDataUtils.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceImplementationDataUtils.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/TransactionUtils.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/WaveLengthServiceUtils.java [new file with mode: 0644]

diff --git a/deploy-site.iml b/deploy-site.iml
deleted file mode 100644 (file)
index 7f43ada..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4">
-  <component name="MavenCustomPomFilePath">
-    <option name="mavenPomFileUrl" value="file://$MODULE_DIR$/deploy-site.xml" />
-  </component>
-</module>
\ No newline at end of file
index 40be47d71e636488585dae29defeb3e0d8423477..734c6e5818dcba4b648e8d376b2e1eb336766e3f 100644 (file)
@@ -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());
index e247ba11901dad355285725a6892b334bfda81b2..f2f47f415954db8635551c10827e655d2c54ab11 100644 (file)
@@ -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<Void> submit = writeTransaction.submit();
index 636c9fe32f3c4b14d81b6ae4c9185172f39c5dac..a5060820a218b91132494a4997336300234e93cf 100644 (file)
@@ -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 (file)
index 0000000..ce7aa0f
--- /dev/null
@@ -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<Object[]> 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 (file)
index 0000000..3f0c1f3
--- /dev/null
@@ -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<Object[]> 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 (file)
index 0000000..41d07df
--- /dev/null
@@ -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 (file)
index 0000000..46365bd
--- /dev/null
@@ -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> 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> 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> 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> 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<RoadmConnections> xciid = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+                .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber));
+        TransactionUtils.writeTransaction(this.deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION,
+            xciid, roadmConnectionsBuilder.build());
+
+        List<Nodes> 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 (file)
index 0000000..d1a2db3
--- /dev/null
@@ -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<String> connectionID = new ArrayList<>();
+        connectionID.add("node1-PP");
+        nodeInterfaceBuilder.setConnectionId(connectionID);
+        List<NodeInterface> 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<String> connectionID = new ArrayList<>();
+        connectionID.add("src-PP-dest-PP-20");
+        nodeInterfaceBuilder.setConnectionId(connectionID);
+        List<NodeInterface> 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<String> oduInterfacesId = new ArrayList<>();
+        oduInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-ODU");
+        nodeInterfaceBuilder.setOduInterfaceId(oduInterfacesId);
+        List<String> otuInterfacesId = new ArrayList<>();
+        otuInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-OTU");
+        nodeInterfaceBuilder.setOtuInterfaceId(otuInterfacesId);
+        List<String> ochInterfacesId = new ArrayList<>();
+        ochInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-20");
+        nodeInterfaceBuilder.setOchInterfaceId(ochInterfacesId);
+        List<NodeInterface> 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<String> ethInterfacesId = new ArrayList<>();
+        ethInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.CLIENT_TOKEN + "-ETHERNET");
+        nodeInterfaceBuilder.setEthInterfaceId(ethInterfacesId);
+        List<NodeInterface> 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));
+    }
+}
@@ -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> 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> 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> 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<String> connectionID = new ArrayList<>();
-        connectionID.add("node1-PP");
-        nodeInterfaceBuilder.setConnectionId(connectionID);
-        List<NodeInterface> 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> 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 (file)
index 0000000..b64b1bc
--- /dev/null
@@ -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<ServicePaths> servicePathsInstanceIdentifier = InstanceIdentifier.create(
+            ServicePathList.class).child(ServicePaths.class, new ServicePathsKey("service 1"));
+        TransactionUtils.writeTransaction(
+                this.deviceTransactionManager,
+                "node1",
+                LogicalDatastoreType.OPERATIONAL,
+                servicePathsInstanceIdentifier,
+                servicePathsBuilder.build());
+    }
+}
index 006a002bf1023e8d4308ccc7c675b6a3b2b9e869..5b8b80d0edb1dad74becc6366a77270c450f882e 100644 (file)
@@ -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<Measurements> measurementsList = new ArrayList<Measurements>();
+        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<Measurements> measurementsList = new ArrayList<Measurements>();
+        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<Measurements> measurementsList = new ArrayList<Measurements>();
+        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<Measurements> measurementsList = new ArrayList<Measurements>();
+        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<Measurements> measurementsList = new ArrayList<Measurements>();
+        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());
+
+    }
 }
index 70f71473c826003e751aac72986bd4b4c29c0aa5..91a3ca0e841349d580ab6c62ded15e888a2ee44a 100644 (file)
@@ -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<RpcResult<ServicePowerTurndownOutput>> servicePowerTurndown(
         ServicePowerTurndownInput input) {
-        return null;
+        return RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
+                .setResult("Success").build()).buildFuture();
     }
 
     @Override public ListenableFuture<RpcResult<CalculateSpanlossBaseOutput>> calculateSpanlossBase(
index 25e141597c15644e24e2834ed1845a9f24471cf6..5adc54bf9e48ff0fce6eed1f0ca0723cd7158c01 100644 (file)
@@ -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> 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<RpcResult<GetConnectionPortTrailOutput>> 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<Mapping> 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<Optional<DeviceTransaction>> deviceTxFuture =
-                    deviceTransactionManager.getDeviceTransaction(nodeId);
-            if (!deviceTxFuture.get().isPresent()) {
-                return false;
-            }
-            InstanceIdentifier<Mapping> 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<Optional<DeviceTransaction>> deviceTxFuture =
-                    deviceTransactionManager.getDeviceTransaction(nodeId);
-            if (!deviceTxFuture.get().isPresent()) {
-                return false;
-            }
-            DeviceTransaction deviceTx = deviceTxFuture.get().get();
-            InstanceIdentifier<RoadmConnections> 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() {
index 99c65da5ddddeb2027e138c33c6850a3c94b103a..b2980baeac62d9e5918582ec0cc9fac3578a069f 100644 (file)
@@ -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<AToZ> atoZList = new ArrayList<AToZ>();
         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<String> 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<ZToA> ztoAList = new ArrayList<ZToA>();
-        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 (file)
index 0000000..a5a5a74
--- /dev/null
@@ -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<AToZ> atoZList = new ArrayList<AToZ>();
+        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<ZToA> ztoAList = new ArrayList<ZToA>();
+        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 (file)
index 0000000..8995a63
--- /dev/null
@@ -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> 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> 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<AToZ> atoZList = new ArrayList<AToZ>();
+        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<ZToA> ztoAList = new ArrayList<ZToA>();
+        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<AToZ> atoZList = new ArrayList<AToZ>();
+        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<ZToA> ztoAList = new ArrayList<ZToA>();
+        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<AToZ> atoZList = new ArrayList<AToZ>();
+        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<ZToA> ztoAList = new ArrayList<ZToA>();
+        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 (file)
index 0000000..49ff45b
--- /dev/null
@@ -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<Optional<DeviceTransaction>> 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<? extends DataObject> instanceIdentifier)
+            throws ExecutionException, InterruptedException {
+        Future<Optional<DeviceTransaction>> deviceTxFuture =
+                deviceTransactionManager.getDeviceTransaction(nodeId);
+        if (!deviceTxFuture.get().isPresent()) {
+            return null;
+        }
+        DeviceTransaction deviceTx = deviceTxFuture.get().get();
+        com.google.common.base.Optional<? extends DataObject> 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 (file)
index 0000000..d02fc10
--- /dev/null
@@ -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<TerminationPoint1> 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<TerminationPoint1> tpIID = createTerminationPoint1IIDBuilder(nodeId, tpId).build();
+        return (TerminationPoint1) TransactionUtils
+            .readTransaction(deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION, tpIID);
+    }
+
+    private static InstanceIdentifier<Node1> 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<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1>
+            nodeIID = createNode1IID(nodeId);
+        TransactionUtils
+            .writeTransaction(deviceTransactionManager, nodeId,
+                LogicalDatastoreType.CONFIGURATION, nodeIID, node1);
+    }
+
+    public static Node1 getNode1FromDatastore(String nodeId, DeviceTransactionManager deviceTransactionManager)
+        throws ExecutionException, InterruptedException {
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1>
+            nodeIID = createNode1IID(nodeId);
+        return (Node1) TransactionUtils
+            .readTransaction(deviceTransactionManager, nodeId, LogicalDatastoreType.CONFIGURATION, nodeIID);
+    }
+}