ios-xe renderer bugfix 81/41381/7
authorVladimir Lavor <vlavor@cisco.com>
Wed, 6 Jul 2016 07:45:24 +0000 (09:45 +0200)
committerVladimir Lavor <vlavor@cisco.com>
Mon, 11 Jul 2016 11:30:51 +0000 (13:30 +0200)
- remote forwarders are created with correct ip address
- local forwarder is never removed and it's presence is not
    checked

Change-Id: I1fa38e94804d9a8cbc36aef2274953c650386c30
Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtil.java
renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriter.java
renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtilTest.java

index 5a202ce5ecf4eeebe69adedfefcef1d2b8636d04..e69a690817c7dbbaad50b6cfd9f78e0a112764a2 100644 (file)
@@ -38,9 +38,13 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev1407
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.CreateRenderedPathInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.SffDataPlaneLocator;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.sff.data.plane.locator.DataPlaneLocator;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.LocatorType;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.Ip;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308.Native;
@@ -53,8 +57,6 @@ import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.Class;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServicePath;
 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.ServicePathKey;
-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.ServiceFfNameBuilder;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfNameKey;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.path.ConfigServiceChainPathModeBuilder;
@@ -73,7 +75,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.security.cert.PKIXRevocationChecker;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -258,39 +259,6 @@ public class ServiceChainingUtil {
         return reversedRenderedPath;
     }
 
