From 86b688016d2ff5494e6cf6378a3233498e73e2ee Mon Sep 17 00:00:00 2001 From: Vladimir Lavor Date: Mon, 18 Jul 2016 09:03:30 +0200 Subject: [PATCH] ios-xe - check existence of element before removing it Change-Id: I582b30424582909c50cad8250885fdba30438eb8 Signed-off-by: Vladimir Lavor --- .../impl/writer/PolicyWriterUtil.java | 286 ++++++++---------- .../impl/writer/PolicyWriterUtilTest.java | 40 ++- 2 files changed, 140 insertions(+), 186 deletions(-) diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtil.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtil.java index a3c705684..f2cd57259 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtil.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtil.java @@ -51,33 +51,24 @@ class PolicyWriterUtil { private static final Logger LOG = LoggerFactory.getLogger(PolicyWriterUtil.class); static boolean writeClassMaps(final Set 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 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 classMapIid = classMapInstanceIdentifier(entry); - writeMergeTransaction(writeTransaction, classMapIid, entry); + netconfWrite(mountpoint, classMapIid, entry); // Check - final java.util.Optional optionalTransaction = - NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint); - if (!optionalTransaction.isPresent()) { - LOG.warn("Failed to create read-only transaction, mountpoint: {}", mountpoint); - return false; + final java.util.Optional 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 classMapEntries, final NodeId nodeId, final DataBroker mountpoint) { @@ -86,50 +77,29 @@ class PolicyWriterUtil { return true; } for (ClassMap entry : classMapEntries) { - final java.util.Optional 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 classMapIid = classMapInstanceIdentifier(entry); - deleteTransaction(writeTransaction, classMapIid); + netconfDeleteIfPresent(mountpoint, classMapIid); // Check - final java.util.Optional optionalReadTransaction = - NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint); - if (!optionalReadTransaction.isPresent()) { - LOG.warn("Failed to create read-only transaction, mountpoint: {}", mountpoint); - return false; + final java.util.Optional 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 policyMapEntries, NodeId nodeId, final DataBroker mountpoint) { - final java.util.Optional 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 policyMapIid = policyMapInstanceIdentifier(policyMapName); - writeMergeTransaction(writeTransaction, policyMapIid, policyMap); + netconfWrite(mountpoint, policyMapIid, policyMap); // Check - final java.util.Optional 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 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 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 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 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 optionalWriteTransaction = - NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint); - if (!optionalWriteTransaction.isPresent()) { - LOG.warn("Failed to create transaction, mountpoint: {}", mountpoint); - return false; - } - final WriteTransaction writeTransaction = optionalWriteTransaction.get(); final InstanceIdentifier 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 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 optionalWriteTransaction = - NetconfTransactionCreator.netconfWriteOnlyTransaction(mountpoint); - if (!optionalWriteTransaction.isPresent()) { - LOG.warn("Failed to create transaction, mountpoint: {}", mountpoint); - return false; - } - final WriteTransaction writeTransaction = optionalWriteTransaction.get(); final InstanceIdentifier 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 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 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 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 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 servicePaths = chain.getServicePath(); if (servicePaths == null || servicePaths.isEmpty()) { continue; } for (ServicePath servicePath : servicePaths) { - final java.util.Optional 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 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 classMapInstanceIdentifier(final ClassMap classMap) { @@ -299,84 +262,79 @@ class PolicyWriterUtil { .child(ServicePath.class, key).build(); } - private static void writeMergeTransaction(final WriteTransaction transaction, - final InstanceIdentifier addIID, - final U data) { + private static boolean netconfWrite(final DataBroker mountpoint, + final InstanceIdentifier addIID, + final U data) { + final java.util.Optional 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 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 boolean deleteTransaction(final WriteTransaction transaction, - final InstanceIdentifier addIID) { + private static boolean netconfDeleteIfPresent(final DataBroker mountpoint, + final InstanceIdentifier 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 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 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 checkWritten(final ReadOnlyTransaction transaction, - final InstanceIdentifier readIID) { - for (int attempt = 1; attempt <= 5; attempt++) { - try { - final CheckedFuture, ReadFailedException> submitFuture = - transaction.read(LogicalDatastoreType.CONFIGURATION, readIID); - final Optional 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 netconfRead(final DataBroker mountpoint, + final InstanceIdentifier readIID) { + final java.util.Optional optionalReadTransaction = + NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint); + if (!optionalReadTransaction.isPresent()) { + LOG.warn("Failed to create write-only transaction, mountpoint: {}", mountpoint); + return null; } - return null; - } - - private static boolean checkRemoved(final ReadOnlyTransaction transaction, - final InstanceIdentifier readIID) { - for (int attempt = 1; attempt <= 5; attempt++) { - try { - final CheckedFuture, ReadFailedException> submitFuture = - transaction.read(LogicalDatastoreType.CONFIGURATION, readIID); - final Optional 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, ReadFailedException> submitFuture = + transaction.read(LogicalDatastoreType.CONFIGURATION, readIID); + final Optional 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; + } } diff --git a/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtilTest.java b/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtilTest.java index 0cb4e7d9e..1e5510e14 100644 --- a/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtilTest.java +++ b/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriterUtilTest.java @@ -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.>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 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 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)); -- 2.36.6