ios-xe - check existence of element before removing it 47/41947/3
authorVladimir Lavor <vlavor@cisco.com>
Mon, 18 Jul 2016 07:03:30 +0000 (09:03 +0200)
committerVladimir Lavor <vlavor@cisco.com>
Mon, 18 Jul 2016 13:57:08 +0000 (13:57 +0000)
Change-Id: I582b30424582909c50cad8250885fdba30438eb8
Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtil.java
renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtilTest.java

index a3c7056844564add63dc4164cf3800a5ca75a5c0..f2cd572594c992bf8bdbce4cd6efd969e9bd59ea 100644 (file)
@@ -51,33 +51,24 @@ class PolicyWriterUtil {
     private static final Logger LOG = LoggerFactory.getLogger(PolicyWriterUtil.class);
 
     static boolean writeClassMaps(final Set<ClassMap> classMapEntries, final NodeId nodeId, final DataBroker mountpoint) {
+        boolean result = true;
         if (classMapEntries == null || classMapEntries.isEmpty()) {
             return true;
         }
         for (ClassMap entry : classMapEntries) {
-            final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                    NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-            if (!optionalWriteTransaction.isPresent()) {
-                LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-                return false;
-            }
-            final WriteTransaction writeTransaction = optionalWriteTransaction.get();
             final InstanceIdentifier<ClassMap> classMapIid = classMapInstanceIdentifier(entry);
-            writeMergeTransaction(writeTransaction, classMapIid, entry);
+            netconfWrite(mountpoint, classMapIid, entry);
             // Check
-            final java.util.Optional<ReadOnlyTransaction> optionalTransaction =
-                    NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint);
-            if (!optionalTransaction.isPresent()) {
-                LOG.warn("Failed to create read-only transaction, mountpoint: {}", mountpoint);
-                return false;
+            final java.util.Optional<ClassMap> checkCreated = java.util.Optional.ofNullable(netconfRead(mountpoint, classMapIid));
+            if (checkCreated.isPresent()) {
+                LOG.trace("Created class-map {} on node {}", entry.getName(), nodeId.getValue());
             }
-            final ReadOnlyTransaction readTransaction = optionalTransaction.get();
-            if (checkWritten(readTransaction, classMapIid) == null) {
-                return false;
+            else {
+                LOG.warn("Failed to create class-map {} on node {}", entry.getName(), nodeId.getValue());
+                result = false;
             }
-            LOG.trace("Created class-map {} on node {}", entry.getName(), nodeId.getValue());
         }
-        return true;
+        return result;
     }
 
     static boolean removeClassMaps(final Set<ClassMap> classMapEntries, final NodeId nodeId, final DataBroker mountpoint) {
@@ -86,50 +77,29 @@ class PolicyWriterUtil {
             return true;
         }
         for (ClassMap entry : classMapEntries) {
-            final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                    NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-            if (!optionalWriteTransaction.isPresent()) {
-                LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-                return false;
-            }
-            final WriteTransaction writeTransaction = optionalWriteTransaction.get();
             final InstanceIdentifier<ClassMap> classMapIid = classMapInstanceIdentifier(entry);
-            deleteTransaction(writeTransaction, classMapIid);
+            netconfDeleteIfPresent(mountpoint, classMapIid);
             // Check
-            final java.util.Optional<ReadOnlyTransaction> optionalReadTransaction =
-                    NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint);
-            if (!optionalReadTransaction.isPresent()) {
-                LOG.warn("Failed to create read-only transaction, mountpoint: {}", mountpoint);
-                return false;
+            final java.util.Optional<ClassMap> checkCreated = java.util.Optional.ofNullable(netconfRead(mountpoint, classMapIid));
+            if (checkCreated.isPresent()) {
+                LOG.warn("Failed to remove class-map {} on node {}", entry.getName(), nodeId.getValue());
+                result = false;
+            }
+            else {
+                LOG.trace("Class-map {} removed from node {}", entry.getName(), nodeId.getValue());
             }
-            final ReadOnlyTransaction readTransaction = optionalReadTransaction.get();
-            result = checkRemoved(readTransaction, classMapIid);
-            LOG.trace("Class-map {} removed from node {}", entry.getName(), nodeId.getValue());
         }
         return result;
     }
 
     static boolean writePolicyMap(final String policyMapName, final Set<Class> policyMapEntries, NodeId nodeId,
                                   final DataBroker mountpoint) {
-        final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-        if (!optionalWriteTransaction.isPresent()) {
-            LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-            return false;
-        }
-        final WriteTransaction writeTransaction = optionalWriteTransaction.get();
         final PolicyMap policyMap = PolicyManagerUtil.createPolicyMap(policyMapName, policyMapEntries);
         final InstanceIdentifier<PolicyMap> policyMapIid = policyMapInstanceIdentifier(policyMapName);
-        writeMergeTransaction(writeTransaction, policyMapIid, policyMap);
+        netconfWrite(mountpoint, policyMapIid, policyMap);
         // Check
-        final java.util.Optional<ReadOnlyTransaction> optionalReadTransaction =
-                NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint);
-        if (!optionalReadTransaction.isPresent()) {
-            LOG.warn("Failed to create read-only transaction, mountpoint: {}", mountpoint);
-            return false;
-        }
-        final ReadOnlyTransaction readTransaction = optionalReadTransaction.get();
-        if (checkWritten(readTransaction, policyMapIid) == null) {
+        if (netconfRead(mountpoint, policyMapIid) == null) {
+            LOG.warn("Failed to create policy-map {} on node {}", policyMap.getName(), nodeId.getValue());
             return false;
         }
         LOG.trace("Created policy-map {} on node {}", policyMap.getName(), nodeId.getValue());
@@ -141,37 +111,34 @@ class PolicyWriterUtil {
         if (policyMapEntries == null || policyMapEntries.isEmpty()) {
             return true;
         }
+        boolean result = true;
         for (Class entry : policyMapEntries) {
-            final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                    NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-            if (!optionalWriteTransaction.isPresent()) {
-                LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-                return false;
-            }
-            final WriteTransaction writeTransaction = optionalWriteTransaction.get();
             final InstanceIdentifier policyMapEntryIid = policyMapEntryInstanceIdentifier(policyMapName, entry.getName());
-            if (deleteTransaction(writeTransaction, policyMapEntryIid)) {
-                LOG.trace("Policy map entry {} removed from node {}", entry.getName(), nodeId.getValue());
+            if (netconfDeleteIfPresent(mountpoint, policyMapEntryIid)) {
+                LOG.trace("Policy-map entry {} removed from node {}", entry.getName(), nodeId.getValue());
+            }
+            else {
+                LOG.warn("Failed to remove policy-map entry {} from node {}", entry.getName(), nodeId.getValue());
+                result = false;
             }
         }
-        return true;
+        return result;
     }
 
     static boolean writeInterface(final String policyMapName, final String interfaceName, final NodeId nodeId,
                                   final DataBroker mountpoint) {
-        final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-        if (!optionalWriteTransaction.isPresent()) {
-            LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-            return false;
-        }
-        final WriteTransaction writeTransaction = optionalWriteTransaction.get();
         final ServicePolicy servicePolicy = PolicyManagerUtil.createServicePolicy(policyMapName, Direction.Input);
         final InstanceIdentifier<ServicePolicy> servicePolicyIid = interfaceInstanceIdentifier(interfaceName);
-        writeMergeTransaction(writeTransaction, servicePolicyIid, servicePolicy);
-        LOG.trace("Service-policy interface {}, bound to policy-map {} created on  node {}",
-                interfaceName, policyMapName, nodeId.getValue());
-        return true;
+        if (netconfWrite(mountpoint, servicePolicyIid, servicePolicy)) {
+            LOG.trace("Service-policy interface {}, bound to policy-map {} created on  node {}",
+                    interfaceName, policyMapName, nodeId.getValue());
+            return true;
+        }
+        else {
+            LOG.warn("Failed to write service-policy interface {} to policy-map {} on  node {}",
+                    interfaceName, policyMapName, nodeId.getValue());
+            return false;
+        }
     }
 
     static boolean writeRemote(final Set<ServiceFfName> remoteForwarders, final NodeId nodeId,
@@ -179,19 +146,18 @@ class PolicyWriterUtil {
         if (remoteForwarders == null || remoteForwarders.isEmpty()) {
             return true;
         }
+        boolean result = true;
         for (ServiceFfName forwarder : remoteForwarders) {
-            final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                    NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-            if (!optionalWriteTransaction.isPresent()) {
-                LOG.warn("Failed to create transaction, mountpoint: {}", mountpoint);
-                return false;
-            }
-            final WriteTransaction writeTransaction = optionalWriteTransaction.get();
             final InstanceIdentifier<ServiceFfName> forwarderIid = remoteSffInstanceIdentifier(forwarder);
-            writeMergeTransaction(writeTransaction, forwarderIid, forwarder);
-            LOG.trace("Remote forwarder {} created on node {}", forwarder.getName(), nodeId.getValue());
+            if (netconfWrite(mountpoint, forwarderIid, forwarder)) {
+                LOG.trace("Remote forwarder {} created on node {}", forwarder.getName(), nodeId.getValue());
+            }
+            else {
+                LOG.warn("Failed to create remote forwarder {} on node {}", forwarder.getName(), nodeId.getValue());
+                result = false;
+            }
         }
-        return true;
+        return result;
     }
 
     static boolean removeRemote(final Set<ServiceFfName> remoteForwarders, final NodeId nodeId,
@@ -199,38 +165,36 @@ class PolicyWriterUtil {
         if (remoteForwarders == null || remoteForwarders.isEmpty()) {
             return true;
         }
+        boolean result = true;
         for (ServiceFfName forwarder : remoteForwarders) {
-            final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                    NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-            if (!optionalWriteTransaction.isPresent()) {
-                LOG.warn("Failed to create transaction, mountpoint: {}", mountpoint);
-                return false;
-            }
-            final WriteTransaction writeTransaction = optionalWriteTransaction.get();
             final InstanceIdentifier<ServiceFfName> forwarderIid = remoteSffInstanceIdentifier(forwarder);
-            deleteTransaction(writeTransaction, forwarderIid);
-            LOG.trace("Remote forwarder {} removed from node {}", forwarder.getName(), nodeId.getValue());
+            if (netconfDeleteIfPresent(mountpoint, forwarderIid)) {
+                LOG.trace("Remote forwarder {} removed from node {}", forwarder.getName(), nodeId.getValue());
+            }
+            else {
+                LOG.warn("Failed to remove forwarder {} from node {}", forwarder.getName(), nodeId.getValue());
+                result = false;
+            }
         }
-        return true;
+        return result;
     }
 
     static boolean writeServicePaths(final Set<ServiceChain> serviceChains, final NodeId nodeId,
                                      final DataBroker mountpoint) {
+        boolean result = true;
         for (org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChain serviceChain : serviceChains) {
             for (ServicePath entry : serviceChain.getServicePath()) {
-                final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                        NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-                if (!optionalWriteTransaction.isPresent()) {
-                    LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-                    return false;
-                }
-                final WriteTransaction writeTransaction = optionalWriteTransaction.get();
                 final InstanceIdentifier<ServicePath> servicePathIid = servicePathInstanceIdentifier(entry.getKey());
-                writeMergeTransaction(writeTransaction, servicePathIid, entry);
-                LOG.trace("Service path with ID: {} created on node {}", entry.getServicePathId(), nodeId.getValue());
+                if (netconfWrite(mountpoint, servicePathIid, entry)) {
+                    LOG.trace("Service-path with ID: {} created on node {}", entry.getServicePathId(), nodeId.getValue());
+                }
+                else {
+                    LOG.warn("Failed to create service-path with ID: {} on node {}", entry.getServicePathId(), nodeId.getValue());
+                    result = false;
+                }
             }
         }
-        return true;
+        return result;
     }
 
     static boolean removeServicePaths(final Set<ServiceChain> serviceChains, final NodeId nodeId,
@@ -238,27 +202,26 @@ class PolicyWriterUtil {
         if (serviceChains == null || serviceChains.isEmpty()) {
             return true;
         }
+        boolean result = true;
         for (ServiceChain chain : serviceChains) {
             List<ServicePath> servicePaths = chain.getServicePath();
             if (servicePaths == null || servicePaths.isEmpty()) {
                 continue;
             }
             for (ServicePath servicePath : servicePaths) {
-                final java.util.Optional<WriteTransaction> optionalWriteTransaction =
-                        NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
-                if (!optionalWriteTransaction.isPresent()) {
-                    LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
-                    return false;
-                }
-                final WriteTransaction writeTransaction = optionalWriteTransaction.get();
                 final InstanceIdentifier<ServicePath> servicePathIid = servicePathInstanceIdentifier(servicePath.getKey());
-                if (deleteTransaction(writeTransaction, servicePathIid)) {
+                if (netconfDeleteIfPresent(mountpoint, servicePathIid)) {
                     LOG.trace("Service-path with ID: {} removed from node {}", servicePath.getServicePathId(),
                             nodeId.getValue());
                 }
+                else {
+                    LOG.warn("Failed to remove service-path with ID: {} from node {}", servicePath.getServicePathId(),
+                            nodeId.getValue());
+                    result = false;
+                }
             }
         }
-        return true;
+        return result;
     }
 
     private static InstanceIdentifier<ClassMap> classMapInstanceIdentifier(final ClassMap classMap) {
@@ -299,84 +262,79 @@ class PolicyWriterUtil {
                 .child(ServicePath.class, key).build();
     }
 
-    private static <U extends DataObject> void writeMergeTransaction(final WriteTransaction transaction,
-                                                                     final InstanceIdentifier<U> addIID,
-                                                                     final U data) {
+    private static <U extends DataObject> boolean netconfWrite(final DataBroker mountpoint,
+                                                            final InstanceIdentifier<U> addIID,
+                                                            final U data) {
+        final java.util.Optional<WriteTransaction> optionalWriteTransaction =
+                NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
+        if (!optionalWriteTransaction.isPresent()) {
+            LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
+            return false;
+        }
+        final WriteTransaction transaction = optionalWriteTransaction.get();
         try {
             transaction.merge(LogicalDatastoreType.CONFIGURATION, addIID, data);
             final CheckedFuture<Void, TransactionCommitFailedException> submitFuture = transaction.submit();
             submitFuture.checkedGet();
+            return true;
         } catch (TransactionCommitFailedException e) {
             LOG.error("Write transaction failed to {}", e.getMessage());
         } catch (Exception e) {
             LOG.error("Failed to .. {}", e.getMessage());
         }
+        return false;
     }
 
-    private static <U extends DataObject> boolean deleteTransaction(final WriteTransaction transaction,
-                                                                    final InstanceIdentifier<U> addIID) {
+    private static <U extends DataObject> boolean netconfDeleteIfPresent(final DataBroker mountpoint,
+                                                                         final InstanceIdentifier<U> deleteIID) {
+        if (netconfRead(mountpoint, deleteIID) == null) {
+            LOG.trace("Remove action called on non-existing element, skipping. Iid was: {}, data provider: {} ",
+                    deleteIID, mountpoint);
+            return true;
+        }
+        final java.util.Optional<WriteTransaction> optionalWriteTransaction =
+                NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint);
+        if (!optionalWriteTransaction.isPresent()) {
+            LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
+            return false;
+        }
+        final WriteTransaction transaction = optionalWriteTransaction.get();
         try {
-            transaction.delete(LogicalDatastoreType.CONFIGURATION, addIID);
+            transaction.delete(LogicalDatastoreType.CONFIGURATION, deleteIID);
             final CheckedFuture<Void, TransactionCommitFailedException> submitFuture = transaction.submit();
             submitFuture.checkedGet();
             return true;
         } catch (TransactionCommitFailedException e) {
             LOG.error("Write transaction failed to {}", e.getMessage());
-            return false;
         } catch (Exception e) {
             LOG.error("Failed to .. {}", e.getMessage());
-            return false;
         }
+        return false;
     }
 
-    private static <U extends DataObject> U checkWritten(final ReadOnlyTransaction transaction,
-                                                         final InstanceIdentifier<U> readIID) {
-        for (int attempt = 1; attempt <= 5; attempt++) {
-            try {
-                final CheckedFuture<Optional<U>, ReadFailedException> submitFuture =
-                        transaction.read(LogicalDatastoreType.CONFIGURATION, readIID);
-                final Optional<U> optional = submitFuture.checkedGet();
-                if (optional != null && optional.isPresent()) {
-                    transaction.close(); // Release lock
-                    return optional.get();
-                } else {
-                    // Could take some time until specific configuration appears on device, try to read a few times
-                    Thread.sleep(2000L);
-                }
-            } catch (InterruptedException i) {
-                LOG.error("Thread interrupted while waiting ... {} ", i);
-            } catch (ReadFailedException e) {
-                LOG.warn("Read transaction failed to {} ", e);
-            } catch (Exception e) {
-                LOG.error("Failed to .. {}", e.getMessage());
-            }
+    private static <U extends DataObject> U netconfRead(final DataBroker mountpoint,
+                                                        final InstanceIdentifier<U> readIID) {
+        final java.util.Optional<ReadOnlyTransaction> optionalReadTransaction =
+                NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint);
+        if (!optionalReadTransaction.isPresent()) {
+            LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint);
+            return null;
         }
-        return null;
-    }
-
-    private static <U extends DataObject> boolean checkRemoved(final ReadOnlyTransaction transaction,
-                                                               final InstanceIdentifier<U> readIID) {
-        for (int attempt = 1; attempt <= 5; attempt++) {
-            try {
-                final CheckedFuture<Optional<U>, ReadFailedException> submitFuture =
-                        transaction.read(LogicalDatastoreType.CONFIGURATION, readIID);
-                final Optional<U> optional = submitFuture.checkedGet();
-                if (optional != null && optional.isPresent()) {
-                    // Could take some time until specific configuration is removed from the device
-                    Thread.sleep(2000L);
-                } else {
-                    transaction.close(); // Release lock
-                    return true;
-                }
-            } catch (InterruptedException i) {
-                LOG.error("Thread interrupted while waiting ... {} ", i);
-            } catch (ReadFailedException e) {
-                LOG.warn("Read transaction failed to {} ", e);
-            } catch (Exception e) {
-                LOG.error("Failed to .. {}", e.getMessage());
+        final ReadOnlyTransaction transaction = optionalReadTransaction.get();
+        try {
+            final CheckedFuture<Optional<U>, ReadFailedException> submitFuture =
+                    transaction.read(LogicalDatastoreType.CONFIGURATION, readIID);
+            final Optional<U> optional = submitFuture.checkedGet();
+            if (optional != null && optional.isPresent()) {
+                transaction.close(); // Release lock
+                return optional.get();
             }
+        } catch (ReadFailedException e) {
+            LOG.warn("Read transaction failed to {} ", e);
+        } catch (Exception e) {
+            LOG.error("Failed to .. {}", e.getMessage());
         }
-        return false;
-    }
 
+        return null;
+    }
 }
index 0cb4e7d9e361ae288d62682d759950e09f0f757b..1e5510e148b852826f84e3037020b25905bbdfa8 100644 (file)
@@ -8,14 +8,11 @@
 
 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.Futures;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
-
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.Futures;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -36,8 +33,6 @@ import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChainBuilde
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.Class;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.ClassBuilder;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServicePathBuilder;
-import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.Local;
-import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.LocalBuilder;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfName;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfNameBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -100,7 +95,7 @@ public class PolicyWriterUtilTest {
         Assert.assertTrue(PolicyWriterUtil.writeClassMaps(classMapEntries, NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with one entry, available writeOnlyTransaction, available readOnlyTransaction, check->null");
-        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "checkWritten")).toReturn(null);
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(null);
         Assert.assertFalse(PolicyWriterUtil.writeClassMaps(classMapEntries, NODE_ID, dataBroker));
     }
 
@@ -115,6 +110,9 @@ public class PolicyWriterUtilTest {
 
         LOG.debug("scenario: fail with one entry, no writeOnlyTransaction");
         classMapEntries.add(new ClassMapBuilder().setName("unit-classMapEntry-name").build());
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(new ClassBuilder().build());
+        PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfWriteOnlyTransaction"))
+                .toReturn(java.util.Optional.empty());
         Assert.assertFalse(PolicyWriterUtil.removeClassMaps(classMapEntries, NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with one entry, available writeOnlyTransaction, no readOnlyTransaction");
@@ -124,12 +122,13 @@ public class PolicyWriterUtilTest {
 
         LOG.debug("scenario: succeed with one entry, available writeOnlyTransaction, available readOnlyTransaction");
         PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfReadOnlyTransaction")).toReturn(rTxOptional);
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(null);
         Mockito.when(rTx.read(Mockito.eq(LogicalDatastoreType.CONFIGURATION), Matchers.<InstanceIdentifier<ClassMap>>any()))
                 .thenReturn(Futures.immediateCheckedFuture(Optional.absent()));
         Assert.assertTrue(PolicyWriterUtil.removeClassMaps(classMapEntries, NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with one entry, available writeOnlyTransaction, available readOnlyTransaction, check->false");
-        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "checkRemoved")).toReturn(false);
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(new ClassBuilder().build());
         Assert.assertFalse(PolicyWriterUtil.removeClassMaps(classMapEntries, NODE_ID, dataBroker));
     }
 
@@ -165,7 +164,7 @@ public class PolicyWriterUtilTest {
         Assert.assertTrue(PolicyWriterUtil.writePolicyMap(POLICY_MAP_NAME, classEntries, NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with one entry, available writeOnlyTransaction, available readOnlyTransaction, check->null");
-        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "checkWritten")).toReturn(null);
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(null);
         Assert.assertFalse(PolicyWriterUtil.writePolicyMap(POLICY_MAP_NAME, classEntries, NODE_ID, dataBroker));
     }
 
@@ -180,17 +179,13 @@ public class PolicyWriterUtilTest {
 
         LOG.debug("scenario: fail with one entry, no writeOnlyTransaction");
         classEntries.add(new ClassBuilder().setName(new ClassNameType("unit-classMapEntry-name")).build());
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(new ClassBuilder().build());
         Assert.assertFalse(PolicyWriterUtil.removePolicyMapEntries(POLICY_MAP_NAME, classEntries, NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with one entry, available writeOnlyTransaction, no readOnlyTransaction");
         PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfWriteOnlyTransaction")).toReturn(wTxOptional);
         Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
         Assert.assertTrue(PolicyWriterUtil.removePolicyMapEntries(POLICY_MAP_NAME, classEntries, NODE_ID, dataBroker));
-
-        //TODO: fix - failed remove transacion shall render whole operation as failed
-        LOG.debug("scenario: fail with one entry, available writeOnlyTransaction, available readOnlyTransaction, check->false");
-        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "deleteTransaction")).toReturn(false);
-        Assert.assertTrue(PolicyWriterUtil.removePolicyMapEntries(POLICY_MAP_NAME, classEntries, NODE_ID, dataBroker));
     }
 
     @Test
@@ -199,9 +194,9 @@ public class PolicyWriterUtilTest {
         final String interfaceName = "unit-interface-1";
         Assert.assertFalse(PolicyWriterUtil.writeInterface(POLICY_MAP_NAME, interfaceName, NODE_ID, dataBroker));
 
-        LOG.debug("scenario: succeed - available writeOnlyTransaction, no submit future");
+        LOG.debug("scenario: fail - available writeOnlyTransaction, no submit future");
         PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfWriteOnlyTransaction")).toReturn(wTxOptional);
-        Assert.assertTrue(PolicyWriterUtil.writeInterface(POLICY_MAP_NAME, interfaceName, NODE_ID, dataBroker));
+        Assert.assertFalse(PolicyWriterUtil.writeInterface(POLICY_MAP_NAME, interfaceName, NODE_ID, dataBroker));
 
         LOG.debug("scenario: succeed - available writeOnlyTransaction, available future");
         Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
@@ -220,9 +215,9 @@ public class PolicyWriterUtilTest {
         final Set<ServiceFfName> remotes = Collections.singleton(new ServiceFfNameBuilder().build());
         Assert.assertFalse(PolicyWriterUtil.writeRemote(remotes, NODE_ID, dataBroker));
 
-        LOG.debug("scenario: succeed - available writeOnlyTransaction, no submit future");
+        LOG.debug("scenario: fail - available writeOnlyTransaction, no submit future");
         PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfWriteOnlyTransaction")).toReturn(wTxOptional);
-        Assert.assertTrue(PolicyWriterUtil.writeRemote(remotes, NODE_ID, dataBroker));
+        Assert.assertFalse(PolicyWriterUtil.writeRemote(remotes, NODE_ID, dataBroker));
 
         LOG.debug("scenario: succeed - available writeOnlyTransaction, available future");
         Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
@@ -242,9 +237,9 @@ public class PolicyWriterUtilTest {
                 .build());
         Assert.assertFalse(PolicyWriterUtil.writeServicePaths(serviceChains, NODE_ID, dataBroker));
 
-        LOG.debug("scenario: succeed - available writeOnlyTransaction, no submit future");
+        LOG.debug("scenario: fail - available writeOnlyTransaction, no submit future");
         PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfWriteOnlyTransaction")).toReturn(wTxOptional);
-        Assert.assertTrue(PolicyWriterUtil.writeServicePaths(serviceChains, NODE_ID, dataBroker));
+        Assert.assertFalse(PolicyWriterUtil.writeServicePaths(serviceChains, NODE_ID, dataBroker));
 
         LOG.debug("scenario: succeed - available writeOnlyTransaction, available future");
         Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
@@ -260,6 +255,7 @@ public class PolicyWriterUtilTest {
         Assert.assertTrue(PolicyWriterUtil.removeServicePaths(Collections.emptySet(), NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with service path present, no writeOnlyTransaction");
+        PowerMockito.stub(PowerMockito.method(PolicyWriterUtil.class, "netconfRead")).toReturn(new ClassBuilder().build());
         final Set<ServiceChain> serviceChains = Collections.singleton(new ServiceChainBuilder()
                 .setServicePath(Collections.singletonList(new ServicePathBuilder()
                         .setServicePathId(42L)
@@ -269,7 +265,7 @@ public class PolicyWriterUtilTest {
 
         LOG.debug("scenario: fail with service path present, available writeOnlyTransaction, no submit future");
         PowerMockito.stub(PowerMockito.method(NetconfTransactionCreator.class, "netconfWriteOnlyTransaction")).toReturn(wTxOptional);
-        Assert.assertTrue(PolicyWriterUtil.removeServicePaths(serviceChains, NODE_ID, dataBroker));
+        Assert.assertFalse(PolicyWriterUtil.removeServicePaths(serviceChains, NODE_ID, dataBroker));
 
         LOG.debug("scenario: fail with service path present, available writeOnlyTransaction, available future");
         Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));