-    /**
-     * Method checks up, whether a {@link Local} Service Function Forwarder is present on device or not.
-     *
-     * @param mountpoint used to access specific device
-     * @return true if Local Forwarder is present, false otherwise
-     */
-    private static boolean checkLocalForwarderPresence(DataBroker mountpoint) {
-        InstanceIdentifier<Local> localSffIid = InstanceIdentifier.builder(Native.class)
-                .child(ServiceChain.class)
-                .child(org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServiceFunctionForwarder.class)
-                .child(Local.class).build();
-        try {
-            java.util.Optional<ReadOnlyTransaction> optionalTransaction =
-                    NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint);
-            if (!optionalTransaction.isPresent()) {
-                LOG.warn("Failed to create transaction, mountpoint: {}", mountpoint);
-                return false;
-            }
-            ReadOnlyTransaction transaction = optionalTransaction.get();
-            CheckedFuture<Optional<Local>, ReadFailedException> submitFuture =
-                    transaction.read(LogicalDatastoreType.CONFIGURATION,
-                    localSffIid);
-            Optional<Local> optionalLocalSff = submitFuture.checkedGet();
-            transaction.close(); // Release lock
-            return optionalLocalSff.isPresent();
-        } catch (ReadFailedException e) {
-            LOG.warn("Read transaction failed to {} ", e);
-        } catch (Exception e) {
-            LOG.error("Failed to .. {}", e.getMessage());
-        }
-        return false;
-    }
-
     /**
      * Method checks up, if some {@link ServicePath} is present on device.
      *
@@ -353,11 +321,6 @@ public class ServiceChainingUtil {
 
     static boolean setSfcPart(final ServiceFunctionPath serviceFunctionPath, final RenderedServicePath renderedServicePath,
                               final RenderedServicePath reversedRenderedServicePath, PolicyWriter policyWriter) {
-        if (!checkLocalForwarderPresence(policyWriter.getCurrentMountpoint())) {
-            appendLocalSff(policyWriter);
-        } else {
-            LOG.info("Local forwarder for node {} is already created", policyWriter.getCurrentNodeId());
-        }
         boolean outcome = true;
         // Direct path
         final java.util.Optional<RenderedServicePath> renderedServicePathSafe = java.util.Optional.ofNullable(renderedServicePath);
@@ -367,14 +330,12 @@ public class ServiceChainingUtil {
                 if (!resolveRenderedServicePath(renderedServicePath, policyWriter)) {
                     outcome = false;
                 }
-            }
-            else {
+            } else {
                 LOG.warn("Rendered service path {} does not contain any hop",
                         renderedServicePathSafe.map(RenderedServicePath::getName).map(RspName::getValue).orElse("n/a"));
                 outcome = false;
             }
-        }
-        else {
+        } else {
             LOG.warn("Rendered service path is null");
             outcome = false;
         }
@@ -416,10 +377,30 @@ public class ServiceChainingUtil {
         // forwarder (Remote case)
 
         final java.util.Optional<ServiceFunctionForwarder> serviceFunctionForwarder = java.util.Optional.ofNullable(
-                    SfcProviderServiceForwarderAPI.readServiceFunctionForwarder(sffName));
-        return serviceFunctionForwarder.map(sff -> java.util.Optional.ofNullable(IetfModelCodec.ipAddress2010(sff.getIpMgmtAddress()))
-                    .map(IpAddress::getIpv4Address)
-                    .map((ipv4Address) -> ipv4Address.getValue())
+                SfcProviderServiceForwarderAPI.readServiceFunctionForwarder(sffName));
+        if (!serviceFunctionForwarder.isPresent()) {
+            LOG.warn("Service function forwarder {} does not exist", sffName.getValue());
+            return false;
+        }
+        final ServiceFunctionForwarder forwarder = serviceFunctionForwarder.get();
+        if (forwarder.getSffDataPlaneLocator() == null || forwarder.getSffDataPlaneLocator().isEmpty()) {
+            LOG.warn("Service function forwarder {} does not contain data plane locator", sffName.getValue());
+            return false;
+        }
+        // TODO only first dpl resolved
+        final SffDataPlaneLocator sffDataPlaneLocator = forwarder.getSffDataPlaneLocator().get(0);
+        final DataPlaneLocator dataPlaneLocator = sffDataPlaneLocator.getDataPlaneLocator();
+        final LocatorType locatorType = dataPlaneLocator.getLocatorType();
+        if (locatorType != null && locatorType instanceof Ip) {
+            final IpAddress remoteForwarderIpAddress = IetfModelCodec.ipAddress2010(((Ip) locatorType).getIp());
+            if (remoteForwarderIpAddress == null || remoteForwarderIpAddress.getIpv4Address() == null) {
+                LOG.warn("Service function forwarder {} data plane locator does not contain ip address", sffName.getValue());
+                return false;
+            }
+            final String remoteForwarderStringIp = remoteForwarderIpAddress.getIpv4Address().getValue();
+            return serviceFunctionForwarder.map(sff -> java.util.Optional.ofNullable(sff.getIpMgmtAddress())
+                    .map(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress::getIpv4Address)
+                    .map(Ipv4Address::getValue)
                     .map(addressValue -> {
                         // Set up choice. If remote, this choice is overwritten
                         final ServiceTypeChoice serviceTypeChoice;
@@ -427,7 +408,7 @@ public class ServiceChainingUtil {
                             final ServiceFfNameBuilder remoteSffBuilder = new ServiceFfNameBuilder();
                             remoteSffBuilder.setName(sffName.getValue())
                                     .setKey(new ServiceFfNameKey(sffName.getValue()))
-                                    .setIp(new IpBuilder().setAddress(new Ipv4Address(addressValue)).build());
+                                    .setIp(new IpBuilder().setAddress(new Ipv4Address(remoteForwarderStringIp)).build());
                             policyWriter.cache(remoteSffBuilder.build());
                             serviceTypeChoice = forwarderTypeChoice(sffName.getValue());
                         } else {
@@ -461,13 +442,8 @@ public class ServiceChainingUtil {
             ).orElseGet(createNegativePathWithLogSupplier(sffName.getValue(),
                     (value) -> LOG.error("Sff with name {} does not exist", value))
             );
-    }
-
-    private static void appendLocalSff(final PolicyWriter policyWriter) {
-        final LocalBuilder localSffBuilder = new LocalBuilder();
-        localSffBuilder.setIp(new IpBuilder().setAddress(new Ipv4Address(policyWriter.getManagementIpAddress()))
-                .build());
-        policyWriter.cache(localSffBuilder.build());
+        }
+        return false;
     }
 
     static ServiceTypeChoice forwarderTypeChoice(final String forwarderName) {
@@ -485,7 +461,7 @@ public class ServiceChainingUtil {
     private static void checkSfcRspStatus(final RspName rspName, final DataBroker dataBroker) {
         /** TODO A better way to do this is to register listener and wait for notification than using hardcoded timeout
          *  with Thread.sleep(). Example in class BridgeDomainManagerImpl
-        */
+         */
         ConfiguredRenderedPath renderedPath = null;
         LOG.info("Waiting for SFC to configure path {} ...", rspName.getValue());
 
index 67948290eca79871c2c127bb51cf3094cf307709..711b576387913aea454db0ef2def51a85b6a89fe 100644 (file)
@@ -16,7 +16,6 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFaile
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ClassMap;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChain;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.Class;
-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.ServiceFfName;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.slf4j.Logger;
@@ -39,7 +38,6 @@ public class PolicyWriter {
     private final String interfaceName;
     private final String policyMapName;
     private final String managementIpAddress;
-    private Local localForwarder;
 
     public PolicyWriter(final DataBroker dataBroker, final String interfaceName, final String ipAddress,
                         final String policyMapName, final NodeId nodeId) {
@@ -63,10 +61,6 @@ public class PolicyWriter {
         this.policyMapEntries.addAll(policyMapEntries);
     }
 
-    public void cache(Local localForwarder) {
-        this.localForwarder = localForwarder;
-    }
-
     public void cache(ServiceFfName remoteForwarder) {
         remoteForwarders.add(remoteForwarder);
     }
@@ -78,7 +72,6 @@ public class PolicyWriter {
     public CheckedFuture<Boolean, TransactionCommitFailedException> commitToDatastore() {
         LOG.info("Configuring policy on node {} ... ", nodeId.getValue());
         // SFC
-        boolean localResult = PolicyWriterUtil.writeLocal(localForwarder, nodeId, mountpoint);
         boolean remoteResult = PolicyWriterUtil.writeRemote(remoteForwarders, nodeId, mountpoint);
         boolean servicePathsResult = PolicyWriterUtil.writeServicePaths(serviceChains, nodeId, mountpoint);
         // GBP - maintain order!
@@ -87,8 +80,8 @@ public class PolicyWriter {
         boolean interfaceResult = PolicyWriterUtil.writeInterface(policyMapName, interfaceName, nodeId, mountpoint);
         // Result
         LOG.info("Policy configuration on node {} completed", nodeId.getValue());
-        return Futures.immediateCheckedFuture(classMapResult && policyMapResult && interfaceResult && localResult
-                && remoteResult && servicePathsResult);
+        return Futures.immediateCheckedFuture(classMapResult && policyMapResult && interfaceResult && remoteResult
+                && servicePathsResult);
     }
 
     public CheckedFuture<Boolean, TransactionCommitFailedException> removeFromDatastore() {
@@ -100,12 +93,10 @@ public class PolicyWriter {
         // TODO remove class map?
         // SFC
         boolean servicePathsResult = PolicyWriterUtil.removeServicePaths(serviceChains, nodeId, mountpoint);
-        boolean localResult = PolicyWriterUtil.removeLocal(nodeId, mountpoint);
         // TODO remove remote forwarders
         // Result
         LOG.info("Policy removed from node {}", nodeId.getValue());
-        return Futures.immediateCheckedFuture(classMapResult && policyMapEntriesResult && servicePathsResult
-                && localResult);
+        return Futures.immediateCheckedFuture(classMapResult && policyMapEntriesResult && servicePathsResult);
     }
 
     public String getManagementIpAddress() {
index 48cc53a07b62aa11854c2347f6875c36317def59..13c380a2b43d4943bcd9717a79cb54e4c6792f3d 100644 (file)
@@ -14,10 +14,6 @@ import static org.powermock.api.support.membermodification.MemberModifier.stub;
 import com.google.common.base.Optional;
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Futures;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -49,11 +45,14 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev1407
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHopBuilder;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.SffDataPlaneLocatorBuilder;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.sff.data.plane.locator.DataPlaneLocatorBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPathsBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.IpBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ClassMap;
@@ -85,6 +84,11 @@ import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Test for {@link ServiceChainingUtil}.
  */
@@ -483,17 +487,22 @@ public class ServiceChainingUtilTest {
     @Test
     public void testSetSfcPart_success() throws Exception {
         final RenderedServicePath rsp = createRsp("unit-rsp-03");
+        final DataPlaneLocatorBuilder dataPlaneLocatorBuilder = new DataPlaneLocatorBuilder();
+        final IpBuilder ipBuilderLocatorType = new IpBuilder();
+        ipBuilderLocatorType.setIp(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4"))));
+        dataPlaneLocatorBuilder.setLocatorType(ipBuilderLocatorType.build());
+        final SffDataPlaneLocatorBuilder sffDataPlaneLocatorBuilder = new SffDataPlaneLocatorBuilder();
+        sffDataPlaneLocatorBuilder.setDataPlaneLocator(dataPlaneLocatorBuilder.build());
         final org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder
                 sff = new ServiceFunctionForwarderBuilder()
                 .setName(new SffName("unit-sff-03"))
                 .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4"))))
+                .setSffDataPlaneLocator(Collections.singletonList(sffDataPlaneLocatorBuilder.build()))
                 .build();
         final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder();
         sfpBuilder.setSymmetric(false);
         final ServiceFunctionPath sfp = sfpBuilder.build();
 
-        stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true);
-
         PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class);
         final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class);
         PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(sff);
@@ -505,8 +514,6 @@ public class ServiceChainingUtilTest {
 
         Mockito.verify(policyWriter).cache(Matchers.<ServiceFfName>any());
         Mockito.verify(policyWriter).cache(Matchers.<ServiceChain>any());
-        Mockito.verify(policyWriter).getCurrentNodeId();
-        Mockito.verify(policyWriter).getCurrentMountpoint();
         Mockito.verify(policyWriter).getManagementIpAddress();
         Mockito.verifyNoMoreInteractions(policyWriter);
     }
@@ -514,17 +521,22 @@ public class ServiceChainingUtilTest {
     @Test
     public void testSetSfcPart_success_newRsp() throws Exception {
         final RenderedServicePath rsp = createRsp("unit-rsp-03");
+        final DataPlaneLocatorBuilder dataPlaneLocatorBuilder = new DataPlaneLocatorBuilder();
+        final IpBuilder ipBuilderLocatorType = new IpBuilder();
+        ipBuilderLocatorType.setIp(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4"))));
+        dataPlaneLocatorBuilder.setLocatorType(ipBuilderLocatorType.build());
+        final SffDataPlaneLocatorBuilder sffDataPlaneLocatorBuilder = new SffDataPlaneLocatorBuilder();
+        sffDataPlaneLocatorBuilder.setDataPlaneLocator(dataPlaneLocatorBuilder.build());
         final org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder
                 sff = new ServiceFunctionForwarderBuilder()
                 .setName(new SffName("unit-sff-03"))
                 .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4"))))
+                .setSffDataPlaneLocator(Collections.singletonList(sffDataPlaneLocatorBuilder.build()))
                 .build();
         final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder();
         sfpBuilder.setSymmetric(false);
         final ServiceFunctionPath sfp = sfpBuilder.build();
 
-        stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(false);
-
         PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class);
         final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class);
         PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(sff);
@@ -534,11 +546,9 @@ public class ServiceChainingUtilTest {
         Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
         Assert.assertTrue(outcome);
 
-        Mockito.verify(policyWriter).cache(Matchers.<Local>any());
         Mockito.verify(policyWriter).cache(Matchers.<ServiceFfName>any());
         Mockito.verify(policyWriter).cache(Matchers.<ServiceChain>any());
-        Mockito.verify(policyWriter).getCurrentMountpoint();
-        Mockito.verify(policyWriter, Mockito.times(2)).getManagementIpAddress();
+        Mockito.verify(policyWriter).getManagementIpAddress();
         Mockito.verifyNoMoreInteractions(policyWriter);
     }
 
@@ -579,9 +589,6 @@ public class ServiceChainingUtilTest {
         Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
         Assert.assertFalse(outcome);
 
-        Mockito.verify(policyWriter).getCurrentMountpoint();
-        Mockito.verify(policyWriter).getManagementIpAddress();
-        Mockito.verify(policyWriter).cache(Matchers.<Local>any());
         Mockito.verifyNoMoreInteractions(policyWriter);
     }
 
@@ -595,8 +602,6 @@ public class ServiceChainingUtilTest {
         sfpBuilder.setSymmetric(false);
         final ServiceFunctionPath sfp = sfpBuilder.build();
 
-        stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true);
-
         PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class);
         final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class);
         PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(
@@ -606,8 +611,6 @@ public class ServiceChainingUtilTest {
 
         Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
 
-        Mockito.verify(policyWriter).getCurrentMountpoint();
-        Mockito.verify(policyWriter).getCurrentNodeId();
         Mockito.verifyNoMoreInteractions(policyWriter);
     }
 
@@ -621,8 +624,6 @@ public class ServiceChainingUtilTest {
         sfpBuilder.setSymmetric(false);
         final ServiceFunctionPath sfp = sfpBuilder.build();
 
-        stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true);
-
         PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class);
         final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class);
         PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(
@@ -632,8 +633,6 @@ public class ServiceChainingUtilTest {
 
         Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
 
-        Mockito.verify(policyWriter).getCurrentMountpoint();
-        Mockito.verify(policyWriter).getCurrentNodeId();
         Mockito.verifyNoMoreInteractions(policyWriter);
     }